天天看點

Spark源碼分析 – SchedulerBackend

schedulerbackend, 兩個任務, 申請資源和task執行和管理

對于sparkdeployschedulerbackend, 基于actor模式, 主要就是啟動和管理兩個actor 

driver actor, 負責task的執行 

由于spark是原先基于mesos的, 然後為了相容性才提供standalone模式, 是以你可以看到driver actor中的接口都是mesos風格的, 在mesos的情況下應該是動态的申請資源, 然後執行task (猜測, 還沒有看源碼) 

但對于coarse-grained mesos mode和spark's standalone deploy mode, 這步被簡化成當taskscheduler初始化的時候, 直接就将資源配置設定好了, 然後driver actor隻是負責排程task在這些executor上執行 

是以在makeoffers的注釋上, 寫的是make fake resource offers, 因為這裡其實沒有真正的offer resources 

關于driver actor如何調用task去執行, 關鍵在scheduler.resourceoffers

用于coarse-grained mesos mode和spark's standalone deploy mode 

可用看到主要目的, 就是建立并維護driveractor 

主要的邏輯都在driveractor 中

driveractor

關鍵的函數, makeoffers, 在executors上launch tasks, 什麼時候調用? 

registerexecutor的時候, 

task statusupdate的時候, 

收到reviveoffers event的時候, 新的task被submit的時候, delay scheduling被觸發的時候(per second) 

關于delay scheduling, 應該是為了保持活度, 當沒有任何狀态變化時, 仍然需要繼續保持launch tasks

關鍵就是建立和管理driver and client actor

繼續閱讀