Spark Task 級調度

Spark ----driver executor運行圖:

圖 1-1 driver-----executor 運行圖

-----TaskSetManager結構圖:

圖 1-2 TaskSetManager 結構

 

Spark Task的調度是由TaskScheudler來完成的,DAGScheduler將stage打包到taskSet並交給TaskScheduler,TaskScheduler會將TaskSet分裝爲TaskManager,加入到調度隊列中。

TaskSetManager負責監控同一個stage中的tasks,TaskScheduler是以TaskManager爲單元進行調度的。

TaskScheduler初始化之後,SchedulerBackend啓動,SchedulerBackend會定時詢問TaskScheduler有沒有需要執行的task任務,TaskScheduler在SchedulerBackend詢問它的時候會從調度隊列中按照指定的調度策略選擇TaskSetManager去調度運行。

 

 

----大致的方法調用流程如下圖:

 

DAGScheduler劃分stage之後將stages分發到TaskScheduler中,此時啓動taskScheduler.submitTasks方法。

TaskScheduler中執行流程:

taskScheduler.submitTasks方法被調用提交taskSet,

根據taskSet的數量創建相應的TaskSetManager,

調用schedulableBuilder對象將創建的TaskManager放到TaskSetPool中。

然後就是調用schedulerBackend對象的reviveOffers方法,

此方法內部再調用makeOfficers方法,schedulerBackend查看可用的executor數量,

此時taskScheduler開始調用resourceOffers方法,記錄用來執行每個task相應的executor容器,

最後rootPool對象調用getSortedTaskSetQueue方法來找到TaskSetPool中對應的task放到對應的executor中開始執行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章