阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Spark调度管理

220次阅读
没有评论

共计 2292 个字符,预计需要花费 6 分钟才能阅读完成。

Spark 调度管理

本文主要介绍在单个任务内 Spark 的调度管理,Spark 调度相关概念如下:

  • Task(任务):单个分区数据及上的最小处理流程单元。
  • TaskSet(任务集):由一组关联的,但互相之间没有 Shuffle 依赖关系的任务所组成的任务集。
  • Stage(调度阶段):一个任务集对应的调度阶段。
  • Job(作业):有一个 RDD Action 生成的一个或多个调度阶段所组成的一次计算作业。
  • Application(应用程序):Spark 应用程序,由一个或多个作业组成。

各概念间的逻辑关系如下图所示:

Spark 调度管理

Spark 的调度管理模块中,最重要的类是 DAGScheduler 和 TaskScheduler,TaskScheduler 负责每个具体任务的实际物理调度,DAGScheduler 负责将作业拆分成不同阶段的具有依赖关系的多批任务,可以理解为 DAGScheduler 负责任务的逻辑调度。Spark 调度管理示意图如下:
Spark 调度管理

调度阶段的拆分

一个 Spark 任务提交后,DAGScheduler 从 RDD 依赖链末端的 RDD 出发,遍历整个 RDD 依赖链,将 Job 分解成具有前后依赖关系的多个 stage。DAGScheduler 是根据 ShuffleDependency 划分 stage 的,也就是说当某个 RDD 的运算需要将数据进行 shuffle 操作时,这个包含了 shuffle 依赖关系的 RDD 将被用来作为输入信息,构建一个新的调度阶段。以此为依据划分调度阶段,可以确保有依赖关系的数据能够按照正确的顺序得到处理和运算。

调度阶段的提交

在划分 Stage 的步骤中会得到一个或多个有依赖关系的 Stage,其中直接触发作业的 RDD 关联的调度阶段被称为 FinalStage,DAGScheduler 从 FinalStage 开始生成一个 Job。Job 和 Stage 的关系存储在一个映射表中,用于在该调度阶段全部完成时做一些后续处理,如报告状态、清理作业相关数据等。

具体提交一个 Stage 时,首先判断其依赖的所有父 Stage 的结果是否可用。如果所有父 Stage 的结果都可用,则提交该 Stage。如果有任何一个父 Stage 的结果不可用,则尝试迭代提交当前不可用的父 Stage。在迭代过程中,父 Stage 还未运行的 Stage 都被放到等待队列中,等待将来被提交。

下图是一个具有四个调度阶段的 Job 的 Stage 提交顺序:

Spark 调度管理

当一个属于中间过程调度阶段的任务(这种类型的任务所对应的类为 ShuffleMapTask)完成后,DAGScheduler 会检查对应调度阶段的所有任务是否都完成了。如果完成了,则 DAGScheduler 将重新扫描一次等待列表中所有的 Stage,检查它们是否还有依赖的 Stage 没有完成。如果所有依赖的 Stage 都已执行完毕,则提交该 Stage。

在这里,博主有一个疑问:能否按照 DAG 划分的 Stage 的拓扑顺序提交执行 Stage?求大家指点迷津。

任务结果的获取

根据任务结果的大小不同,ResultTask 返回的结果分为两中形式:

  • 如果结果足够小,则直接放在 DirectTaskResult 对象内。
  • 如果超过特定尺寸(默认约 10MB),则在 Executor 端会将 DirectTaskResult 序列化,将序列化的结果作为一个数据块存放在 BlockManager 中,然后将 BlockManager 返回的 BlockId 放在 IndirectTaskResult 对象中返回给 TaskScheduler,TaskScheduler 进而调用 TaskResultGetter 将 IndirectTaskResult 中的 BlockId 取出并通过 BlockManager 最终取得对应的 DirectTaskResult。

更多 Spark 相关教程见以下内容

CentOS 7.0 下安装并配置 Spark  http://www.linuxidc.com/Linux/2015-08/122284.htm

Spark1.0.0 部署指南 http://www.linuxidc.com/Linux/2014-07/104304.htm

Spark 官方文档 – 中文翻译  http://www.linuxidc.com/Linux/2016-04/130621.htm

CentOS 6.2(64 位)下安装 Spark0.8.0 详细记录 http://www.linuxidc.com/Linux/2014-06/102583.htm

Spark 简介及其在 Ubuntu 下的安装使用 http://www.linuxidc.com/Linux/2013-08/88606.htm

安装 Spark 集群(在 CentOS 上) http://www.linuxidc.com/Linux/2013-08/88599.htm

Hadoop vs Spark 性能对比 http://www.linuxidc.com/Linux/2013-08/88597.htm

Spark 安装与学习 http://www.linuxidc.com/Linux/2013-08/88596.htm

Spark 并行计算模型 http://www.linuxidc.com/Linux/2012-12/76490.htm

Ubuntu 14.04 LTS 安装 Spark 1.6.0(伪分布式)http://www.linuxidc.com/Linux/2016-03/129068.htm

Spark 的详细介绍:请点这里
Spark 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-10/135868.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计2292字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中