Spark調度模塊

以前咱們提到:Driver 的sc負責和Executor交互,完成任務的分配和調度,在底層,任務調度模塊主要包含兩大部分:apache

1)DAGScheduler緩存

2 ) TaskScheduler網絡

它們負責將用戶提交的計算任務按照DAG劃分爲不一樣的階段而且將不一樣階段的計算任務提交到集羣進行最終的計算。整個過程可使用下圖表示併發

1.RDD Objects能夠理解爲用戶實際代碼中建立的RDD,這些代碼邏輯上組成了一個DAG。框架

2.DAGScheduler主要負責分析依賴關係,而後將DAG劃分爲不一樣的Stage(階段),其中每一個Stage由能夠併發執行的一組Task構成,這些Task的執行邏輯徹底相同,只是做用於不一樣的數據。spa

在DAGScheduler將這組Task劃分完成後,會將這組Task提交到TaskScheduler。blog

3.TaskScheduler經過Cluster Manager 申請計算資源,好比在集羣中的某個Worker Node上啓動專屬的Executor,並分配CPU、內存等資源進程

4.接下來,就是在Executor中運行Task任務,若是緩存中沒有計算結果,那麼就須要開始計算,同時,計算的結果會回傳到Driver或者保存在本地。內存

Scheduler的實現概述資源

任務調度模塊涉及的最重要的三個類是:

1)org.apache.spark.scheduler.DAGScheduler  前面提到的DAGScheduler的實現。

將一個DAG劃分爲一個一個的Stage階段(每一個Stage是一組Task的集合)

而後把Task Set 交給TaskScheduler模塊。

2)org.apache.spark.scheduler.TaskScheduler

它的做用是爲建立它的SparkContext調度任務,即從DAGScheduler接收不一樣Stage的任務。向Cluster Manager 申請資源。而後Cluster Manager收到資源請求以後,在Worker爲其啓動進程

3)org.apache.spark.scheduler.SchedulerBackend

是一個trait,做用是分配當前可用的資源,具體就是向當前等待分配計算資源的Task分配計算資源(即Executor),而且在分配的Executor上啓動Task,完成計算的調度過程。

4)AKKA是一個網絡通訊框架,相似於Netty,此框架在Spark1.8以後已所有替換成Netty

任務調度流程圖

相關文章
相關標籤/搜索