为了账号安全,请及时绑定邮箱和手机立即绑定

Spark executor 模块③ - 启动 executor

标签:
Spark

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

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

worker 启动 executor

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

webp

ExecutorRunner 对象的创建与启动

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

webp

那么上图中在 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 启动过程的分析。



作者:牛肉圆粉不加葱
链接:https://www.jianshu.com/p/5df9bee37e7e


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消