目錄
- 1. SparkContext
- 2.DAGScheduler
- 3. TaskScheduler
- 4. 協作關系
- 5 TaskSet的定義
- 6. 組件關系說明
Spark調度系統的核心組件主要有SparkContext、DAGScheduler和TaskScheduler
SparkContext介紹
1. SparkContext
1、資源申請:
- SparkContext是Spark應用程序與集群管理器(如Standalone模式下的Master、Yarn模式下的ResourceManager)通信的接口,負責向集群管理器注冊并申請資源。
- 例如在Standalone模式中,在Client中創建SparkContext(簡稱SC)后,SC向master注冊并申請資源,master通過心跳了解worker節點資源情況,挑選空閑worker創建Executor分配給SC ;
- 在Yarn - client模式下,先在client中創建SparkContext(SC),SC向ResourceManager申請創建ApplicationMaster,之后由ApplicationMaster向ResourceManager申請NodeManager來為SC創建Executor 。
2、任務劃分與調度:
- SparkContext包含DAGScheduler和TaskScheduler。它負責將用戶提交的任務進行分解,先分解成Stage,然后進一步分解出task,并發送到Executor中執行。
- 例如在任務運行階段,Executor向SC報到后,SC將任務分解,Executor創建線程池來運行任務,并及時向SC匯報執行情況 。
3、其他職責:
- SparkContext運行在Driver中,負責產生DAG,提交Job,轉化Task 。同時它也是Spark最重要的API,是用戶邏輯與Spark集群主要的交互接口 。
2.DAGScheduler
1、構建DAG與劃分Stage:
- 當用戶在RDD上執行Action操作時,Spark會根據相關依賴關系進行血緣(lineage)計算,構建有向無環圖(DAG)。
- DAGScheduler負責將DAG圖根據寬依賴(如ShuffleDependency)劃分成多個Stage。遇見一個寬依賴就劃分一個Stage,這個Stage的任務被稱為ShuffleMapTask;
- 如果遇見一個窄依賴,就可以將它加入到同一個Stage中。例如wordcount程序中,根據操作算子和RDD依賴關系進行Stage的劃分 。
2、Stage調度:按照Stage之間的依賴順序調度各個Stage。
- 例如在調度流程中,將DAG交給DAGScheduler后,它根據ShuffleDependency切分Stage,并按照依賴順序調度這些Stage 。
3、失敗恢復:當某個Stage執行失敗時,DAGScheduler通過血緣回溯重新調度失敗的Stage及其后續Stage 。例如通過重新提交相關的TaskSet來嘗試恢復執行 。
-
核心職責:
- 將RDD血緣關系轉換為Stage圖
- 處理Stage劃分策略: