Spark 的 运行模式(--master) 和 部署方式(--deploy-mode),两者的核心区别在于 资源调度范围 和 Driver 进程的位置。
一、核心概念对比
| 维度 | --master(运行模式) | --deploy-mode(部署方式) | 
|---|---|---|
| 作用 | 指定 Spark 应用在哪里运行(单机 / 集群 / 云平台)。 | 指定 Driver 进程的运行位置(本地客户端 / 集群节点)。 | 
| 选项范围 | - 单机:local / local[N] / local[*]- 集群: yarn / spark://host:port / mesos | 仅当 --master 为 集群模式 时有效:- client(客户端部署)- cluster(集群部署) | 
| 是否必填 | 是(决定应用的运行环境)。 | 否(默认值:client,仅在集群模式下需显式指定)。 | 
二、--master 运行模式详解
 
1. 单机模式(Local Mode)
适用场景:开发调试、本地测试(无需真实集群资源)。
local:- 单线程运行,所有任务在一个线程中串行执行(无并行)。
 - 示例:
--master local 
local[N]:- 使用 N 个线程 模拟集群中的 Executor,并行执行任务(N 通常为 CPU 核心数)。
 - 示例:
--master local[2](2 个线程并行)。 
local[*]:- 使用 所有可用 CPU 核心 线程(自动获取本地 CPU 核数)。
 
特点:
- 无需启动集群服务,直接在本地 JVM 中运行。
 - Driver 和 Executor 都在同一个进程内,适合验证代码逻辑。
 
2. 集群模式(Cluster Mode)
适用场景:生产环境(需调度真实集群资源)。
 常见集群模式包括:
yarn:运行在 Hadoop YARN 集群上(最常用的企业级方案)。spark://host:port:运行在 Spark 自带的独立集群(Standalone Cluster)。mesos:运行在 Mesos 集群上(较少用)。
特点:
- 需要提前启动集群服务(如 YARN 的 ResourceManager、Spark Standalone 的 Master 节点)。
 - 资源由集群统一管理,支持多应用并发运行。
 
三、--deploy-mode 部署方式详解(仅集群模式有效)
 
当 --master 设置为集群模式(如 yarn 或 spark://...)时,需通过 --deploy-mode 指定 Driver 进程的位置:
1. client 部署(默认)
- Driver 运行位置:提交任务的客户端节点(如你本地的终端或服务器)。
 
Driver 进程运行在提交作业的客户端机器上
- 适用场景: 
- 交互式任务(如 Spark Shell)或需要实时查看日志的调试场景。
 - Driver 需要与客户端进行交互(例如接收用户输入)。
 
 - 优缺点: 
- 优点:日志直接输出到客户端,方便调试。
 - 缺点:若客户端断开连接,任务会终止;Driver 占用客户端资源。
 
 
示例(YARN 集群 + client 部署):
spark-submit --master yarn --deploy-mode client ...
 
2. cluster 部署
- Driver 运行位置:集群内部的某个节点(由集群调度分配)。
 
Driver 进程运行在集群的某个 Worker 节点上。
- 适用场景:生产环境的长时间运行任务(如定时批处理)。
 - 优缺点: 
- 优点:任务提交后客户端可断开连接,Driver 独立运行在集群中,稳定性高。
 - 缺点:日志需通过集群命令(如 
yarn logs)查看,调试不如client方便。 
 
示例(YARN 集群 + cluster 部署):
spark-submit --master yarn --deploy-mode cluster ...
 
四、经典场景搭配
| 场景 | --master 配置 | --deploy-mode 配置 | 说明 | 
|---|---|---|---|
| 本地调试 | local[2] | 无需指定(单机模式不生效) | 使用 2 个线程模拟并行,直接在本地运行,日志打印到终端。 | 
| YARN 集群调试(需看日志) | yarn | client | Driver 运行在提交任务的客户端(如服务器),日志实时输出到终端。 | 
| YARN 集群生产任务 | yarn | cluster | Driver 运行在集群节点,任务提交后客户端可断开,适合无人值守任务。 | 
| Spark 独立集群任务 | spark://master-host:7077 | cluster(推荐) | Driver 在集群内部,资源由 Spark Standalone 管理。 | 
五、常见误区
-  
单机模式下无需
--deploy-mode:- 单机模式(
local)中,Driver 和 Executor 都在本地,--deploy-mode无效,指定会报错。 
 - 单机模式(
 -  
集群模式必须选
deploy-mode:- 若 
--master是yarn或spark://...,必须显式指定--deploy-mode client或cluster(默认是client,但生产环境建议显式写cluster)。 
 - 若 
 -  
local不是集群:local模式是 伪分布式(模拟集群行为),实际没有真正的集群节点,仅用于开发测试。
 
总结记忆法
--master决定 “在哪跑”:选本地(local)或集群(yarn/spark://...)。--deploy-mode决定 “Driver 在哪”:集群模式下,选客户端(client)或集群内(cluster)。- 开发调试用 
local或yarn client,生产任务用yarn cluster或spark://... cluster。