本節書摘來自華章社群《深入了解spark:核心思想與源碼分析》一書中的第3章,第3.7節建立和啟動dagscheduler,作者耿嘉安,更多章節内容可以通路雲栖社群“華章社群”公衆号檢視
3.7 建立和啟動dagscheduler
dagscheduler主要用于在任務正式交給taskschedulerimpl送出之前做一些準備工作,包括:建立job,将dag中的rdd劃分到不同的stage,送出stage,等等。建立dag-scheduler的代碼如下。
dagscheduler的資料結構主要維護jobid和stageid的關系、stage、activejob,以及緩存的rdd的partitions的位置資訊,見代碼清單3-32。
代碼清單3-32 dagscheduler維護的資料結構
這裡的dagscheduleractorsupervisor主要作為dagschedulereventprocessactor的監管者,負責生成dagschedulereventprocessactor。從代碼清單3-34可以看出,dagscheduler-actorsupervisor對于dagschedulereventprocessactor采用了akka的一對一監管政策。dag-scheduleractorsupervisor一旦生成dagschedulereventprocessactor,并注冊到actorsystem,actorsystem就會調用dagschedulereventprocessactor的prestart,taskscheduler于是就持有了dagscheduler,見代碼清單3-35。從代碼清單3-35我們還看到dag-schedulereventprocessactor所能處理的消息類型,比如jobsubmitted、beginevent、completionevent等。dagscheduler-eventprocessactor接受這些消息後會有不同的處理動作。在本章,讀者隻需要了解到這裡即可,後面章節用到時會詳細分析。
代碼清單3-34 dagscheduleractorsupervisor的監管政策