Spark 任务调度之 Executor的创建

2018-05-13  本文已影响0人  博弈史密斯

CoarseGrainedExecutorBackend

启动 CoarseGrainedExecutorBackend

我们知道Executor负责计算任务,即执行task,而Executor对象的创建及维护是由CoarseGrainedExecutorBackend负责的,CoarseGrainedExecutorBackend在spark运行期是一个单独的进程,在Worker节点可以通过Java的jps命令查看,如下

如何启动上图中的CoarseGrainedExecutorBackend进程是我们后面介绍的重点,先看下其定义及UML


从上图可以得到如下信息

  1. CoarseGrainedExecutorBackend是RpcEndpoint的子类,能够和Driver进行RPC通信,其生命周期方法onStart一定要关注,看执行了哪些动作。
  2. CoarseGrainedExecutorBackend维护了两个属性executor和driver,executor负责运行task,driver负责和Driver通信。
  3. ExecutorBackend有抽象方法statusUpdate,负责将Executor的计算结果返回给Driver。

最后,CoarseGrainedExecutorBackend是spark运行期的一个进程,Executor运行在该进程内。

启动CoarseGrainedExecutorBackend

启动流程,大致如下


注册Executor到Driver

注册这步会调用CoarseGrainedExecutorBackend的onStart方法

onStart方法中给Driver发送RegisterExecutor消息,查看Driver对该消息的处理(Driver中和Executor通信的是SchedulerBackend 的子类实现:CoarseGrainedSchedulerBackend)

Driver中先修改Executor信息有关的集合和变量,即注册Executor到Driver,Driver使用executorDataMap集合保存Executor信息。然后返回消息RegisteredExecutor给CoarseGrainedExecutorBackend。

创建Executor

查看CoarseGrainedExecutorBackend中对RegisteredExecutor消息的处理


如上,CoarseGrainedExecutorBackend创建了Executor对象,创建完毕的Executord对象此后用于执行Driver发送的task。

看下 CoarseGrainedExecutorBackend中创建Executor的流程图:


Executor

Executor运行在Worker节点,主要负责执行task和cache数据。
源码及UML如下


介绍TaskRunner和Executor的主要结构

  1. TaskRunner: 运行期Executor收到Driver发送的task信息,将其封装为TaskRunner,如下图,同时,TaskRunner继承Runnable,Executor使用线程池threadpool调度TaskRunner。

    image
  2. Executor: 有两个重要属性,runningTasks和threadPool,分别用于维护正在运行的TaskRunner和调度TaskRunner线程。将收到的task信息封装为TaskRunner及执行TaskRunner发生在Executor的launchTask方法中。

上一篇 下一篇

猜你喜欢

热点阅读