Spark 的运行模式(--master) 和 部署方式(--deploy-mode)

发布于:2025-05-22 ⋅ 阅读:(20) ⋅ 点赞:(0)

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 管理。

五、常见误区

  1. 单机模式下无需 --deploy-mode

    • 单机模式(local)中,Driver 和 Executor 都在本地,--deploy-mode 无效,指定会报错。
  2. 集群模式必须选 deploy-mode

    • 若 --master 是 yarn 或 spark://...,必须显式指定 --deploy-mode client 或 cluster(默认是 client,但生产环境建议显式写 cluster)。
  3. local 不是集群

    • local 模式是 伪分布式(模拟集群行为),实际没有真正的集群节点,仅用于开发测试。

总结记忆法

  • --master 决定 “在哪跑”:选本地(local)或集群(yarn/spark://...)。
  • --deploy-mode 决定 “Driver 在哪”:集群模式下,选客户端(client)或集群内(cluster)。
  • 开发调试用 local 或 yarn client生产任务用 yarn cluster 或 spark://... cluster

网站公告

今日签到

点亮在社区的每一天
去签到