hadoop(十一)hadoop组件之Yarn-Yarn调度器和调度算法说明
yarn 调度器和调度算法
hadoop 的三种调度器
FIFO、容量(Capacity Scheduler)和公平(Fair Scheduler)
默认的调度器是容量调度器。
FIFO
先进先出策略的任务调度器。

根据队列顺序进行执行的策略,如果前一个队列的任务还没执行,后一个一定不能执行。
此策略用的比较少。不适合生产环境使用。
Capacity Scheduler 容量调度器 (默认)

主要特点:
- 支持多个队列,每个单独的队列遵循FIFO的原则。
- 可以为每个队列设置最小资源保证和资源使用上限
- 灵活性,如果一个队列中的资源有剩余可以临时将资源借给其他的资源,但是如果队列有新的任务提交需要资源的时候,其他的队列借用的资源要立即归还
- 多租户 支持多用户共享集群和多应用程序同时执行
可以为同一个用户提交的资源进行限制,防止资源都偏移到同一个用户的提交的任务上
资源分配算法

有任务提交的时候。
- 首先选择队列,选择资源占用率低的队列。
- 作业的资源分配,安装提交的优先级和提交时间顺序分配
- 容器资源的分配,优先选择数据比较近的原则。 尽量数据和任务在同一个节点
Fair Scheduler 公平调度器

此调度器主要为了让每个任务都能尽量获取到公平大小的资源。
主要特点:
- 支持多个队列,每个单独的队列遵循FIFO的原则。
- 可以为每个队列设置最小资源保证和资源使用上限
- 灵活性,如果一个队列中的资源有剩余可以临时将资源借给其他的资源,但是如果队列有新的任务提交需要资源的时候,其他的队列借用的资源要立即归还
- 多租户 支持多用户共享集群和多应用程序同时执行
可以为同一个用户提交的资源进行限制,防止资源都偏移到同一个用户的提交的任务上
具有容量调度器的同样特点外还有
调度策略不同
容量调度器优先选择资源利用率低的,而公平调度器优先选择资源缺额大的。(资源缺额是 应该分配的资源和实际得到的资源的差值)队列可以设置的资源分配方式
容量 : FiFO DRF
公平 : FIFO DRF FAIR
缺额: 某一个时刻作业实际获得的资源和应该获得的资源的差值叫做缺额。(表示差多少的意思)
队列资源分配方式
公平调度器可以选择FIFO 或 Fair策略。
如果选择的是FIFO,那么就是一个一个的分配资源。
如果选择的是Fair策略(默认策略)。
Fair策略是一种基于最大最小公平的算法实现的资源多路复用方式。如果一个队列中有2个应用程序同时运行,则每个程序获取1/2资源。
实际最小资源配额: minshare = Min (资源需求量,配置的最小资源) 如果资源需求量 小于 配置的最小,那么资源的最小配额就是需求量。
是否饥饿 : isNeed = 资源需求量 < 配置的最小资源 ; 资源需求量 小于 配置的最小资源 ,那么分配的资源就会不够,就是饥饿状态。
资源分配比: 资源使用量 / Max(minshare , 1); 资源的使用量 除以 实际的最小配额
资源使用权比重: useToWeightRatio = 资源使用量 / 权重。 (当使用权重分配的时候计算此值)
资源分配算法
公平资源算法使用多次计算的方式。也可以理解为多了就重新再分配。
比如集群中总资源数是 100
A队列 需求 20
B队列 需求 50
C队列 需求 30
第一次分配: 全部平均分
A队列 需求 20 分到 33.33 –> 多出 13.33
B队列 需求 50 分到 33.33 –> 差额 16.67
C队列 需求 30 分到 33.33 –> 多出 3.33
第二次分配将多的再算平均值,分给有差额的
多出的一共是 13.33 + 3.33 = 16.66
一个有差额的队列平均分配到位 16.6 / 1 = 16.6
所以最终结果是
A队列 需求 20 分到 33.3 第二次减去13.33 实际 20
B队列 需求 50 分到 33.3 第二次分到 16.66 实际 50
C队列 需求 30 分到 33.3 第二次减去 3.33 实际 30
最终3个 队列都分到需要的资源。
如果还有多出的资源,再次分配给有差额的作业或队列。
作业资源分配算法
不加权分配
不加权进行计算的时候,以job需要的资源的数量来进行分配。
加权重进行分配
加权的时候,使用权重值来计算。
和不加权的区别是在比较的时候用真实的需求的额数量,而分配的时候使用执行的权重数量进行分配。
DRF 策略
DRF(Dominant Resource Fainess),之前的策略都是单一的标准,比如内存,CPU等。
而DRF策略可以综合多种参数,比如CPU + 内存 CPU + 带宽等。


