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
- Driver 運行在客戶端:
-
Cluster 模式
- Driver 運行在集群中:
- 適用于生產環境,避免客戶端與集群長時間連接。
- Driver 作為 YARN 中的一個 ApplicationMaster 運行,與客戶端分離。
- 提交命令:
bash
spark-submit \--master yarn \--deploy-mode cluster \--num-executors 10 \--executor-memory 4g \my-app.jar
- Driver 運行在集群中:
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 模式
- Driver 運行時的 Web UI(默認端口 4040):
-
日志查看
- YARN 應用日志:
bash
yarn logs -applicationId <application_id>
- YARN 應用日志:
8. 優缺點
優點 | 缺點 |
---|---|
與 Hadoop 生態無縫集成 | 依賴 YARN,增加部署復雜度 |
資源利用率高 | 任務啟動延遲較高(需等待 Container 分配) |
支持高可用性 | 需深入理解 YARN 配置和調優 |
多租戶資源隔離 | 對網絡和磁盤 I/O 敏感 |
9. 配置步驟
-
確保 YARN 正常運行
- 啟動 HDFS 和 YARN:
bash
start-dfs.sh start-yarn.sh
- 啟動 HDFS 和 YARN:
-
配置 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