调度单个任务集里任务,跟踪每一个task,task失败进行重试,通过延迟调度处理这个任务集的本地感知调度
TaskSchedulerImpl sched:TaskScheduler实现类
TaskSet taskSet: DAGScheduler提交的任务集,一般和一个stage对应着,每一个task对应着一个RDD分区
Int maxTaskFailures:所允许 的最大失败次数
SPECULATION_QUANTILE:对于一些特殊的stage,task要完成多少百分比,才可以进行推测
SPECULATION_MULTIPLIER:一个任务比预测的中间值要慢多少倍才会推测
Long maxResultSize:task返回的最大的结果限制,默认是1G
Serializer ser:序列化
Array[Task]tasks: 任务集的所有任务
Int numTasks:任务集里任务的长度
Array[Int](numTasks) copiesRunning:拷贝的正在运行的一个task数组
Array[Boolean](numTasks) successful:存放成功的任务
Array[Int](numTasks) numFailures:存放任务失败次数
Int tasksSuccessful: 成功任务数量
Int weight: 权重
Int priority:任务集的优先级
Int stageId:任务集所在的stage
String name:TaskSetManager的名字
Int totalResultSize:总结果大小
Int calculatedTasks: 计算过的任务数量
HashSet[Long] runningTasksSet:正在运行的任务集
boolean isZombie: 表示TaskSetManager没有更多的task需要发起,就为true,否则如果有需要发起的task,该属性值就是false
HashMap[String, ArrayBuffer[Int]]pendingTasksForExecutor:每一个executor的即将发生的任务集,数据结构优点类似于栈,后进先出。这些集合实际上被视为堆栈,其中新任务被添加到arraybuffer的末尾并从末尾删除。这样可以更快地检测重复失败的任务,因为每当任务失败时,它就会被放回堆栈的头部。
HashMap[String, ArrayBuffer[Int]]pendingTasksForHost: 每一个主机上即将发生的task集合,也是栈结构
HashMap[String, ArrayBuffer[Int]]pendingTasksForRack:每一个机架上即将发生的task集合,也是栈结构
ArrayBuffer[Int] pendingTasksWithNoPrefs:没有本地首选项的未决任务。
ArrayBuffer[Int] allPendingTasks:包含所有未决任务的集合
HashSet[Int] speculatableTasks: 推测执行任务集合
HashMap[Long, TaskInfo] taskInfos: 映射列表
Array[TaskLocality.TaskLocality] myLocalityLevels:locality_level 本地化级别
Long localityWaits:每一个级别的等待时间
Int currentLocalityIndex: 当前本地化索引
ConcurrentLinkedQueue[Schedulable] schedulableQueue:调度队列
SchedulingMode schedulingMode:调度的模式
2.1 computeValidLocalityLevels 确定有效的locality level
2.1 addPendingTask 添加一个任务到pending 任务列表