1. 什么是 Spark on YARN?
Spark on YARN 是 Apache Spark 的一种部署模式,允许 Spark 应用程序在 Hadoop YARN 集群上运行,充分利用 YARN 的资源管理和调度能力。这种模式将 Spark 与 Hadoop 生态深度集成,使企业能够在同一集群上统一管理批处理、流处理、交互式查询等多种工作负载。
2. 核心优势
-
资源统一管理
- 与 Hadoop 共享集群资源,避免资源孤岛(如 MapReduce、Hive、Spark 可共存)。
- YARN 根据工作负载动态分配资源,提高集群利用率。
-
简化运维
- 依托 YARN 的高可用性(HA)和资源隔离机制,降低运维复杂度。
- 支持与现有 Hadoop 集群无缝集成,无需额外部署集群管理器。
-
灵活的资源分配
- 支持 内存 / CPU 细粒度控制 ,通过
spark-submit
参数调整资源分配。 - 可配置多队列(如生产队列、测试队列),实现资源隔离。
- 支持 内存 / CPU 细粒度控制 ,通过
-
丰富的调度策略
- 继承 YARN 的调度器(容量调度器、公平调度器),满足不同业务需求。
3. 架构组件
Spark on YARN 的架构涉及三个核心组件:
-
YARN 组件
- ResourceManager (RM):全局资源管理器,负责分配集群资源。
- NodeManager (NM):每个节点的代理,管理容器(Container)生命周期。
- 调度器:如容量调度器(Capacity Scheduler)或公平调度器(Fair Scheduler)。
-
Spark 组件
- Driver:应用程序的主进程,负责调度任务。
- Executor:运行在容器中的工作进程,执行具体计算任务。
-
通信流程
- Spark 应用通过
spark-submit
向 YARN RM 提交请求。 - RM 分配 Container 并启动 ApplicationMaster(Spark Driver)。
- Driver 向 RM 注册并请求资源,然后与 NM 通信启动 Executor。
- Spark 应用通过
4. 部署模式
Spark on YARN 支持两种部署模式:
-
Client 模式
-
Driver 运行在客户端 :
- 适用于交互式应用(如 Spark Shell、Jupyter Notebook)。
- Driver 在提交作业的客户端进程中运行,直接接收任务输出。
-
提交命令 :
bash
spark-submit \ --master yarn \ --deploy-mode client \ --num-executors 10 \ --executor-memory 4g \ my-app.jar
-
-
Cluster 模式
-
Driver 运行在集群中 :
- 适用于生产环境,避免客户端与集群长时间连接。
- Driver 作为 YARN 中的一个 ApplicationMaster 运行,与客户端分离。
-
提交命令 :
bash
spark-submit \ --master yarn \ --deploy-mode cluster \ --num-executors 10 \ --executor-memory 4g \ my-app.jar
-
5. 资源配置参数
通过 spark-submit
或 spark-defaults.conf
配置:
参数 | 说明 |
---|---|
--num-executors |
启动的 Executor 数量(默认 2)。 |
--executor-memory |
每个 Executor 的内存大小(如 4g)。 |
--executor-cores |
每个 Executor 的 CPU 核心数(默认 1)。 |
--driver-memory |
Driver 的内存大小(默认 1g)。 |
--queue |
指定 YARN 队列名称(如 default 、prod )。 |
--conf spark.yarn.maxAppAttempts |
应用最大重试次数(默认 2)。 |
--conf spark.yarn.executor.memoryOverhead |
每个 Executor 的堆外内存(默认 executorMemory * 0.10)。 |
6. 典型应用场景
-
混合工作负载集群
- 在同一 Hadoop 集群上同时运行 Spark、MapReduce、Hive 等作业。
-
企业级数据平台
- 利用 YARN 的资源隔离特性,为不同部门分配专用队列(如财务、研发)。
-
大规模数据处理
- 处理 PB 级数据,通过 YARN 动态调整资源应对峰值负载。
7. 监控与故障排查
-
YARN Web UI
http://resourcemanager:8088
:查看所有应用状态、资源使用情况。
-
Spark Web UI
-
Driver 运行时的 Web UI(默认端口 4040): plaintext
http://driver-node:4040 # Client 模式 http://application-master-node:4040 # Cluster 模式
-
-
日志查看
-
YARN 应用日志: bash
yarn logs -applicationId <application_id>
-
8. 优缺点
优点 | 缺点 |
---|---|
与 Hadoop 生态无缝集成 | 依赖 YARN,增加部署复杂度 |
资源利用率高 | 任务启动延迟较高(需等待 Container 分配) |
支持高可用性 | 需深入理解 YARN 配置和调优 |
多租户资源隔离 | 对网络和磁盘 I/O 敏感 |
9. 配置步骤
-
确保 YARN 正常运行
-
启动 HDFS 和 YARN: bash
start-dfs.sh start-yarn.sh
-
-
配置 Spark
-
编辑
$SPARK_HOME/conf/spark-env.sh
:bash
export HADOOP_CONF_DIR=/path/to/hadoop/etc/hadoop # Hadoop 配置目录
-
-
提交作业
bash
spark-submit \ --master yarn \ --deploy-mode cluster \ --class org.apache.spark.examples.SparkPi \ $SPARK_HOME/examples/jars/spark-examples_*.jar \ 100