目录

  • Yarn调度器和调度算法
  • 一、先进先出调度器(FIFO)
  • 二、容量调度器(Capacity Scheduler)
  • 1. 容量调度器特点
  • 2. 容量调度器资源分配算法
  • 三、公平调度器(Fair Scheduler)
  • 1. 公平调度器特点
  • 2. 公平调度器--缺额
  • 3. 公平调度器队列资源分配方式
  • 4. 公平调度器资源分配算法


Yarn调度器和调度算法

目前,Hadoop作业调度器主要有三种: FIFO、容量(Capacity Scheduler)和公平(Fair Scheduler)。

Apache Hadoop-1.x默认调度器是FIFO;
Apache hadoop-2.7.2之后默认调度器是容量调度器Capacity Scheduler,也称计算能力调度器;
Apache hadoop-3.2.2默认调度器是公平调度器Fair Scheduler。

CDH 框架默认调度器是 Fair Scheduler。

如图为Apache hadoop-3.2.2默认调度器配置信息(yarn-site.xml):

hadoop的调度器是 hadoop调度器及其工作方法_big data

一、先进先出调度器(FIFO)

FIFO调度器(First In First Out): 单队列,根据提交作业的先后顺序,先到先得。

hadoop的调度器是 hadoop调度器及其工作方法_算法_02

优点: 简单易懂;
缺点: 不支持多队列,生产环境很少使用。

二、容量调度器(Capacity Scheduler)

Capacity Scheduler是Yahoo开发的多用户调度器。

1. 容量调度器特点

hadoop的调度器是 hadoop调度器及其工作方法_hadoop_03

  1. 多队列 :每个队列可配置一定的资源量,每个队列内部采用FIFO调度策略
  2. 容量保证:管理员可为每个队列设置资源最低保证和资源使用上线;
  3. 灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列;
  4. 多租户
    a. 支持多用户共享集群和多应用程序同时运行;
    b. 为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源进行限定。

2. 容量调度器资源分配算法

hadoop的调度器是 hadoop调度器及其工作方法_yarn_04

三、公平调度器(Fair Scheduler)

Fair Scheduler是Facebook开发的多用户调度器。

1. 公平调度器特点

hadoop的调度器是 hadoop调度器及其工作方法_big data_05

与容量调度器相同点:

  1. 多队列 :每个队列可配置一定的资源量,每个队列内部采用FIFO调度策略
  2. 容量保证:管理员可为每个队列设置资源最低保证和资源使用上线;
  3. 灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列;
  4. 多租户
    a. 支持多用户共享集群和多应用程序同时运行;
    b. 为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源进行限定。

与容量调度器不同点:

  1. 核心调度策略不同

容量调度器: 优先选择资源利用率低的队列;
公平调度器:优先选择对资源缺额比例大的。

  1. 每个队列可以单独设置资源分配方式

容量调度器:FIFO、DRF(内存+CPU);
公平调度器:FIFO、FAIR、DRF。

2. 公平调度器–缺额

hadoop的调度器是 hadoop调度器及其工作方法_yarn_06

3. 公平调度器队列资源分配方式

  1. FIFO策略

公平调度器每个队列资源分配策略若是选择FIFO,相当于容量调度器;

  1. Fair策略

hadoop的调度器是 hadoop调度器及其工作方法_yarn_07

  1. DRF策略

上述说的资源都是单一标准,例如只考虑内存(Yarn默认情况)。但很多时候我们资源有很多种,例如内存、CPU、网络带宽等,这样就很难衡量两个应用应该分配的资源比例。

所以在Yarn中,我们使用DRF来决定如何调度:

DRF(Dominant Resource Fairness)主导资源公平调度算法,是一种通用的多资源最大-最小公平分配策略(Max-Min Fairness Strategy),核心思想是在多环境下一个用户的资源分配应该由用户的主导份额资源决定。用户所有份额中的最大值称为该用户的主导份额,与主导份额相对应的资源称为主导资源

假设集群一共有100 CPU和10T 内存,而应用A需要(2 CPU, 300GB),应用B需要(6 CPU,100GB)。 则两个应用分别需要A(2%CPU, 3%内存)和B(6%CPU, 1%内存)的资源,这就意味着A是内存主导的, B是 CPU主导的。

4. 公平调度器资源分配算法

  1. 队列资源分配:
  2. 作业资源分配: