Apache Spark 的 Standalone 模式是其自帶的集群管理模式,無需依賴外部資源管理器(如 YARN 或 Mesos),可快速部署和運行 Spark 集群。以下是對 Standalone 模式的詳細介紹:
1. 核心組件
Master 節點
- 集群的主控制器,負責資源分配和任務調度。
- 管理 Worker 節點的注冊和狀態監控。
- 接收客戶端提交的應用程序,并為其分配資源。
Worker 節點
- 工作節點,負責執行具體的計算任務。
- 向 Master 注冊并匯報可用資源(內存、CPU)。
- 為應用程序啟動 Executor 進程。
Executor
- 每個應用程序專屬的進程,負責執行具體的任務(Task)。
- 持有應用程序的內存數據(如 RDD 緩存)。
Driver
- 運行用戶編寫的 Spark 應用程序的主程序。
- 負責將應用程序轉換為 DAG(有向無環圖),并提交給 Master 進行調度。
2. 工作流程
-
集群啟動
啟動 Master 節點和多個 Worker 節點,Worker 自動向 Master 注冊。 -
應用提交
用戶通過spark-submit
命令提交應用,Driver 程序在客戶端或集群中啟動。 -
資源分配
Driver 向 Master 請求資源(CPU 和內存),Master 通知 Worker 節點啟動 Executor。 -
任務執行
Driver 將任務分發給 Executor 執行,Executor 將結果返回給 Driver。 -
資源釋放
應用程序完成后,Executor 和資源被釋放。
3. 部署模式
Client 模式
- Driver 在客戶端運行:適用于交互式作業(如 Spark Shell)。
- 優點:便于調試,直接在本地看到輸出。
- 缺點:客戶端與集群需保持網絡連接,否則作業會中斷。
Cluster 模式
- Driver 在集群中的某個 Worker 節點運行:適用于生產環境。
- 優點:作業提交后可斷開客戶端連接,提高可靠性。
- 缺點:調試不便,日志需通過 Web UI 查看。
4. 快速部署
步驟 1:下載并解壓 Spark
wget https://downloads.apache.org/spark/spark-3.3.2/spark-3.3.2-bin-hadoop3.tgz
tar -zxvf spark-3.3.2-bin-hadoop3.tgz
cd spark-3.3.2-bin-hadoop3
步驟 2:配置環境變量
編輯conf/spark-env.sh
(如果不存在,復制模板cp conf/spark-env.sh.template conf/spark-env.sh
):
export JAVA_HOME=/path/to/java
export SPARK_MASTER_HOST=master-node-ip
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_MEMORY=2g # 每個Worker可用內存
export SPARK_WORKER_CORES=2 # 每個Worker可用CPU核心數
步驟 3:配置 Worker 節點
編輯conf/slaves
(如果不存在,復制模板cp conf/slaves.template conf/slaves
),添加 Worker 節點 IP:
worker1-ip
worker2-ip
...
步驟 4:啟動集群
# 在Master節點上執行
sbin/start-all.sh# 等價于分別啟動Master和Worker
sbin/start-master.sh
sbin/start-slaves.sh
步驟 5:查看 Web UI
訪問http://master-node-ip:8080
查看集群狀態。
5. 提交應用程序
Client 模式示例
./bin/spark-submit \--class org.apache.spark.examples.SparkPi \--master spark://master-node-ip:7077 \--executor-memory 1g \--total-executor-cores 2 \examples/jars/spark-examples_2.12-3.3.2.jar \100
7. 優缺點
優點
- 輕量級:無需額外依賴,部署簡單。
- 快速啟動:相比 YARN,資源分配更直接。
- 內置支持:Spark 原生支持,無需額外配置。
缺點
- 功能有限:相比 YARN,缺乏多租戶支持和細粒度資源隔離。
- 調度簡單:僅支持 FIFO 和公平調度,不支持更復雜的資源模型。
- 生產環境建議:大型集群建議使用 YARN 或 Kubernetes。
總結
Standalone 模式適合快速搭建測試環境或小規模生產集群,提供了 Spark 最基本的集群管理能力。核心是理解 Master、Worker、Executor 和 Driver 的角色分工,以及 Client/Cluster 兩種部署模式的區別。對于大規模生產環境,建議考慮更成熟的資源管理器(如 YARN)。