天天看點

Spark源碼分析 – Deploy

client在sparkdeployschedulerbackend被start的時候, 被建立, 代表一個application和spark cluster進行通信 

client的邏輯很簡單, 封裝clientactor, 并負責該actor的start和stop 

而clientactor的關鍵在于prestart的時候, 向master注冊該application, 并且在執行過程中接收master發來的event

client負責送出application給master, 而worker也會向master注冊 

是以master作為spark cluster的接口, 負責從client接收application請求, 并配置設定相應的worker資源給這個app  

處理的關鍵消息, registerworker, registerapplication或executorstatechanged, 最終都會調用schedule 

schedule是他的核心函數, 這裡首先隻會根據worker的cpu cores進行schedule, 而不會考慮其他的資源, 可用考慮讓app盡可能分布在更多或更少的workers上 

最後向worker actor發送launchexecutor, 真正啟動executorbackend

worker作為actor程序, 在啟動時首先建立工作目錄, 并向master注冊自己 

最主要是接收launchexecutor事件, 使用executorrunner來run executorbackend

executorrunner 

建立線程執行fetchandrunexecutor 

并且線上程中, 使用processbuilder啟動standaloneexecutorbackend子程序

為何不直接建立子程序?