Spark源码学习1.3——TaskSetManager.scala
TaskSetManager.scala
TaskSet是指一系列被提交的task,一般是代表特定的stage中丢失的partition。TaskSetManager通过一个TaskSchedulerImpl实体来对TaskSet进行管理。
该方法定义了以下参数:
EXECUTOR_TASK_BLACKLIST_TIMEOUT:executor加入黑名单的时间。如果executor意外终止导致任务执行失败,那么会暂时将这个executor加入黑名单,不再分配任务给它。
SPECULATION_QUANTILE和SPECULATION_MULTIPLIER:推测执行的分位点及推测执行的任务数量。
isZombie:首先,定义TaskSetManager进入zombie状态——TaskSet中至少有一个task运行完成或者整个taskset被抛弃;zombie状态会一直保持到所有的task都执行完成;之所以让TaskSetManager处于zombie状态,是因为这时可以跟踪所有正在运行的task。
pendingTasksForExecutor:Executor的未确定队列中的所有task。这些task实际上以堆的形式存放,新来的task存放在堆尾,而执行错误的任务则会放置在堆头,以此可以察觉重复执行失败的任务。并且这些task还只是简单的清除,当它确定分发给executor时,它只是从这个executor的未确定队列中清除,其他的executor的未确定队列中稍后才清除。类似的参数有pendingTasksForHost和pendingTasksForRack。PS. 在向pending list中插入task时一般是按照逆序,这样序号小的任务就先launch。
currentLocalityIndex和lastLaunchTime:用来定义当前的分配等级(根据数据本地性定义的优先级)以及当前等级下的任务launch的最迟时间。
该文件定义的方法如下:
1、addPendingTask():该方法依靠本地性优先级将task悬挂到对应的pending list中。
2、findTaskFromList():该方法获取list中一个可以launch的task,同时清除扫描过的已经执行的task。其实它从第二次开始首先扫描的一定是已经运行完成的task,因此是延迟清除。
3、executorIsBlacklisted():加入黑名单的executor是否可以运行task?
4、findSpeculativeTask():从指定的executor中获取可以推测执行的task,然后考虑其本地性优先级,并根据本地性优先级分配task。
5、findTask():获取指定节点指定优先级的队列中的task。如果所有的task都已经launch了,那么就查询可以推测执行的task。
6、resourceOffer():向一个只有一个executor的offer提供一个任务。这个方法可以被采用延迟调度的具有最大本地性优先级的任务,或者指定的不可修改的NO_PREF优先级的任务使用。
7、getAllowedLocalityLevel():根据延迟调度机制和等待时间获取可以launch的task的本地性优先级。
8、getLocalityIndex():修正错误的本地性优先级。
9、handleSuccessfulTask()和handleFailedTask():标记已经成功/失败的task,并向DAGScheduler发送同步消息。
10、maybeFinishTaskSet():标记执行完成的任务。
11、abort():将意外停止的任务(例如Mesos错误)标记为已完成任务,同时将TaskSetManager的状态置为isZombie。
12、addRunningTask()和removeRunningTask():添加/删除正在运行的任务。
13、executorLost():如果executor丢失,那么所有的任务都需要重新在其他的executor上再执行一遍,并通知DAGScheduler这个stage运行失败了。
14、checkSpeculatableTasks():判断某个任务是否可以启动推测执行。一,该任务必须可以推测执行;二,在大多数任务执行完成后才启动推测执行机制;三,达到门槛值的task放入推测执行任务等待队列中。该方法返回的值是布尔型,表明存在推测执行的任务。
15、computeValidLocalityLevels():假定所有的任务都已经添加到了pending list中,此时调用该方法计算该TaskSet中所有任务的本地性优先级的使用情况。
16、recomputeLocality():重新计算本地性优先级使用情况,主要是在添加executor后调用。
Spark源码学习1.3——TaskSetManager.scala的更多相关文章
- Spark源码学习1.2——TaskSchedulerImpl.scala
许久没有写博客了,没有太多时间,最近陆续将Spark源码的一些阅读笔记传上,接下来要修改Spark源码了. 这个类继承于TaskScheduler类,重载了TaskScheduler中的大部分方法,是 ...
- 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.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源码学习-withScope
withScope是最近的发现版中新增加的一个模块,它是用来做DAG可视化的(DAG visualization on SparkUI) 以前的sparkUI中只有stage的执行情况,也就是说我们 ...
随机推荐
- IE下,js改变绝对定位的属性不生效
如果想要动态改变定位位置的值,例如改变TOP的值,IE下必须要给TOP一个初始值,不然不生效..
- [分享] IT天空的二十二条军规
Una 发表于 2014-9-19 20:25:06 https://www.itsk.com/thread-335975-1-1.html IT天空的二十二条军规 第一条.你不是什么都会,也不是什么 ...
- [求助] win7 x64 封装 出现 Administrator.xxxxx 的问题
[求助] win7 x64 封装 出现 Administrator.xxxxx 的问题 jacky_qu 发表于 2014-9-3 23:34:37 https://www.itsk.com/thre ...
- myeclipse下构建maven web项目
首先创建一个Maven的Project如下图 我们勾选上Create a simple project (不使用骨架) 这里的Packing 选择 war的形式 由于packing是war包,那么下面 ...
- loadrunner json
Action(){ web_custom_request("JRPT_WriteLog", //VuGen中树形视图中显示的名称 "Url=url", //请求 ...
- (转抄:人人都是产品经理——iamsujie)如何提高产品规划PPT的能力
做产品几年之后,不可避免的要碰到写规划这件事儿,虽说不少人,不乏大牛,对规划持“无用论”的观点, 但大多数人其实还是更相信这个段子: 在一个公司里,看一个人的地位,主要看他平时写的文档类型——写wor ...
- Ajax_showHint() 函数
showHint() 函数实现的功能是:当用户在输入框中键入字符时,网页如何与 web 服务器进行通信,完整的代码如下: <html><head><script type ...
- 多行溢出隐藏显示省略号功能的JS实现
在页面重构中,经常需要将过多的内容隐藏而显示部分.在单行文本中实现非常简单,但是在多行文本中,则需要根据实际选择不同的方式. 用CSS实现多行溢出隐藏的代码非常简单,但是兼容性也相对较低. displ ...
- Fragment:关于Avoid non-default constructors in fragments的错误
在android开发中,写了一个关于继承Fragment的类时,如果有重载构造函数时,会提示“Avoid non-default constructors in fragments: use a de ...
- outline使用方法,outline与border的区别:
在浏览器里,当鼠标点击或使用Tab键让一个链接或者一个radio获得焦点的时候,该元素将会被一个轮廓虚线框围绕.这个轮廓虚线框就是 outline . outline 能告诉用户那一个可以激发事件的h ...