Spark源码学习1.2——TaskSchedulerImpl.scala
许久没有写博客了,没有太多时间,最近陆续将Spark源码的一些阅读笔记传上,接下来要修改Spark源码了。
这个类继承于TaskScheduler类,重载了TaskScheduler中的大部分方法,是Task调度的实际操作。
1、检测推测执行间隔,最大响应时间,每个task的CPU数。
2、指定调度模式SchedulingMode。
3、setDAGScheduler:设置任务调度的对象DAGScheduler。
4、initialize:初始化backend接口和资源池pool,并给资源池配置调度模式,FIFO或者Fair。Backend接口是TaskScheduler与底层资源管理器(如Mesos)交互的接口。
5、获取任务ID。
6、start:主要启动backend接口,检查是否是本地执行,检查是否启动推测执行(如果是就需要启动推测执行的线程)。
7、postStartHook:与start保持同步,等待backend准备好。
8、submitTasks:根据参数中的taskSet(即stage中的一群task)将task提交给集群中执行的UI,惯例先要检查是否是本地执行。
9、cancelTasks:根据stageId来取消任务,也就是取消stage。如果有任务已经运行,要先杀死任务再丢弃stage,否则直接丢弃stage。
10、taskSetFinished:当所有的任务都执行完成后,设置任务执行为完成,并清除其与TaskSetManager的联系。
11、resourceOffers:资源分配的重要方法。首先将各个可活动的节点和executor的地址都标记,添加executor时也要重新标记;然后,为第一次循环做准备,即获取已分配的任务、可用CPU数、排队的task;嵌套循环,循环标准为两个,排队的task和位置优先级,前者为每一个在等待的task,后者为最低优先级到task所标注的优先级;内部执行的操作也是一个循环,当有CPU可用时的while循环;while循环内是一个for循环,用来遍历所有的executor;for循环内部为一个for循环,用来遍历匹配task和executor。
注:优先级为Any、Rack_Local、No_PREF、NODE_LOCAL、PROCESS_LOCAL。
12、statusUpdate:更新各个task的状态,实际上是遍历所有的task,然后根据其TaskSet中记录的值来判断Task的状态。
13、executorHeartbeatReceived:重载心跳接收函数。
14、结果处理函数:handle**函数,用来处理任务运行结果、成功的任务、失败的任务等等;error函数,用来处理失败的错误报告;stop函数,用来关闭backend接口和任务结果接收的接口。
15、checkSpeculatableTasks:检查资源池中是否有需要启动推测执行的task,如果有则需要重新启动offers。
16、executorLost:处理失败的executor,打印错误信息。
17、removeExecutor:移除executor并标记其丢失。
18、waitBackendReady:等待backend接口准备好。
19、类TaskSchedulerImpl:对map按值的数量排序,然后建立索引。
Spark源码学习1.2——TaskSchedulerImpl.scala的更多相关文章
- Spark源码学习1.1——DAGScheduler.scala
本文以Spark1.1.0版本为基础. 经过前一段时间的学习,基本上能够对Spark的工作流程有一个了解,但是具体的细节还是需要阅读源码,而且后续的科研过程中也肯定要修改源码的,所以最近开始Spark ...
- Spark源码学习1.6——Executor.scala
Executor.scala 一.Executor类 首先判断本地性,获取slaves的host name(不是IP或者host: port),匹配运行环境为集群或者本地.如果不是本地执行,需要启动一 ...
- Spark源码学习1.3——TaskSetManager.scala
TaskSetManager.scala TaskSet是指一系列被提交的task,一般是代表特定的stage中丢失的partition.TaskSetManager通过一个TaskScheduler ...
- Spark源码学习1.8——ShuffleBlockManager.scala
shuffleBlockManager继承于Logging,参数为blockManager和shuffleManager.shuffle文件有三个特性:shuffleId,整个shuffle stag ...
- Spark源码学习1.5——BlockManager.scala
一.BlockResult类 该类用来表示返回的匹配的block及其相关的参数.共有三个参数: data:Iterator [Any]. readMethod: DataReadMethod.Valu ...
- Spark源码学习1.4——MapOutputTracker.scala
相关类:MapOutputTrackerMessage,GetMapOutputStatuses extends MapPutputTrackerMessage,StopMapOutputTracke ...
- Spark源码学习1.7——Master.scala
master第一步是加载系统定义的环境变量,如worker的超时时间.系统保留的Application数目等:第二步,加载worker的信 息,地址.id等:第三步,加载Application的信息, ...
- Spark源码学习2
转自:http://www.cnblogs.com/hseagle/p/3673123.html 在源码阅读时,需要重点把握以下两大主线. 静态view 即 RDD, transformation a ...
- Spark源码学习3
转自:http://www.cnblogs.com/hseagle/p/3673132.html 一.概要 本篇主要阐述在TaskRunner中执行的task其业务逻辑是如何被调用到的,另外试图讲清楚 ...
随机推荐
- H5 学习笔记(一、关于position定位)
主要是relative与absolute的用法: 1.relative 依据left right top bottom 等属性在正常文档流中脱离位置,即相对于他的正常文档流位置进行移动.两个都为rel ...
- 【LeetCode】#1 Two Sum
[Question] Given an array of integers, return indices of the two numbers such that they add up to a ...
- 记一次使用jQuery清空元素
缘由: 数据量比较大,分页显示,页码是自己写的,动态创建页码,创建元素时会绑定元素的click事件,每次显示五个页码(1,2,3,4,5),点击2—4不换,点5,页码变成3,4,5,6,7. 遇到的问 ...
- 第一种SUSE Linux IP设置方法
第一种SUSE Linux IP设置方法ifconfig eth0 192.168.1.22 netmask 255.255.255.0 uproute add default gw 192.168. ...
- 委托的例子,from C# advanced program
class BubbleSorter { static public void Sort<T>(IList<T> sortArray, Func<T, T, bool&g ...
- 教你9个提升 Wordpress 网站安全性的方法
大约一个月前,这个部落格被黑客入侵(编按:Amit Agarwal 的网站).而其他托管于相同主机商的网站像是 ctrlq.org 和2hundredzeros.com 也深受其害,黑客成功从网路上拿 ...
- C#验证码的生成
HTML <ul> <li>验证码:</li> <li> <img src="/Login/GetValidateCode?ID=1&q ...
- Android开发--Adapter的应用
1.简介 Adapter的作用是为GridView,ListView等界面控件与数据之间搭建桥梁,每当列表里的每一项显示到页面时,都会调用到Adapter的getView方法 返回一个View.在An ...
- jquery触屏幻灯片
一.前言 去年接触了移动Web开发,做了些手机端的网站及应用,还有些小的微信游戏和活动页面.每个项目里或多或少的都会有一些触屏事件等.其中有两个用到了jquery触屏幻灯片.刚开始的时候也在百度上搜索 ...
- WCF初探-28:WCF中的并发
理解WCF中的并发机制 在对WCF并发机制进行理解时,必须对WCF初探-27:WCF中的实例化进行理解,因为WCF中的并发特点是伴随着服务实例上下文实现的.WCF的实例上下文模型可以通过Instanc ...