美文网首页
Spark 任务调度之 Executor的创建

Spark 任务调度之 Executor的创建

作者: 博弈史密斯 | 来源:发表于2018-05-13 21:52 被阅读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方法中。

    相关文章

      网友评论

          本文标题:Spark 任务调度之 Executor的创建

          本文链接:https://www.haomeiwen.com/subject/hkrrdftx.html