Spark TaskScheduler调度算法与资源分配源码分析

本文深入探讨了Spark的TaskScheduler如何处理Task提交和资源分配,重点关注TaskSchedulerImpl的调度算法,包括FIFO和FAIR模式。Task提交涉及TaskSetManager的管理,而资源分配则涉及到对Executor的均衡策略。文章详细介绍了Pool调度池的结构、调度算法的实现以及资源分配的流程,揭示了Spark集群管理的关键细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

TaskScheduler调度算法与调度池

  在DAGScheduer对Stage划分,DAGScheduer将Task提交给TaskScheduler,将多个Task打包为TaskSet后,调用taskScheduler的submitTasks方法。TaskScheduler是一个Trait,在Spark中唯一的实现是TaskSchedulerImpl类,TaskSchedulerImpl用于接收DAGSchduler给每个Stage创建好的TaskSet,按照调度算法将资源分配给Task并且将Task交给Spark集群上Executor运行,当Task失败时进行重试,通过推断执行减轻落后的Task对整体作业进度的影响。

  TaskSchedulerImpl中包含一些重要的组件:
1、Pool调度池:TaskSchedulerImpl对任务的调度基于调度池
2、TaskSetManager:用于管理TaskSet,包括任务推断,Task本地性,并对Task的资源进行分配

  Pool调度池中有一个根队列rootPool,根队列中包含了多个子调度池,子调度池中还可以包含其他的调度池或TaskSetManager。所以,整个调度池是个多层级的结构。Pool的创建需要四个参数:

1.poolName:调度池名称
2.schedulingMode:调度池模式,共有三种类型:FAIR(公平调度模式)FIFO(先入先出模式)NONE
3.initMinShare:MinShare初始值
4.initWeight:Weight初始值

  在Pool类中,有一个比较重要的方法taskSetSchedulingAlgorithm。调度池中对taskSet的调度,取决于调度算法,根据调度模式进行匹配。如果是FIFO调度模式,则为FIFO先入先出算法,如果是FAIR调度模式,则为FAIR公平调度算法

var taskSetSchedulingAlgorithm: SchedulingAlgorithm = {
   
    schedulingMode match {
   
      case SchedulingMode.FAIR =>
        new FairSchedulingAlgorithm()
      case SchedulingMode.FIFO =>
        new FIFOSchedulingAlgorithm()
      case _ =>
        val msg = "Unsupported scheduling mode: $schedulingMode. Use FAIR or FIFO instead."
        throw new IllegalArgumentException(msg)
    }
  }

下面来看看两种调度算法的实现。两种调度算法位于org.apache.spark.scheduler.SchedulingAlgorithm类,该类中仅定义了一个方法,对两个Schedulable进行比较

def comparator(s1: Schedulable, s2: Schedulable): Boolean

FIFO先入先出调度算法的实现

  1. 先获取两个Schedulable s1,s2的优先级
  2. 对两个优先级Schedulable 进行比较
  3. 如果优先级相同,则对两个Schedulable stageId进行比较
  4. 如果结果小于0,则优先调度s1,否则优先调度s2

FAIR公平调度算法的实现

  1. 获取两个Schedulable s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值