前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spark executor 模块③ - 启动 executor

Spark executor 模块③ - 启动 executor

作者头像
codingforfun
发布2018-08-24 16:03:25
3960
发布2018-08-24 16:03:25
举报

本文为 Spark 2.0 源码分析笔记,由于源码只包含 standalone 模式下完整的 executor 相关代码,所以本文主要针对 standalone 模式下的 executor 模块,文中内容若不特意说明均为 standalone 模式内容

在介绍AppClient 向 Master 注册 Application的过程中,我们知道 Master 在处理 AppClient 的注册消息时,会进行调度,调度的过程中会决定在某个 worker 上启动某个(或某些) executor,这时会向指定的 worker 发送 LaunchExecutor 消息,本文将对 worker 接收到该消息后如何启动 executor 进行剖析。

worker 启动 executor

worker 接收到 LaunchExecutor 消息后的处理流程如下图所示,主要有四个步骤,我们仅对最关键的创建 ExecutorRunner 对象的创建与启动进行分析

ExecutorRunner 对象的创建与启动

ExecutorRunner 是用来管理 executor 进程的,只在 Standalone 模式下有。创建 ExecutorRunner 对象 manager 时,仅对其成员变量做了简单的初始化。关键还是在于 manager 调用的 start() 方法,该方法实现如下:

那么上图中在 start() 方法中新创建的线程中调用的 ExecutorRunner#fetchAndRunExecutor 又做了什么呢?该方法主要做了以下事情:

  1. 结合 ApplicationDescription.command 启动 CoarseGrainedExecutorBackend 进程
    1. CoarseGrainedExecutorBackend 在启动后,会向 driver 发送 RegisterExecutor 消息注册 executor
    2. driver 在接收到 RegisterExecutor 消息后,会将 Executor 的信息保存在本地,并响应 RegisteredExecutor 消息
    3. 回到 CoarseGrainedExecutorBackend,它在接收到 driver 回应的 RegisteredExecutor 消息后,会创建一个 Executor。至此,Executor 创建完毕(Executor 在 Mesos、YARN、Standalone 模式下都是相同的,不同的只是资源的分配方式)
    4. driver 端调用 CoarseGrainedSchedulerBackend.DriverEndpoint#makeOffers() 实现在 Executor 上启动 task
  2. 阻塞等待该 CoarseGrainedExecutorBackend 进程退出
  3. 该 CoarseGrainedExecutorBackend 进程退出后,向 worker 发送 ExecutorStateChanged(Executor 状态变更为 EXITED) 消息通知其 Executor 退出

其中,在创建、启动或等待 CoarseGrainedExecutorBackend 进程的过程中:

  • 若捕获到 InterruptedException 类型异常,表明 worker 进程被强制 kill, 则将 Executor 状态置为 KILLED 并调用 killProcess 方法来结束 CoarseGrainedExecutorBackend 进程
  • 若捕获到其他类型异常,表明 worker 进程意外退出,则将 Executor 的状态置为 FAILED 并调用 killProcess 方法来结束 CoarseGrainedExecutorBackend 进程

至此,我们完成了对 executor 启动过程的分析。


本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.11.26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • worker 启动 executor
    • ExecutorRunner 对象的创建与启动
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档