一、PySpark Standalone 集群概述
PySpark Standalone 集群是 Apache Spark 的一種部署模式,它不依賴于其他資源管理系統(如 YARN 或 Mesos),而是使用 Spark 自身的集群管理器。這種模式適合快速部署和測試,尤其在開發和學習環境中較為常見。
二、集群組件
Master 節點:
- 負責資源調度和任務分配
- 管理 Worker 節點的注冊和狀態
- 協調應用程序的執行
Worker 節點:
- 負責執行具體的計算任務
- 管理本地資源(CPU、內存)
- 與 Master 節點通信,匯報狀態
Driver 程序:
- 運行用戶編寫的 Spark 應用程序
- 負責將應用轉換為任務(Task)
- 與 Master 和 Worker 節點協作完成計算
三、工作流程
啟動集群:
- 首先啟動 Master 節點
- 然后啟動多個 Worker 節點,它們會自動連接到 Master
提交應用:
- 用戶通過 spark-submit 命令提交 PySpark 應用
- Driver 程序在本地或集群中啟動
資源分配:
- Master 為應用分配資源(Worker 上的 Executor)
- Executor 是運行在 Worker 節點上的進程,負責執行任務
任務執行:
- Driver 將任務分發給 Executor
- Executor 執行任務并返回結果
四、部署步驟
1. 環境準備
確保所有節點安裝了 Java 和 Python,并配置好環境變量。
2. 下載并解壓 Spark
從 Apache 官網下載 Spark,解壓到所有節點的相同目錄:
wget https://downloads.apache.org/spark/spark-3.4.1/spark-3.4.1-bin-hadoop3.tgz
tar -zxvf spark-3.4.1-bin-hadoop3.tgz
3. 配置環境變量
在所有節點的.bashrc 或.bash_profile 中添加:
export SPARK_HOME=/path/to/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
4. 配置 Spark
在 Spark 目錄下創建并編輯配置文件:
cd $SPARK_HOME/conf
cp spark-env.sh.template spark-env.sh
cp slaves.template slaves
編輯 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
編輯 slaves:
worker1-ip
worker2-ip
worker3-ip
5. 啟動集群
在 Master 節點上執行:
start-all.sh
這將啟動 Master 和所有 Worker 節點。
6. 查看集群狀態
訪問 Master 的 Web UI:http://master-node-ip:8080
7. 提交 PySpark 應用
spark-submit --master spark://master-node-ip:7077 your_script.py
五、配置參數說明
資源相關:
SPARK_WORKER_MEMORY
:每個 Worker 可用的內存SPARK_WORKER_CORES
:每個 Worker 可用的 CPU 核心數spark.executor.memory
:每個 Executor 的內存大小spark.executor.cores
:每個 Executor 的 CPU 核心數
網絡相關:
SPARK_MASTER_HOST
:Master 節點的 IP 或主機名SPARK_MASTER_PORT
:Master 監聽的端口SPARK_WORKER_PORT
:Worker 監聽的端口
日志相關:
SPARK_LOG_DIR
:日志存儲目錄SPARK_WORKER_DIR
:Worker 工作目錄
六、常見問題及解決方法
Worker 無法連接到 Master:
- 檢查網絡連通性
- 確認 Master 的 IP 和端口配置正確
- 檢查防火墻設置,確保端口開放
任務執行緩慢:
- 增加 Worker 節點或調整資源分配
- 優化 Spark 應用的并行度設置
- 檢查數據傾斜問題
內存溢出錯誤:
- 增加
spark.executor.memory
參數 - 優化數據處理邏輯,減少內存占用
- 使用序列化方式存儲數據
- 增加
七、監控與管理
Web UI:
- Master UI:http://master-node-ip:8080
- 應用 UI:http://driver-node-ip:4040
命令行工具:
spark-status.sh
:查看集群狀態stop-all.sh
:停止集群
日志查看:
- Master 日志:$SPARK_HOME/logs/spark--org.apache.spark.deploy.master.Master-.out
- Worker 日志:$SPARK_HOME/logs/spark--org.apache.spark.deploy.worker.Worker-.out
通過以上步驟,你可以成功部署和使用 PySpark Standalone 集群。這種模式適合小規模數據處理和測試環境,對于大規模生產環境,建議考慮 YARN 或 Kubernetes 等更強大的資源管理系統。