前言
我們在之前的博客中講過,TaskScheduler負責每個具體任務的實際物理調度,DAGScheduler負責將作業拆分成爲不停階段的具體有依賴關係的多批任務,可以理解爲DAGScheduler負責任務的邏輯調度。
本篇博客,結合這段時間看過的一些書籍,南國在這裏重點回顧一下Spark中作業調度的相關知識。
作業調度的頂層邏輯概述
作業調度的具體工作流程
作業調度的基本流程如下圖所示:
調度階段的拆分
構建一個新的Stage,這個新的Stage的輸出結果的分區方式,則由ShuffleDependency中的Partition對象就決定。
調度階段的提交
此外,每完成一次DAGSchduler的事件循環,也會觸發一次從等待和失敗列表中掃描並提交Stage的調用過程。
任務集的提交
完成狀態的監控
簡單來說,這是通過對外(主要是對TaskSchduler)暴露一系列的回調函數來實現的。對於TaskScheduler來說,這些回調函數主要包括任務的開始結束失敗、任務集的失敗,DAGSchduler根據這些任務的生命週期進一步維護作業和調度階段的狀態信息。
任務結果的獲取
調度池和調度模式分析