Yarn的三种资源调度器

      主要有三种:FIFO,Capacity Scheduler(容量调度器)和Fair Scheduler(公平调度器)。

      Hadoop2.7.2默认的资源调度器是Capacity Scheduler。

1、FIFO Scheduler

 将所有的Applications放到队列中,先按照作业的优先级高低、再按照到达时间的先后,为每个app分配资源。如果第一个app需要的资源被满足了,如果还剩下了资源并且满足第二个app需要的资源,那么就为第二个app分配资源,and so on。

优点:简单,不需要配置。

缺点:不适合共享集群。如果有大的app需要很多资源,那么其他app可能会一直等待。

例子:

        上图的示例:有一个很大的job1,它先提交,并且占据了全部的资源。那么job2提交时发现没有资源了,则job2必须等待job1执行结束,才能获得资源执行。

配置 : FIFO Scheduler不需要配置

 

2、Capacity Scheduler

CapacityScheduler用于一个集群(集群被多个组织共享)中运行多个Application的情况,目标是最大化吞吐量和集群利用率。

CapacityScheduler允许将整个集群的资源分成多个部分,每个组织使用其中的一部分,即每个组织有一个专门的队列,每个组织的队列还可以进一步划分成层次结构(Hierarchical Queues),从而允许组织内部的不同用户组的使用。
每个队列内部,按照FIFO的方式调度Applications。当某个队列的资源空闲时,可以将它的剩余资源共享给其他队列。

图示:

配置:

   1)要将ResourceManager配置为使用CapacityScheduler,请在conf / yarn-site.xml中设置以下属性:

yarn.resourcemanager.scheduler.classorg.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler

 2)修改CapacityScheduler的配置文件etc/hadoop/capacity-scheduler.xml

    说明:root队列下面有两个队列,分别为prod(40%的容量,即使用40%的集群资源)和dev(60%的容量,最大的75%  ->  说明即使prod队列空闲了,那么dev最多只能使用75%的集群资源。这样就可以保证prod中添加新的apps时马上可以使用25%的资源)。

    除了队列的容量和层次,还可以指定单个用户或者应用被分配的资源大小、同时可以运行的app数量、队列的ACLs。

    可以指定app要放在哪个队列中。如果不指定,app将会被放在名字是 default的队列中。

    CapacityScheduler的队列名字必须是层次结构最后的名字,比如eng。不能是root.dev.eng或者dev.eng。

 

3、Fair Scheduler 

FairScheduler允许应用在一个集群中公平地共享资源。默认情况下FairScheduler的公平调度只基于内存,也可以配置成基于memory and CPU。当集群中只有一个app时,它独占集群资源。当有新的app提交时,空闲的资源被新的app使用,这样最终每个app就会得到大约相同的资源。可以为不同的app设置优先级,决定每个app占用的资源百分比。FairScheduler可以让短的作业在合理的时间内完成,而不必一直等待长作业的完成。

Fair Sharing: Scheduler将apps组织成queues,将资源在这些queues之间公平分配。默认情况下,所有的apps都加入到名字为“default“的队列中。app也可以指定要加入哪个队列中。队列内部的默认调度策略是基于内存的共享策略,也可以配置成FIFO和multi-resource with Dominant Resource Fairness

Minimum Sharing:FairScheduller提供公平共享,还允许指定minimum shares to queues,从而保证所有的用户以及Apps都能得到足够的资源。如果有的app用不了指定的minimum的资源,那么可以将超出的资源分给别的app使用。

FairScheduler默认让所有的apps都运行,但是也可以通过配置文件小智每个用户以及每个queue运行的apps的数量。这是针对一个用户一次提交hundreds of apps产生大量中间结果数据或者大量的context-switching的情况。

   

 

配置:

使用FairScheduler需要修改yarn-size.xml文件,创建allocation file,列出存在的队列和各自的 weights and capacities

prod和dev的权重也可以设置成2和3。

dev下的两个sub-queue没有指定权重,则为1:1。

在设置权重时,需要考虑default queue和用户命名的queue的权重,这些没有在xml文件中指定,但是它们的权重都是1.

队列还可以被配置minimum maximum Resources以及可以运行的最大的apps的数量

FairScheduler支持preemption(抢占),当queue占用的资源大于它应得的,那么调度器可以杀掉queue对应的containers,将yarn.scheduler.fair.preemption设置成true即可。

 

### Yarn三种调度器及其工作原理 #### 1. FIFO Scheduler (先进先出调度器) FIFO Scheduler 是一种简单的调度策略,按照作业提交的时间顺序依次处理请求。它会将所有的应用程序放入一个队列中,并严格按照先进先出的原则进行资源分配[^2]。这意味着最早提交的应用程序会最先得到资源并运行完毕后释放资源供后续任务使用。 然而,这种调度方式存在明显的局限性——当有大型应用占据整个集群资源时,其他小型应用可能会长时间处于等待状态而无法执行,从而造成严重的阻塞现象[^3]。因此,尽管其逻辑清晰易懂且无需额外配置,但在高负载或多租户环境下的表现较差[^4]。 #### 2. Capacity Scheduler (容量调度器) Capacity Scheduler 设计用于支持多组织共享同一 Hadoop 集群场景下不同部门间公平竞争计算能力的需求。通过预先划分多个独立子队列(Queue),每个 Queue 可以设置最大可用比例以及预留最小保障份额等参数来确保即使某些特定时刻某个组别拥有较多活动任务也不会完全剥夺剩余用户的使用权限[^1]。 此外,该机制还具备弹性扩展特性:如果当前某分区未满载,则临时闲置部分可以借给其他急需更多算力的方向直到原主人重新需要为止;一旦后者恢复活跃状态便会迅速回收借用出去的配额回到初始设定范围内运作[^5]。 #### 3. Fair Scheduler (公平调度器) Fair Scheduler 致力于达成全局意义上的均衡效果,即让所有正在运行中的进程都能平均分享到大致相等数量级别的物理硬件设施比如 CPU 核心数或者内存大小等等。具体来说就是每当新加入一项新的计算指令进来之后都会动态调整现有已存在的那些实例所占有的实际数值直至达到理想目标位置附近停止进一步变动操作流程结束为止[^3]。 值得注意的是,默认情况下 Fair Scheduer 并不会立即终止已经启动很久的大规模项目以便腾挪空间出来供给后来者快速响应短平快型别的轻量级查询请求完成使命再退出去减少延迟成本开支情况发生几率提升整体效率水平层次高度有所改善进步成果显著可见一斑[^4]。 ```python # 示例代码展示如何在YARN中启用不同的调度器 # 修改yarn-site.xml文件中的scheduler属性即可切换使用的调度算法类型 <property> <name>yarn.resourcemanager.scheduler.class</name> <!-- 启用FIFO调度 --> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler</value> <!-- 或者启用Capacity调度 --> <!-- <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value> --> <!-- 或者启用Fair调度 --> <!-- <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value> --> </property> ``` ### 总结对比 | 特性/调度器 | FIFO Scheduler | Capacity Scheduler | Fair Scheduler | |-------------|------------------------------------|----------------------------------|--------------------------------| | **适用场景** | 小规模、单用户 | 多团队共享 | 动态平衡 | | **复杂程度** | 简单 | 中等 | 较复杂 | | **资源配置** | 单队列 | 多队列隔离 | 自动均分 | | **优缺点** | 易实现但容易引起饥饿 | 支持多层次管理但配置较繁琐 | 实现灵活但需监控性能开销较大 |
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值