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