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的执行情况,也就是说我们 ...
随机推荐
- 移动web点5像素的秘密
最近和一个朋友聊天,朋友吐露了工作上的一些不开心,说自己总是喜欢跟别人比较,活得比较累,这种感觉大部分人经历过,往往觉得是自己心态不好,其实不然,这是人性,此时应该快速摆脱这种状态,想到DOTA大9神 ...
- ZOJ 2048 highways
题目 比我想象地要容易很多..一开始想得太复杂了,本来想试一下kruskal算法的,嫌麻烦..还是用了之前1203的prim算法...以为要注意这道题的输出顺序,结果不用,直接输出就可以了,就是注意一 ...
- 50道 Sql语句题
Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 ...
- Java中用ClassLoader载入各种资源(类、文件、web资源)的方法
lassLoader主要对类的请求提供服务,当JVM需要某类时,它根据名称向ClassLoader要求这个类,然后由ClassLoader返回这个类的class对象. ClassLoader负责载入系 ...
- 安装Python时遇到如下问题,解决方案
~$ sudo apt-get install python-pip 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 python-pip 已经是最新的版本了 ...
- SAP验证
需求:财务录费用凭证,检查科目6601001-6601999 & 成本中心为1000R001 - 1000R999,工单不能为空 GGB0 1.选择财务凭证->行项目->新建确认' ...
- 爹地,我找到了!15个极好的Linux find命令示例
爹地,我找到了!15个极好的Linux find命令示例 http://blog.jobbole.com/48931/ 妈咪,我找到了!15个实用的Linux find命令示例 http://blog ...
- opencv 基础语法
1.关于图像:显示图象 //在指定窗口显示图像cvShowImage void cvShowImage( const char* name, const CvArr* image ); name:窗口 ...
- 解析Hibernate中的持久化—ORM(转载)
最近一直在学习Hibernate,首先说一下Hibernate出现的原因吧,Hibernate是因为MVC的分层体系结构的出现,即数据持久层(模型层)的出现,持久层是在MVC三层架构的基础上提出来的, ...
- asp.netajax开发应用心得-accordation控件的事件处理
今天,再次运行以前的项目时,发现按钮的单击事件不起作用了,加了断点之后发现根本没有触发该事件.... 按照网上找到的答案,有的说把控件删掉重新拖拽一个进去,虽然以前也遇到过控件失效,重新拖拽有效的时候 ...