Spark源码解析(三):Executor启动流程

Executor启动流程流程图

源码分析

Executor进程的启动

这里我们需要追踪的方法是Master类中的schedule()方法内部的607行,这个方法的主要作用是向Worker发送消息,然后启动Executor进程。

以上代码的所做的工作是记录和Master通信的Worker使用的资源,并且发送消息给Worker,最后Master向ClientActor发送的消息,告知Executor已经启动了。

接着,我们将会看Worker的LaunchExecutor样例类模式匹配,这个方法的作用是启动Executor进程,代码大约在Worker的335行

在这个模式匹配中,主要的做的是为Executor创建目录,创建一个ExecutorRunner对象,里面包含应用的描述信息等通过这个对象启动Executor,

然后使用脚本命令启动CoarseGrainedExecutorBackend。这里我们将会查看这个CoarseGrainedExecutorBackend类的源码。

main()方法是启动Executor子进程的入口,然后调用run()方法,这里我们将会追踪这个方法:

CoarseGrainedExecutorBackend的生命周期方法

调用CoarseGrainedExecutorBackend的生命周期方法,在preStart()方法主要代码如下:

这个方法主要是和Driver进行通信,向Driver发送信息,注册Executor我们这里需要看的是DriverActor的代码

这里进行一个判断后,向Executor发送注册成功后,然后调用makeOffers()查看是否有任务需要提交。这里我们首先看DriverActor向Executor 向Executor发送消息,表示注册成功,然后再次查看makeOffers()方法。 针对于RegisteredExecutor的,代码如下:

这里主要是创建Executor对象用来执行业务逻辑,接下来我们看一下Executor的构造函数内部做了什么?

在Executor构造函数中,主要的工作是创建一个可变的线程池(实现是Java的Executors创建),然后调用startDriverHeartbeater()和Dirver进行通信,发送心跳信息,这是一个报活的操作。 接下来是makeOffers()方法,主要运行CoarseGrainedSchedulerBackend的launchTasks()方法。

这个方法主要是查看是否有任务需要提交(DriverActor->Executor)

百度脑图关于Executor启动

总结

创建Executor进程的总结:

1.Worker创建Executor进程,该进程的实现类其实是CoarseGrainedExecutorBackend

2.CoarseGrainedExecutorBackend向DriverActor注册成功后创建Executor对象,内部有一个可变的线程池

3.执行makeOffers()方法,查看是否有任务需要提交


你可能感兴趣的:(Spark源码解析(三):Executor启动流程)