继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Spark executor 模块③ - 启动 executor

慕虎7371278
关注TA
已关注
手记 1259
粉丝 203
获赞 873

本文为 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


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP