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
。