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

 

posted @ 2021-06-08 22:20  肥仔佳文猪  阅读(134)  评论(0编辑  收藏  举报