版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zg_hover/article/details/84453921
概述
本文介绍TaskScheduler的基本概念和总体框架。TaskScheduler负责提交Spark应用的任务(task)去执行。
根据前面的分析,我们已经知道job的提交过程,如下图所示:
在前面的文章中对stage的调度进行了介绍,现在我们介绍task的调度器:TaskScheduler。
任务(Task)调度概述
在Spark中,不同的部署模式和运行任务调度器也不相同,如下:
部署模式 | 运行模式 | task调度器 |
---|---|---|
默认 | 默认调度 | TaskSchedulerImpl |
YARN | 客户端模式 | YarnScheduler |
YARN | 集群模式 | YarnClusterScheduler |
根据部署模式的master,通过master来获取对应的TaskScheduler。
流程如下:
- 获取集群管理器
- 通过集群管理器来创建TaskScheduler
- 通过集群管理器创建调度器后台对象SchedulerBackend
TaskScheduler创建和启动
TaskScheduler负责提交Spark应用的任务(task)去执行。
TaskScheduler的启动总体流程
从上图可以看出,TaskScheduler在SparkContext初始化时进行创建。在创建TaskScheduler对象时,还会创建一个后台的服务实体:LocalSchedulerBackend或StandaloneSchedulerBackend。
当调用TaskScheduler的start()函数时,TaskScheduler对象会调用SchedulerBackend对象的start()函数。
在SparkContext中启动TaskScheduler
在SparkContext中创建和启动TaskScheduler的代码流程如下:
- 通过SparkContext的createTaskScheduler函数来创建TaskScheduler对象
- 调用TaskScheduler的start()函数启动任务调度器
启动的代码如下:
// Create and start the scheduler
// 创建一个TaskScheduler对象
val (sched, ts) = SparkContext.createTaskScheduler(this, master, deployMode)
_schedulerBackend = sched
_taskScheduler = ts
...
// 启动TaskScheduler
_taskScheduler.start()
TaskScheduler实现合约
TaskScheduler是一个接口,目前实现该接口的类是TaskSchedulerImpl。我们也可以根据自己的需要来实现自己的任务调度类。
该接口定义的成员如下:
成员名 | 类型 | 说明 |
---|---|---|
rootPool | Pool | 调度实体集 |
schedulingMode | SchedulingMode | 调度模式,目前支持两种:FAIR, FIFO |
start | 函数 | 启动TaskScheduler |
postStartHook | 函数 | TaskScheduler初始化后被调用 |
stop | 函数 | 停止TaskScheduler,切断和cluster的联系 |
submitTasks | 函数 | 提交给定阶段的执行任务(作为TaskSet)。当DAGScheduler提交任务(阶段的task)时被执行。 |
cancelTasks | 函数 | 取消给定阶段(stage)的所有任务。 |
killTaskAttempt | 函数 | 尝试取消一个任务(task) |
setDAGScheduler | 函数 | 设置DAGScheduler调度器,根据集群的master不同而不同。 |
defaultParallelism | 函数 | 计算默认的并行度。当SparkContext获取默认并行度时使用。 |
executorHeartbeatReceived | 函数 | 监听来自执行器(executor)的心跳信息 |
applicationId | 函数 | 获取该job的应用程序唯一的id |
executorLost | 处理executor(执行器)失败事件 | |
workerRemoved | 处理worker移除事件 | |
applicationAttemptId | Spark应用id,是一个独一无二的的标识 |
总结
本文介绍了Spark的TaskScheduler基本功能和启动流程。