Spark 部署模式

一、Local 模式

所谓 Local 模式,就是不需要其他任何节点资源就可以在本地执行 Spark 代码的环境,一般用于教学、调试、演示等。

1.1 提交应用命令

bash 复制代码
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[2] \
./examples/jars/spark-examples_2.12-3.0.0.jar \
10
  • --class 表示要执行程序的主类;
  • --master local2 表示部署模式,默认为本地模式,数字表示分配的虚拟 CPU 核数;
  • 默认 Web UI 端口为 4040

二、Standalone 模式

Spark 自身节点运行的集群模式,由 Spark 自身提供计算资源,无需其他框架提供资源,经典的 master-slave 模式。默认 Web UI 端口为 8080。

2.1 提交应用命令

bash 复制代码
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://linux1:7077 \
./examples/jars/spark-examples_2.12-3.0.0.jar \
10

2.2 参数说明

|------------------------|-------------------------|------------------------------------------|
| 参数 | 解释 | 可选值举例 |
| --class | Spark 程序中包含主函数的类 | |
| --master | Spark 程序运行的模式(环境) | 模式:local\*、spark://linux1:7077、 Yarn |
| --total-executor-cores | 指定所有 executor 使用的cpu 核数 | |
| --executor-cores | 指定每个 executor 使用的cpu 核数 | |
| --executor-memory | 指定每个 executor 可用内存 | |

三、Yarn 模式

使用 Yarn 作为资源调度框架,执行 Spark 任务前需要先启动 HDFS 以及 YARN 集群。根据 Driver 运行的位置,又分为 Cluster 模式和 Client 模式。

3.1 Cluster 模式

3.1.1 特点

  • Driver 程序在 Yarn 集群的 ApplicationMaster 中运行;
  • 客户端提交作业后可以断开连接
  • 完整的资源管理和作业监控由 Yarn 负责
  • Driver 故障可由 Yarn 重启
  • 网络要求较低

3.1.2 提交应用命令

bash 复制代码
bin/spark-submit \
  --class com.example.SparkApp \
  --master yarn \
  --deploy-mode cluster \
  --executor-memory 2g \
  --num-executors 4 \
  /path/to/your-app.jar

3.1.3 参数说明

|-------------------|--------------------------|
| 参数 | 解释 |
| --class | Spark 程序中包含主函数的类 |
| --master | Spark 程序运行的模式(环境) |
| --deploy-mode | 指定提交模式 |
| --driver-cores | 指定 Driver 可用的 cpu 核数 |
| --driver-memory | 指定 Driver 可用内存 |
| --num-executors | 指定 executor 个数 |
| --executor-cores | 指定每个 executor 可用的 cpu 核数 |
| --executor-memory | 指定每个 executor 可用内存 |

3.1.4 工作流程

  1. 用户提交应用 :通过 spark-submit 从客户端机器提交作业,并指定 --deploy-mode cluster。

  2. ResourceManager 分配容器:ResourceManager(RM)找到一个合适的 NodeManager(NM)节点,并在该节点上启动一个容器来运行 ApplicationMaster。

  3. 启动 ApplicationMaster(内含 Spark Driver):在这个容器中,启动的正是 Spark ApplicationMaster,它本身包含了 Spark Driver 程序。

  4. Driver 注册并申请资源:Driver 向 ResourceManager 注册应用,并申请用于运行 Spark Executor 的资源容器。

  5. 启动 Executors:ResourceManager 指示其他 NodeManagers 启动 Executor 容器。这些 Executors 启动后会直接与在 AM 中的 Driver 通信。

  6. 执行应用:Driver 调度任务到各个 Executor 上执行。

  7. 应用结束:所有任务执行完毕后,Driver 向 ResourceManager 注销,并关闭自己所在的 AM 容器。

3.2 Client 模式

3.2.1 特点

  • Driver 在客户端:客户端必须在整个应用运行期间保持网络连通。

  • 适合交互和调试 :spark-shell 和 pyspark 默认使用此模式,因为 Driver 在本地,用户可以即时看到输出并与 Spark 进行交互。

  • 日志直观:Driver 的日志直接输出在客户端的控制台,方便实时调试。

  • 不适合生产:如果客户端断开或关闭,整个应用会失败。

