Spark 应用Spark深入学习Spark在简书

Spark executor模块① - 主要类以及创建 AppC

2016-11-14  本文已影响595人  牛肉圆粉不加葱

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

在 executor 模块中,最重要的几个类(或接口、trait)是:

接下来先简要介绍这几个类的作用以及各自主要的成员和方法,这是理解之后内容的基础

StandaloneAppClient(AppClient)

StandaloneAppClient 主要有以下几个作用:

  1. 向 master 注册 application
  2. 接收并处理来自 master 的各种消息,如 RegisteredApplicationApplicationRemovedExecutorAdded
  3. 调用 SchedulerBackend 回调接口以通知各种重要的 event,比如:Application 失败、添加了 executor、executor 更新等

主要成员

主要方法

SchedulerBackend

SchedulerBackend 在 Standalone 模式下的 SchedulerBackend 的实现是 StandaloneSchedulerBackend,但是从大体的作用上来说,各个模式下的 SchedulerBackend 作用是相同的,主要为:

  1. 当有新的 task 提交或资源更新时,查找各个节点空闲资源,并确定在哪个 executor 上启动哪个 task 的对应关系,对应的方法是 def reviveOffers(): Unit
  2. 被 TaskScheduler 调用来 kill task,对应的方法是 def killTask(...): Unit

TaskScheduler

低等级的 task 调度接口,当前只有 TaskSchedulerImpl 这一个实现。该接口支持在不同的部署模式下工作。每个 SparkContext(application) 对应唯一的一个 TaskScheduler。 TaskScheduler 从 DAGScheduler 的每一个 stage 获取 tasks,并负责发送到集群去执行这些 tasks,在失败的时候重试,并减轻掉队情况。TaskScheduler 会返回 events 给 DAGScheduler。

主要方法

以上简要的介绍了 AppClient、SchedulerBackend、TaskScheduler 几个接口,其中 SchedulerBackend 和 TaskScheduler 接口实例是在 SparkContext 构造函数中创建的,而 AppClient 实例是在 SchedulerBackend 构造函数中被创建。

AppClient 的创建与启动

AppClient 的创建与启动也比较简单,主要流程如下:

  1. 在 SparkContext 的构造函数中,调用 val (sched, ts) = SparkContext.createTaskScheduler(this, master, deployMode) 来通过 master url 来创建相应模式下的 SchedulerBackend 实例 sched 以及 TaskSchedulerImpl 实例 ts(我们假定这里创建的 sched 是 StandaloneScheduler 类型的)
  2. 随后,依然是在 SparkContext 的构造函数中,TaskScheduler 实例 ts 调用其 start 方法,在该 start 方法中会调用 SchedulerBackend 实例 sched 的 start 方法(所以,你也可以从这里知道 TaskScheduler 的实现中是包含 SchedulerBackend 的实例的)
  3. 在 SchedulerBackend 的 start 方法中会创建其嵌套类 ClientEndpoint 对象
  4. 在将 ClientEndpoint 对象注册给 rpcEnv 的过程中 ClientEndpoint 对象会收到 OnStart 消息并处理,处理过程主要就是持有 ApplicationDescription(主要包括name, maxCores, memoryPerExecutorMB, 启动命令行, appUiUrl等) 来向 Master 注册 application

再次说明,以上内容若无特别说明均指 Standalone 模式下的。本文简要的分析了几个关键类以及 AppClient 是如何启动的,更详细的剖析会在后面的文章中说明。


欢迎关注我的微信公众号:FunnyBigData

FunnyBigData
上一篇 下一篇

猜你喜欢

热点阅读