spark2原理分析-TaskScheduler(task调度器)概览

概述

本文介绍TaskScheduler的基本概念和总体框架。TaskScheduler负责提交Spark应用的任务(task)去执行。

根据前面的分析,我们已经知道job的提交过程,如下图所示:

spark2原理分析-TaskScheduler(task调度器)概览_第1张图片

在前面的文章中对stage的调度进行了介绍,现在我们介绍task的调度器:TaskScheduler。

任务(Task)调度概述

在Spark中,不同的部署模式和运行任务调度器也不相同,如下:

部署模式 运行模式 task调度器
默认 默认调度 TaskSchedulerImpl
YARN 客户端模式 YarnScheduler
YARN 集群模式 YarnClusterScheduler

根据部署模式的master,通过master来获取对应的TaskScheduler。
流程如下:

  • 获取集群管理器
  • 通过集群管理器来创建TaskScheduler
  • 通过集群管理器创建调度器后台对象SchedulerBackend

TaskScheduler创建和启动

TaskScheduler负责提交Spark应用的任务(task)去执行。

TaskScheduler的启动总体流程

spark2原理分析-TaskScheduler(task调度器)概览_第2张图片

从上图可以看出,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基本功能和启动流程。

你可能感兴趣的:(spark,深入浅出Spark原理)