先定义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发送消息