Spark源码分析之TaskSetManager分析

来源:互联网 发布:工业大数据 调研报告 编辑:程序博客网 时间:2024/05/22 05:31

调度单个任务集里任务,跟踪每一个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: <taskindex,TaskInfo>映射列表

Array[TaskLocality.TaskLocality] myLocalityLevels:locality_level 本地化级别

Long localityWaits:每一个级别的等待时间

Int currentLocalityIndex: 当前本地化索引

ConcurrentLinkedQueue[Schedulable] schedulableQueue:调度队列

SchedulingMode schedulingMode:调度的模式

二 重要方法

2.1 computeValidLocalityLevels 确定有效的locality level

 

2.1 addPendingTask 添加一个任务到pending 任务列表

 

原创粉丝点击