SparkContext介紹
spark任務的提交流程
- 用戶創建一個 Spark Context;
- Spark Context 去找 Cluster Manager 申請資源同時說明需要多少 CPU 和內存等資源;
- Cluster Manager 根據用戶提交時設置的參數(CPU、內存),去找 WorkerNode 并啟動 Executor,并介紹 Executor 給Driver;
- Driver 會將用戶程序劃分為不同的 stage,每個 stage 會有一組完全相同的 task 來構成。這些 task 會作用于一些待處理的數據和不同的分區,在階段劃分和 task 創建完成后,Driver 會向 Executor 發送 task;
- Executor 在接收到 task 后會下載 task 運行時的依賴,準備好 task 的運行環境,然后開始執行 task 并實時將 task 的運行環境傳輸給 Driver;
- Driver 根據收到的 task 的運行情況來進行狀態更新,不斷的調用 task 來交給 Executor 執行,直到 task 全部執行正確。若超過最大重試次數還沒有執行成功,就會停止 task。
1. 資源申請與初始化
- 用戶創建SparkContext(SC),SC向集群管理器(如YARN或Standalone Master)申請資源,指定CPU和內存需求
- 集群管理器根據參數分配資源:
- Standalone模式:Master直接管理Worker節點,創建Executor并注冊到SC
- YARN模式:RM創建ApplicationMaster(AM),AM通過NodeManager(NM)申請容器資源啟動Executor
2. 任務劃分與調度
- Driver(即SC所在進程)將用戶程序解析為DAG圖,根據寬依賴(ShuffleDependency)劃分Stage:
- 寬依賴觸發Shuffle操作,形成ShuffleMapStage
- 窄依賴合并為ResultStage
- 每個Stage被拆分為多個Task,每個Task對應一個數據分區的處理邏輯
3. 任務執行
- Executor接收Task后:
- 下載任務依賴的代碼和數據
- 創建線程池并行執行Task
- 實時向Driver匯報執行進度和狀態
- 任務失敗時自動重試,超過最大重試次數則作業失敗
4. 資源釋放與結果處理
- 所有Task執行完成后:
- Driver生成最終結果(如寫入存儲系統)
- SC向集群管理器釋放資源
- 在YARN模式中,AM會主動注銷應用