Spark2.0.2源码分析——CoarseGrainedExecutorBackend的启动
上文Spark2.0.2源码分析——Executor 的启动:上篇文章介绍了,executor
的启动,文章最后调用 fetchAndRunExecutor
方法,创建 ProcessBuilder
,用于执行命令启动 CoarseGrainedExecutorBackend
,执行命令,调用 CoarseGrainedExecutorBackend
的 main
方法,启动 CoarseGrainedExecutorBackend
进程,该进程为 Executor
的守护进程,用于 executor
的创建和维护,今天这篇文章来看一下 CoarseGrainedExecutorBackend
的启动。
一.CoarseGrainedExecutorBackend
#main
:
while (!argv.isEmpty)
时进行模式匹配并拼装参数,然后将拼装好的参数交给 run
方法:
二.CoarseGrainedExecutorBackend
#run
:
askWithRetry
具有请求并响应的特点。
将之前抓取到的信息添加到 driverConf
中:
这里会触发 CoarseGrainedExecutorBackend
的 onStart
方法,因为任何 inbox
初始化时都会执行 onStart
,详细解释请看Spark2.0.2源码分析——RPC 通信机制(消息处理)
这个 WorkerWatcher
也是 RpcEndPoint
的子类
onStart
:CoarseGrainedSchedulerBackend
#receiveAndReply
:
三.CoarseGrainedExecutorBackend
#receive
:
回到 CoarseGrainedExecutorBackend
端,在接收到 RegisteredExecutor
消息后,创建 executor
对象,创建完毕的 Executord
对象,用于之后执行 Driver
分配 Task