在Executor的资源调度曾经提到了Worker上怎么调配Executor资源的过程,这里就讲Worker调配到Executor后是怎么运行这些Executor的。
流程
在调用Worker启动Executor之前,Master须要更新内存中Application的信息,包含启动一个Executor的各种信息(这里包含Worker的信息、CPU数量、内存大小等)、曾经调配了多少外围数。
被调配的Worker也要更新他所启动的Executor,曾经应用的CPU数量、曾经应用的内存大小。
Master筹备好内存数据变更后,就开始告诉Worker启动Executor,向Worker发送的音讯包含masterUrl、Application的ID、Executor的ID、Application的形容信息ApplicationDescription、Executor调配取得的内核数、Executor调配取得的内存大小等。
Master同时也给Application Driver发送音讯,告知Worker上的executor曾经启动,Application Driver收到音讯后,打印日志。
Worker收到Master发送过去的启动Executor的命令后,封装了Master传过来的信息,保留在内存中,并启动了一个Executor的过程,这个过程用来Driver与Executor通信。Executor过程启动后,更新曾经应用的内核数coresUsed和曾经应用的内存大小memoryUsed。
Executor的过程启动后,会向DriverEndpoint申请数据,包含Spark属性信息和密钥,Executor拿到这些数据后,就开始创立本人的RPC服务,用于通信。
Executor筹备好后,开始向DriverEndpoint发送注册申请。
DriverEndpoint收到申请后,把Executor的数据保留在内存中,而后再发消息给Executor,告知曾经解决好注册信息。Executor晓得本人注册胜利后,就创立了一个Executor对象。
源码思维导图
master-资源调度
Worker-解决信息
DriverEndpoint音讯解决
CoarseGrainedExecutorBackend
CoarseGrainedExecutorBackend音讯