Yarn资源调度器之调度器和调度算法
Yarn 调度器和调度算法
目前,Hadoop 作业调度器主要有三种:FIFO、容量(Capacity)和公平(Fair Scheduler)。
Apache Hadoop3.1.3 默认的资源调度器是 Capacity Scheduler
CDH 框架默认调度器是 Fair Scheduler
具体设置详见yarn-default.xml
<property>
<description>The class to use as the resource scheduler.</description>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
先进先出调度器(FIFO)
FIFO 调度器(First In First Out):单队列,根据提交作业的先后顺序,先来先服务。

优点:简单易懂
缺点:不支持多队列,生产环境很少使用
容量调度器(Capacity Scheduler)
Capacity Scheduler 是 Yahoo 开发的多用户调度器

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

队列资源分配:从 root 开始,使用深度优先算法,优先选择资源占用率最低的队列分配资源
作业资源分配:默认按照提交作业的优先级和提交时间顺序分配资源
容器资源分配:按照容器的优先级分配资源
如果优先级相同,按照数据本地行原则
任务和数据在同一节点 任务和数据在同一机架 任务和数据不在同一节点也不再同一机架
公平调度器(Fair Scheduler)
Fair Schedule 是 Facebook 开发的多用户调度器

与容量调度器相同点
多队列:支持多队列多作业 容量保证:管理员可为每个队列设置资源最低保证和资源使用上线 灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列 多租户:支持多用户共享集群和多应用程序同时运行;为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定 与容量调度器不同点
核心调度策略不同
容量调度器:优先选择资源利用率低的队列
公平调度器:优先选择对资源的缺额比例大的
每个队列可以设置单独资源方式
容量调度器:FIFO、DRF
公平调度器:FIFO、FAIR、DRF

缺额:某一时刻一个作业应获资源和实际获取资源的差距叫“缺额”
调度器会为缺额大的作业分配资源

FIFO 策略:公平调度器每个队列分配策略如果选择 FIFO 的话,此时公平调度器相当于上面讲过的容量调度器
Fair 策略:默认,是一种基于最大最小公平算法实现的资源多路复用方式,默认情况下,每个队列内部采用该方式分配资源。这意味着,如果一个队列中有两个应用程序同时运行,则每个应用程序可得到 1/2 的资源;如果三个程序同时运行,则每个应用程序可得到 1/3 的资源。
具体资源分配流程和容量调度器一致:
选择队列 选择作业 选择容器 以上三步,每一步都是按照公平策略分配资源
实际最小资源份额:mindshare = Min (资源需求量,配置的最小资源) 是否饥饿:isNeedy = 资源使用量 < mindshare (实际最小资源份额) 资源分配比:minShareRatio = 资源使用量 / Max (mindshare,1) 资源使用权重比:useToWeightRatio = 资源使用量 / 权重



DRF 策略
DRF(Dominant Resource Fairness),我们之前说的资源,都是单一标准,例如只考虑内存(也是 Yarn 默认的情况)。但是很多时候我们资源有很多种,例如内存,CPU,网络带宽等,这样我们很难衡量两个应用分配的资源比例。
那么在 Yarn 中,我们用 DRF 来决定如何调度:
假设集群一共有 100CPU 和 10T 内存,那么应用 A 需要(2 CPU,300GB),应用 B 需要(6 CPU,100 GB)。则两个应用分别需要 A(2%CPU,3%内存)和 B(6%CPU,1%内存)的资源,这就意味着 A 是内存主导的,B 是 CPU 主导的,针对这种情况,我们可以选择 DRF 策略对不同的应用进行不同资源(CPU 和内存)的一个不同比例的限制。

浙公网安备 33010602011771号