3.2.2 提交应用命令

bash 复制代码
bin/spark-submit \
--master yarn \
--deploy-mode client \
--driver-cores 2 \
--driver-memory 4g \
--num-executors 4 \
--executor-cores 3 \
--executor-memory 4g \
--conf spark.sql.shuffle.partitions=24 \
--conf spark.default.parallelism=24 \
--conf spark.ui.port=8095 \
--jars /data/job/spark/lib/test-withoutdep.jar \
--class com.example.SparkApp \
/data/job/spark/test.jar

3.2.3 参数说明

|------------------------------|-----------------------------|
| 参数 | 解释 |
| --class | Spark 程序中包含主函数的类 |
| --master | Spark 程序运行的模式(环境) |
| --deploy-mode | 指定提交模式 |
| --driver-cores | 指定 Driver 可用的 cpu 核数 |
| --driver-memory | 指定 Driver 可用内存 |
| --num-executors | 指定 executor 个数 |
| --executor-cores | 指定每个 executor 可用的 cpu 核数 |
| --executor-memory | 指定每个 executor 可用内存 |
| spark.sql.shuffle.partitions | 设置 Spark SQL shuffle 操作的分区数 |
| spark.default.parallelism | 设置 RDD 的默认并行度 |
| spark.ui.port | 设置 Spark Web UI 的端口号 |
| --jars | 指定额外的依赖 JAR 包路径 |

3.2.4 工作流程

  1. 用户提交应用 :通过 spark-submit 或 spark-shell 从客户端机器提交作业,默认或指定 --deploy-mode client。

  2. 启动 Driver:Spark Driver 直接在客户端 JVM 中启动。

  3. Driver 向 YARN 申请 AM:Driver 直接与 ResourceManager 通信,请求启动一个 ApplicationMaster。

  4. ResourceManager 启动 AM :RM 找到一个 NM 节点并启动一个轻量级的 ApplicationMaster 容器。这个 AM 的主要职责是向 RM 申请 Executor 资源,它不包含 Spark Driver。

  5. 启动 Executors :ResourceManager 指示 NodeManagers 启动 Executor 容器。这些 Executors 启动后会与运行在客户端的 Driver 通信。

  6. 执行应用:Driver(在客户端)调度任务到各个 Executor 上执行。

  7. 应用结束:所有任务执行完毕后,Executor 容器被释放,AM 容器也被关闭。但客户端的 Driver 进程会退出。

四、K8s & Mesos 模式

使用 K8s 或者 Mesos 作为资源调度框架。

相关推荐
freejackman2 小时前
【工程化】从“单兵作战”到“多引擎架构”:基于门面模式的重构实战
大数据·数据库·hive·sql·测试工具·设计模式·架构
字节跳动数据平台4 小时前
火山引擎知识引擎VeKnow进化之路(上):从“人有数可用”到“AI有智可循”
大数据
Flynn Liang6 小时前
Apache Superset 重要特性详解(三):语义层 / 权限 / 缓存 / 嵌入的实战最佳实践(2026 版)
大数据·clickhouse·数据可视化·架构设计·superset·数据分析平台
小田学Python17 小时前
工具调用:让 Agent 从“说”到“做”
大数据·大模型·agent·ai工具·deepseek
GrowingIO技术社区21 小时前
用户行为分析怎么做?从业务目标到改进验证的完整流程
大数据·数据挖掘·数据分析
瑞克-桑切斯1 天前
docker Harbor 单机部署手册
大数据·运维·elasticsearch·docker·容器
方方洛1 天前
ray教程-28-附录G-CICD与Slurm与云上调度
人工智能·分布式·机器学习
演艺大赏1 天前
NiFi 起不来、登不上、节点被挤掉:一份按日志定位的排错清单
大数据
freejackman1 天前
【实战三】撕开脱敏盲区:深度解析 CASE WHEN 与窗口函数血缘
大数据·数据库·sql