Spark支持多種集群部署模式,主要分為以下三類:
部署模式 | 特點 | 適用場景 | 資源管理 | 依賴 |
---|---|---|---|---|
Local模式 | 單機運行,所有進程(Driver、Executor)在同一個JVM中 | 開發調試、小規模數據測試 | 無集群資源管理,僅本地線程模擬 | 無需外部集群,僅需Spark安裝包 |
Standalone模式 | Spark自帶的輕量級集群管理器,支持分布式資源調度 | 中小規模集群,需獨立管理資源 | Standalone Master/Worker節點管理資源 | 依賴Spark自帶的集群管理組件 |
集群管理模式 | 集成外部集群管理器(如YARN、Mesos、Kubernetes) | 企業級生產環境,與現有集群系統整合 | 由外部集群管理器(如YARN)分配資源 | 需部署外部集群(如Hadoop YARN、K8s) |
核心區別
-
資源管理方式
-
Local:無資源管理,僅本地線程。
-
Standalone:Spark自帶的Master/Worker資源調度。
-
集群模式:依賴外部集群管理器(如YARN的ResourceManager)。
-
-
擴展性
-
Local:僅單機,無法擴展。
-
Standalone:支持多節點,但資源調度能力較弱。
-
集群模式:高擴展性,適合大規模集群(如YARN支持千級節點)。
-
-
生產適用性
-
Local:僅限開發測試。
-
Standalone:適合中小規模生產環境。
-
集群模式:企業級生產首選(如與Hadoop生態集成)。
-
Spark集群模式運行時架構
在集群模式下(以YARN為例),Spark的運行時架構包含以下核心組件:
1. 核心角色
-
Driver
-
運行用戶編寫的
main()
函數,負責:-
解析代碼生成DAG(有向無環圖)。
-
將DAG拆分為Task,分發給Executor。
-
監控任務執行狀態。
-
-
兩種部署模式:
-
Client模式:Driver運行在提交任務的客戶端機器上。
-
Cluster模式:Driver運行在集群的某個節點(由YARN管理)。
-
-
-
Executor
-
在Worker節點上啟動的JVM進程,負責:
-
執行Driver分配的Task(如Map、Reduce操作)。
-
緩存數據(通過內存或磁盤)。
-
-
每個Executor可并行運行多個Task(由
spark.executor.cores
配置)。
-
-
Cluster Manager
-
外部集群管理器(如YARN ResourceManager、K8s Master):
-
分配集群資源(CPU、內存)。
-
啟動Driver和Executor。
-
-
2. 運行時流程(以YARN Cluster模式為例)
-
提交任務
-
用戶通過
spark-submit
提交任務到YARN ResourceManager。 -
ResourceManager分配Container啟動ApplicationMaster(Driver)。
-
-
資源申請
-
Driver向ResourceManager申請Executor資源。
-
ResourceManager通知NodeManager啟動Executor容器。
-
-
任務執行
-
Driver將Task分發到Executor。
-
Executor執行Task,返回結果給Driver。
-
-
結果回收
-
Driver匯總結果,任務完成后釋放資源。
-
3. 架構示意圖
+-------------------+ +---------------------+
| Client Machine | | YARN Cluster |
| (spark-submit) | | |
+-------------------+ +----------+----------+| || 1. Submit Job | 2. Launch AppMaster (Driver)+-------------------------->+|| 3. Request Resources+-------> ResourceManager|| 4. Start Executors+-------> NodeManagers|
+------------------+ |
| Executor | <-----------------+
| (Task Execution) | 5. Run Tasks
+------------------+
不同集群管理器的對比
集群管理器 | 特點 | 適用場景 |
---|---|---|
YARN | 與Hadoop生態深度集成,資源隔離性好 | 已部署Hadoop的環境 |
Kubernetes | 原生容器化支持,彈性伸縮能力強 | 云原生環境(如AWS EKS、GKE) |
Mesos | 通用資源調度框架,支持混合負載(如同時運行Spark和Docker) | 多框架混合集群 |
總結
-
部署模式選擇:
-
開發測試用Local,輕量級集群用Standalone,生產環境優先選YARN/K8s。
-
-
架構核心:
-
Driver負責任務調度,Executor執行計算,Cluster Manager管理資源。
-
-
性能優化點:
-
Executor配置:調整CPU核數、內存大小(避免OOM)。
-
數據本地性:利用Spark的
locality
策略減少網絡傳輸。
-