scheduler模块概述, spark源码版本1.3

Scheduler模块详解

Scheduler(任务调用)是Spark Core核心之一,充分体现了与Mapreduce完全不同的设计思想。

那么它们之前的任务,是怎么进行调度的,组成应用的Job是如何分配资源的呢。

1 模块概述

1.1 整体架构

任务高度分为两大模块: DAGSchedulerTaskScheduler。它们负责将用户提前的计算任务按照DAG划分为不同的阶段并且将不同阶段的计算任务提交到集群进行最终计算。

img

1.2 Scheduler的实现概述

任务调用三个主要的模块:

  1. org.apache.spark.scheduler.DAGScheduler
    • DAGScheduler的实现
  2. org.apache.spark.scheduler.SchedulerBackend
    • 是一个trait, 主要作用是分配当前资源。
    • 具体来说,向当前等待资源的Task分配计算资源(即 Executor),并且在分配的Executor上启动Task,完成计算的调度过程。它最重要的实现是reviveOffers
  3. org.apache.spark.scheduler.TaskScheduler
    • 是一个trait, 主要作用是创建SparkContext调度任务。
    • 从DAGScheduler接收不同Stage任务,并且向集群提交任务,并为执行特别慢的任务启动备份任务
    • org.apache.spark.scheduler.TaskSchedulerImpl是其唯一实现

TaskSchedulerImpl会在以下几种场景下调用org.apache.spark.scheduler.SchedulerBackend# reviveOffers:

任务调度逻辑图:

img

参考: