大话Spark(9)-源码之TaskScheduler
上篇文章讲到DAGScheduler会把job划分为多个Stage,每个Stage中都会创建一批Task,然后把Task封装为TaskSet提交到TaskScheduler。
这里我们来一起看下TaskScheduler是如何把Task分配到应用程序的Executor上去执行。
重点是这里的task分配算法。
如下图是DagScheduler中把TaskSet提交到TaskScheduler:
这里我们以standalone模式为例,使用的是TaskSchedulerImpl,实现与TaskSchduler这个trait

TaskSchedulerImple的submitTasks方法如下:
首先它会为每个taskSet创建一个TaskManager,TaskManager负责管理这个TaskSet(负责Task的重试,处理TaskSet的本地话调度机制等)。

上图中重要的方法是backend.reviveOffers(),这里的backend是初始化SparkContext的时候根据clusterManager的不同创建的backend(这里是 StandaloneSchedulerBackend extends CoarseGrainedSchedulerBackend),backend底层负责底层接受TaskSchedulerImpl的控制,负责Master的注册和Tasks发送到Executor等操作。
backend.reviveOffers()调用到CoarseGrainedSchedulerBackend的内部类DriverEndpoint的makeOffers, 如下:

makeOffers方法的主要作用是取出所有可用的executor并且计算其可用的资源数量,然后调用resourceOffers把task分配到executor,以下是resourceOffers中的部分代码:

按照我们的调度顺序获取每个TaskSet, 然后级别的递增顺序遍历本地化级别, 尝试使用最小的本地化级别启动task

本地化级别:
1 PROCESS_LOCAL:进程本地化,rdd对应的分区数据和task在一个executor中,速度最快
2 NODE_LOCAL: 节点本地化,rdd和task不在一个executor中,但是在一个worker上
3 NO_PREF: 无所谓本地化级别
4 RACK_LOCAL:机架本地化, rdd和task在一个机架上。
5 ANY: 任意的本地化级别。
启动任务的时候从最小的本地化级别开始尝试,也就是尽量选择最快的计算方式。
再看一下上图中,内层for循环中的resourceOfferSingleTaskSet方法:

以上就是TaskScheduler执行task分配算法的大致过程,感谢阅读。
大话Spark(9)-源码之TaskScheduler的更多相关文章
- 大话Spark(6)-源码之SparkContext原理剖析
SparkContext是整个spark程序通往集群的唯一通道,他是程序的起点,也是程序的终点. 我们的每一个spark个程序都需要先创建SparkContext,接着调用SparkContext的方 ...
- 大话Spark(7)-源码之Master主备切换
Master作为Spark Standalone模式中的核心,如果Master出现异常,则整个集群的运行情况和资源都无法进行管理,整个集群将处于无法工作的状态. Spark在设计的时候考虑到了这种情况 ...
- 大话Spark(8)-源码之DAGScheduler
DAGScheduler的主要作用有2个: 一.把job划分成多个Stage(Stage内部并行运行,整个作业按照Stage的顺序依次执行) 二.提交任务 以下分别介绍下DAGScheduler是如何 ...
- (升级版)Spark从入门到精通(Scala编程、案例实战、高级特性、Spark内核源码剖析、Hadoop高端)
本课程主要讲解目前大数据领域最热门.最火爆.最有前景的技术——Spark.在本课程中,会从浅入深,基于大量案例实战,深度剖析和讲解Spark,并且会包含完全从企业真实复杂业务需求中抽取出的案例实战.课 ...
- Spark Streaming源码解读之JobScheduler内幕实现和深度思考
本期内容 : JobScheduler内幕实现 JobScheduler深度思考 JobScheduler 是整个Spark Streaming调度的核心,需要设置多线程,一条用于接收数据不断的循环, ...
- spark最新源码下载并导入到开发环境下助推高质量代码(Scala IDEA for Eclipse和IntelliJ IDEA皆适用)(以spark2.2.0源码包为例)(图文详解)
不多说,直接上干货! 前言 其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. ...
- 使用 IntelliJ IDEA 导入 Spark 最新源码及编译 Spark 源代码(博主强烈推荐)
前言 其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. 准备工作 1.sca ...
- 第十一篇:Spark SQL 源码分析之 External DataSource外部数据源
上周Spark1.2刚发布,周末在家没事,把这个特性给了解一下,顺便分析下源码,看一看这个特性是如何设计及实现的. /** Spark SQL源码分析系列文章*/ (Ps: External Data ...
- 第十篇:Spark SQL 源码分析之 In-Memory Columnar Storage源码分析之 query
/** Spark SQL源码分析系列文章*/ 前面讲到了Spark SQL In-Memory Columnar Storage的存储结构是基于列存储的. 那么基于以上存储结构,我们查询cache在 ...
随机推荐
- wpf 绑定数据无法更新ui控件可能存在的问题
BindingMode的枚举值有: ① OneWay ② TwoWay ③ OneTime:根据源端属性值设置目标属性值,之后的改变会被忽略,除非调用BindingExpression.UpdateT ...
- 毕业设计之感悟 —— UML 与 ER 图
今天毕业设计答辩,虽然我第一个上场,但是不是特别紧张,因为整个系统都是我写的.我以为自己天衣无缝,能应付所有老师的所有问题.事实上,我被老师教育了一番. 老师说我,毕业论文中没有一个类.我一开始比较懵 ...
- Mvvm Light Toolkit 入门
原文:Mvvm Light Toolkit 入门 前言 之前学习UWP的时候就一直看到有关MVVM的资料但是一直没有系统的去学,最近正好有时间,特地来攻破这个点,顺便学习一下VS与GitHub的链接和 ...
- c# 编写REST的WCF
REST(Representational State Transfer)即 表述性状态传递 ,简称REST,通俗来讲就是:资源在网络中以某种表现形式进行状态转移. RESTful是一种软件架构风格. ...
- 【WPF】DPI对控件定位产生的影响
原文:[WPF]DPI对控件定位产生的影响 需求 程序界面上是一个Window,当用户点击桌面上除此Window之外的任何地方,都要把这个window隐藏掉.程序有个托盘图标,点击托盘图标不能隐藏wi ...
- mvn 命令在command prompt无法识别
Download maven from this website: https://maven.apache.org/download.cgi 解压binary包后放到一个位置,比如C:\apache ...
- Spring 核心技术(1)
接上篇:Spring 框架概述 version 5.1.8.RELEASE 这部分参考文档涵盖了 Spring Framework 所有绝对不可或缺的技术. 其中最重要的是 Spring Framew ...
- SVG路径动画解密
原文:SVG路径动画解密 原文链接:http://www.gbtags.com/gb/share/5581.htm SVG路径动画效果现在貌似越来越多网站都使用了,给我的感觉就像是一段时间的流行而已, ...
- Win10《芒果TV》送7天免费会员,邀您抢先看萌心自制《妈妈是超人3》
<妈妈是超人>第三季萌心归来,霍思燕,贾静雯,黄圣依,邓莎联合释放"妈妈的声音",嗯哼,咘咘,波妞,安迪,大麟子五位萌娃共同出镜,萌化屏幕.Win10<芒果TV& ...
- 通过SSIS的“查找”组件进行不同数据源之间数据的合并操作
原文:通过SSIS的"查找"组件进行不同数据源之间数据的合并操作 为了协助开发还原生产环境中的某些bug,需要将将生产环境的某些特定表数据导入到测试环境做测试,之前一直都是暴力地t ...