[Spark Core] Spark Client Job 提交三級調度框架
0. 說明
官方文檔 Job Scheduling
Spark 調度核心組件:
- DagScheduler
- TaskScheduler
- BackendScheduler
1. DagScheduler
direct acycle graph , 有向無環圖調度器
高級調度器,面向的是 stage ,為每個 job 計算 stage 的 DAG 圖,跟蹤 RDD 和 stage 的輸出,找出最小的調度策略來執行 job。
該調度器提交 stage 給下層的 Task 調度器,以 taskSet 的形式進行提交。
Spark stage 通過將 RDD 進行切割,按照 shuffle 的邊界進行切割。具有窄依賴 RDD 的操作串聯到每個 stage 的一個 taskset 中。
shuffle 依賴的操作劃分成兩個 stage,上一個 stage 的輸出供下一個 stage 進行讀取。
DAG 調度器決定運行每個 task 的首選位置。
DAG 調度器處理因 stage 輸出文件丟失導致的故障,該種情況下,之前的 stage 需要被重新提交。
其他原因的故障由 task 調度器來處理。
- Job
ActiveJob,用戶調用 action 方法時,job 通過 submitJob 方法進行提交。每個 job 需要多個階段.
- Stages
ShuffleMapStage
ResultStage
- Tasks
Spark 執行單位,需要將每個 task 發送給主機來執行。
- Cache tracking:
Dag 調度器能夠找出哪些 RDD 被緩存了,避免 rdd 的重復計算。
- Preferred locations
Dag 調度器計算運行 task 的首選位置。
- Cleanup:
當依賴他們的運行時的 Job 完成之後清除所有數據結構,防止內存泄露。
[Spark Core] Spark Client Job 提交三級調度框架