先定義4個節點:master worker executor driver, 通訊鏈路以下圖所示jvm
worker與master建立了通訊的路徑1,3d
driver分別建立了與master和executor通訊的endpoint,此爲路徑2和3blog
1、路徑1的具體執行類爲 兩個實現了RpcEndpoint接口的Master 和 Worker (具體是IsolatedRpcEndpoint)接口
2、路徑2的dirver端:接口 CoarseGrainedSchedulerBackend 負責與master通訊,若是是standalone模式,CoarseGrainedSchedulerBackend的具體實現是 StandaloneSchedulerBackend,it
可是CoarseGrainedSchedulerBackend並不具有通訊功能,它不是RpcEndpoint的實現類io
因此StandaloneSchedulerBackend內部實現了一個StandaloneAppClient實例, StandaloneAppClient經過內部類ClientEndPoint 與master通訊。ClientEndPoint 是RpcEndpoint的實現類因此能用來通訊ast
因而可知CoarseGrainedSchedulerBackend的功能並不僅僅用來通訊,還有其餘做用。cli
3、路徑3的實現爲DriverEndPoint 和 CoarseGrainedExecutorBackend,都是RpcEndpoint的實現類。date
以應用提交爲例,看每一個路徑具體發了什麼消息im
路徑0:這個路徑不在上面的描述中,這是客戶端提交應用給master的路徑,由於提交成功後就退出了,退出後這個路徑也就不存在了,是一次性的。
客戶端會啓動一個jvm並構造一個ClientEndPoint(RpcEndPoint的實現類),
ClientEndPoint向master發送消息 ①RequestSubmitDriver ③RequestDriverStatus ----數字表明發送的前後順序
master會向這個clientEndpoint 發送消息 ②SubmitDriverResponse
而後ClientEndPoint 就退出了
路徑一:Master與Worker的交互
Master向Worker發送的消息:
Worker收到以上消息後會建立DriverRunner和ExecutorRunner
Worker向Master發送的消息:
路徑二:Master與Driver交互
ClientEndPoint(CoarseGrainedSchedulerBackend) 向Master發送消息:
Master向ClientEndPoint(CoarseGrainedSchedulerBackend) 發送消息:
路徑三:Driver與Executor交互
DriverEndPoint(由CoarseGrainedSchedulerBackend建立) 向CoarseGrainedExecutorBackend 發送消息
CoarseGrainedExecutorBackend向DriverEndPoint發送消息