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的执行情况,也就是说我们 ...
随机推荐
- ActiveReports 11 新特性速递
又到了一年一度,翘首期盼的ActiveReports11 即将发布,ActiveReports 10 表控件横空出世,成为中国式复杂报表的救星后,ActiveReports11 又会有哪些令人惊奇的新 ...
- 13 个免费的 PNG 图像的优化和压缩工具
图像格式有许多种不同类型,在互联网上最常见的有JPEG.GIF.BMP.TIFF和PNG.每一种图像格式都有它自己的用途,比如GIF是用于动画的,JPEG是用于高清图片的,这种图片在保存或者调整大小后 ...
- 用excel做分组散点图
散点图主要观察两组变量间的趋势和分布,如果变量多于两组,仍旧使用散点图的话,那所有点都会集中在同一显示区域内,使人无法准确判断,此时一般使用散点图矩阵进行两两比较.除此之外,如果并不关心组与组之间的关 ...
- 005_kafka_Java_API
1.生产者Producer 1)添加依赖 <dependency> <groupId>org.apache.kafka</groupId> <artifact ...
- boost.asio与boost.log同时使用导致socket不能正常收发数据
现象: 1. 没有使用boost.log前能正常收发数据 2.加入boost.log后async_connect没有回调 fix过程: 1. gdb调试发现程序block在pthread_timed_ ...
- js里实现队列与堆栈
在面向对象的程序设计里,一般都提供了实现队列(queue)和堆栈(stack)的方法,而对于JS来说,我们可以实现数组的相关操作,来实现队列和堆栈的功能,看下面的相关介绍. 一 看一下它们的性质,这种 ...
- Java8之——简洁优雅的Lambda表达式
Java8发布之后,Lambda表达式,Stream等等之类的字眼边慢慢出现在我们字眼.就像是Java7出现了之后,大家看到了“钻石语法”,看到了try-with-resource等等.面对这些新东西 ...
- [转]Bat脚本处理ftp超强案例解说
Bat脚本处理ftp超强案例解说 转自:http://369369.blog.51cto.com/319630/842341 前言: 公司有几百台windows服务器,每次程序更新,如果是一台 ...
- JavaEE Spring
1. Spring以一己之力撼动了Sun公司的JavaEE传统重量级框架(EJB),逐渐成为使用最多的JavaEE企业应用开发框架. 2. Spring是分层的JavaEE应用一站式的轻量级开源框 ...
- Java 入门(一) - 环境变量
Win 7 X64环境 计算机(右键)-> 属性 -> 高级系统设置 -> 环境变量1.新建系统变量 : JAVA_HOME C:\Program Files (x86)\Java\ ...