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的更多相关文章

  1. Spark源码学习1.2——TaskSchedulerImpl.scala

    许久没有写博客了,没有太多时间,最近陆续将Spark源码的一些阅读笔记传上,接下来要修改Spark源码了. 这个类继承于TaskScheduler类,重载了TaskScheduler中的大部分方法,是 ...

  2. Spark源码学习1.1——DAGScheduler.scala

    本文以Spark1.1.0版本为基础. 经过前一段时间的学习,基本上能够对Spark的工作流程有一个了解,但是具体的细节还是需要阅读源码,而且后续的科研过程中也肯定要修改源码的,所以最近开始Spark ...

  3. Spark源码学习1.6——Executor.scala

    Executor.scala 一.Executor类 首先判断本地性,获取slaves的host name(不是IP或者host: port),匹配运行环境为集群或者本地.如果不是本地执行,需要启动一 ...

  4. Spark源码学习1.8——ShuffleBlockManager.scala

    shuffleBlockManager继承于Logging,参数为blockManager和shuffleManager.shuffle文件有三个特性:shuffleId,整个shuffle stag ...

  5. Spark源码学习1.5——BlockManager.scala

    一.BlockResult类 该类用来表示返回的匹配的block及其相关的参数.共有三个参数: data:Iterator [Any]. readMethod: DataReadMethod.Valu ...

  6. Spark源码学习1.4——MapOutputTracker.scala

    相关类:MapOutputTrackerMessage,GetMapOutputStatuses extends MapPutputTrackerMessage,StopMapOutputTracke ...

  7. Spark源码学习1.7——Master.scala

    master第一步是加载系统定义的环境变量,如worker的超时时间.系统保留的Application数目等:第二步,加载worker的信 息,地址.id等:第三步,加载Application的信息, ...

  8. Spark源码学习2

    转自:http://www.cnblogs.com/hseagle/p/3673123.html 在源码阅读时,需要重点把握以下两大主线. 静态view 即 RDD, transformation a ...

  9. spark源码学习-withScope

     withScope是最近的发现版中新增加的一个模块,它是用来做DAG可视化的(DAG visualization on SparkUI) 以前的sparkUI中只有stage的执行情况,也就是说我们 ...

随机推荐

  1. HTML5 十大新特性(七)——拖放API

    拖放API是H5专门为了鼠标拖放而新提供了7个事件,可以分成三个部分来讲. 一.拖动的源对象(source)可以触发的事件 dragstart:拖动开始 drag:拖动进行中 dragend:拖动结束 ...

  2. flask笔记2-程序的基本结构

    第一个flask web程序 1.初始化(所有flask程序都必须创建一个程序实例,程序实例是Flask类的对象): from flask import Flask app = Flask(__nam ...

  3. 移动端重构实战系列2——line list

    这个line list的名字是我自己起的(大概的意思是单行列表),要实现的东西为sheral的line list,对应的scss组件为_line-list.scss,下图为line-list的一个缩影 ...

  4. [C语言入门笔记]循环与运算符

    循环与运算符 什么是循环? 循环就是一个不停工作的东西,可以反复的实现一个功能,这个才是计算机的重点.计算机可以重复的做一件事情,这样子可以省很多事情 循环的种类有哪些? While Do while ...

  5. PHP PDO函数库详解

    PDO是一个“数据库访问抽象层”,作用是统一各种数据库的访问接口,与mysql和mysqli的函数库相比,PDO让跨数据库的使用更具有亲和力:与ADODB和MDB2相比,PDO更高效.目前而言,实现“ ...

  6. Mvc 提交表单的4种方法全程详解

    一,MVC  HtmlHelper方法 Html.BeginForm(actionName,controllerName,method,htmlAttributes){} BeginRouteForm ...

  7. Stack与Queue

    一.Stack的方法 1. public void push(int node)  把项 压入栈顶.其作用与 addElement (node) 相同.   不一定是int,可以是节点 stack.p ...

  8. ArcGIS Add-in插件开发从0到1及实际案例分享

    同学做毕设,要求我帮着写个ArcGIS插件,实现功能为:遍历所有图斑,提取相邻图斑的公共边长及其他属性(包括相邻图斑的ID),链接到属性表中.搞定后在这里做个记录.本文分两大部分: ArcGIS插件开 ...

  9. 隔壁信概大作业xjb写——同化棋ATAXX

    话说泥萌北大信科啊,助教是有多懒...去年黑白棋今年同化棋,顺带打ai都不用自己写标程... 好吧..我知道泥萌重点在各种sb的辅助操作上..什么悲剧的可以随时暂停载入...有毒吧 [据说泥萌上课没讲 ...

  10. C#读取Excel文件

    //excel模板的路径 string strSource = Application.StartupPath + "\\" + "ExcelTemplet" ...