专栏首页牛肉圆粉不加葱Spark executor 模块③ - 启动 executor

Spark executor 模块③ - 启动 executor

本文为 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 启动过程的分析。


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 声音功能让儿童编程更有创造性

    导读:Scratch中声音功能非常强大,除了常规的音效,你甚至可以模拟各种乐器的各个发音、设置节拍、休止……如果你愿意,甚至可以用它创作一个交响乐。我们可以引导...

    一石匠人
  • 什么样的人生才是有意义的人生——没有标准的标准答案

    【导读】其实我们可以跳出这个小圈圈去更加科客观地看一下这个世界。在夜晚的时候我们仰望天空,浩瀚的宇宙中整个地球只是一粒浮尘,何况地球上一个小小的人类?在漫长的历...

    一石匠人
  • 《动物魔法学校》儿童学编程Scratch之“外观”部分

    导读:本文通过一个案例《动物魔法学校》来学习Scratch语言的“外观”部分。之后通过一系列其他功能的综合运用对作品功能进行了扩展。

    一石匠人
  • SQL中GROUP BY用法示例

    GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,如果有用Excel比较多的话,GROUP BY比较类...

    Awesome_Tang
  • 我不是算命先生,却对占卜有了疑惑——如何论证“占卜前提”的正确与否

    事出有因,我对《周易》感兴趣了很多年。只是觉得特别有趣,断断续续学习了一些皮毛。这几天又偶然接触到了《梅花易数》,觉得很是精彩,将五行八卦天干地支都串联了起来。...

    一石匠人
  • 儿童创造力教育与编程教育的碰撞——MIT雷斯尼克教授最新理论梗概

    儿童编程教育已经在我国各一线二线城市疯狂出现,颇有“烂大街”的趋势。我们不禁要问很多很多问题:

    一石匠人
  • 天干地支五行八卦的对应关系

    一石匠人
  • 复杂业务下向Mysql导入30万条数据代码优化的踩坑记录

    从毕业到现在第一次接触到超过30万条数据导入MySQL的场景(有点low),就是在顺丰公司接入我司EMM产品时需要将AD中的员工数据导入MySQL中,因此楼主负...

    haifeiWu
  • 【系统设置】CentOS 修改机器名

    ken.io
  • 一张图理清《梅花易数》梗概

    学《易经》的目的不一定是为了卜卦,但是了解卜卦绝对能够让你更好地了解易学。今天用一张思维导图对《梅花易数》的主要内容进行概括,希望能够给学友们提供帮助。

    一石匠人

扫码关注云+社区

领取腾讯云代金券