spark节点通信模型_ing
先定义4个节点:master worker executor driver, 通信链路如下图所示
worker与master创建了通信的路径1,
driver分别创建了与master和executor通信的endpoint,此为路径2和3
一、路径1的具体执行类为 两个实现了RpcEndpoint接口的Master 和 Worker (具体是IsolatedRpcEndpoint)
二、路径2的dirver端:接口 CoarseGrainedSchedulerBackend 负责与master通信,如果是standalone模式,CoarseGrainedSchedulerBackend的具体实现是 StandaloneSchedulerBackend,
但是CoarseGrainedSchedulerBackend并不具备通信功能,它不是RpcEndpoint的实现类
所以StandaloneSchedulerBackend内部实现了一个StandaloneAppClient实例, StandaloneAppClient通过内部类ClientEndPoint 与master通信。ClientEndPoint 是RpcEndpoint的实现类所以能用来通信
由此可见CoarseGrainedSchedulerBackend的功能并不单单用来通信,还有其他作用。
三、路径3的实现为DriverEndPoint 和 CoarseGrainedExecutorBackend,都是RpcEndpoint的实现类。
以应用提交为例,看每个路径具体发了什么消息
路径0:这个路径不在上面的描述中,这是客户端提交应用给master的路径,因为提交成功后就退出了,退出后这个路径也就不存在了,是一次性的。
客户端会启动一个jvm并构造一个ClientEndPoint(RpcEndPoint的实现类),
ClientEndPoint向master发送消息 ①RequestSubmitDriver ③RequestDriverStatus ----数字代表发送的先后顺序
master会向这个clientEndpoint 发送消息 ②SubmitDriverResponse
然后ClientEndPoint 就退出了
路径一:Master与Worker的交互
Master向Worker发送的消息:
- LaunchDriver
- LaunchExecutor
- DriverStateChanged
Worker收到以上消息后会创建DriverRunner和ExecutorRunner
Worker向Master发送的消息:
- ExecutorStateChanged
路径二:Master与Driver交互
ClientEndPoint(CoarseGrainedSchedulerBackend) 向Master发送消息:
- RegisterApplication
Master向ClientEndPoint(CoarseGrainedSchedulerBackend) 发送消息:
- RegisteredApplication
- ExecutorAdded
- ExecutorUpdated
路径三:Driver与Executor交互
DriverEndPoint(由CoarseGrainedSchedulerBackend创建) 向CoarseGrainedExecutorBackend 发送消息
- LaunchTask
CoarseGrainedExecutorBackend向DriverEndPoint发送消息
- StatusUpdate