5.5 YARN的调度器

第5章 YARN:资源调度平台

5.5 YARN的调度器

打个比方,Hadoop相当于一台虚拟计算机(由多台计算机构造的集群),那么HDFS就是这台虚拟计算机的文件系统,管理磁盘资源;而YARN负责管理虚拟计算机的CPU和内存资源。在YARN上跑的MapReduce程序(比如5.4节跑的PI和wordcount两个应用程序)就是在这台虚拟计算机跑的应用程序,需要磁盘、内存和CPU等资源。

所以,我们可以这样认为:HDFS+YARN=Cluster OS(集群操作系统)

Yarn的资源调度目前支持内存和CPU两种资源。Yarn支持三种调度方式:FIFO、FAIR和DRF分别是指先来先服务、公平调度和主资源公平调度。

5.5.1 FIFO调度器

FIFO(First in first out):先按照优先级高低调度,如果优先级相同,则按照提交时间先后顺序调度,如果提交时间相同,则按照(队列或者应用程序)名称大小(字符串比较)调度;不支持有子队列的情况。 
在进行资源分配的时候,先给队列中最头上的应用进行分配资源,待最头上的应用需求满足后再给下一个分配,以此类推。 
FIFO Scheduler是最简单也是最容易理解的调度器,也不需要任何配置,但它并不适用于共享集群。 
这里写图片描述 
从图中可以看出,在FIFO 调度器中,小任务会被大任务阻塞。大的应用可能会占用所有集群资源,这就导致其它应用被阻塞。在共享集群中,更适合采用Capacity Scheduler或Fair Scheduler,这两个调度器都允许大任务和小任务在提交的同时获得一定的系统资源。

单队列组织方式:FIFO Scheduler 
将所有的应用程序放到一个队列中。 
局限性明显:资源利用率低,无法交叉运行作业。不够灵活,比如紧急的作业无法插队。

5.5.2 Fair调度器

FAIR:按照内存资源使用量比率调度,即按照used_memory/minShare大小调度(核心思想是按照该调度算法决定调度顺序,但还需考虑一些边界情况);

在Fair调度器中,我们不需要预先占用一定的系统资源,Fair调度器会为所有运行的job动态的调整系统资源。如下图所示,当第一个大job提交时,只有这一个job在运行,此时它获得了所有集群资源;当第二个小任务提交后,Fair调度器会分配一半资源给这个小任务,让这两个任务公平的共享集群资源。

需要注意的是,在下图Fair调度器中,从第二个任务提交到获得资源会有一定的延迟,因为它需要等待第一个任务释放占用的Container。小任务执行完成之后也会释放自己占用的资源,大任务又获得了全部的系统资源。最终的效果就是Fair调度器即得到了高的资源利用率又能保证小任务及时完成。 
这里写图片描述

注意,CDH默认使用的是公平调度器。

5.5.3 Capacity调度器

对于Capacity调度器,有一个专门的队列用来运行小任务,但是为小任务专门设置一个队列会预先占用一定的集群资源,这就导致大任务的执行时间会落后于使用FIFO调度器时的时间。

这里写图片描述

Apache Hadoop Yarn默认使用Capacity调度器,可以直接通过YARN 的web页面查看当前启用的调度器。 
这里写图片描述

灰常灰常感谢原博主的辛苦工作,为防止删博,所以转载,只供学习使用,不做其他任何商业用途。 https://blog.youkuaiyun.com/chengyuqiang/article/details/72669812
### YARN调度器类型及选择策略 YARN(Yet Another Resource Negotiator)是Hadoop生态系统中的资源管理框架,负责集群资源的分配和任务调度。YARN支持多种调度器类型,每种调度器适用于不同的使用场景和需求。 #### 1. FIFO Scheduler(先进先出调度器) FIFO Scheduler是一种简单的调度器,按照作业提交的时间顺序依次执行任务。它将所有任务放入一个队列中,并优先处理最早提交的任务[^1]。 - **适用场景**:适合对任务延迟不敏感、任务提交频率较低的环境。 - **优点**:实现简单,易于理解和维护。 - **缺点**:可能导致资源被大型任务长期占用,小型任务无法及时完成。 ```python # 配置FIFO调度器 yarn.scheduler.class=org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler ``` #### 2. Capacity Scheduler(容量调度器) Capacity Scheduler是一种多队列调度器,允许不同队列之间共享集群资源,同时保证每个队列的最小资源配额[^2]。 - **适用场景**:适合多租户环境,能够满足不同用户或团队对资源的需求。 - **优点**: - 支持多队列配置,资源隔离性好。 - 提供弹性资源分配,未使用的资源可以临时分配给其他队列。 - **缺点**:配置复杂,需要根据业务需求精细调整队列参数。 ```xml <!-- 配置Capacity调度器 --> <property> <name>yarn.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value> </property> ``` #### 3. Fair Scheduler(公平调度器) Fair Scheduler通过动态调整任务的资源分配,确保所有任务在长时间内获得几乎相同的资源。默认情况下,Fair Scheduler仅对内存资源进行公平分配,但可以通过配置扩展到CPU等其他资源。 - **适用场景**:适合需要平衡多个任务资源使用的情况,尤其是中小型任务较多的场景。 - **优点**: - 动态资源分配,避免资源浪费。 - 支持DRF(Dominant Resource Fairness)策略,适用于多维度资源调度。 - **缺点**:在极端情况下,可能会影响大任务的性能。 ```xml <!-- 配置Fair调度器 --> <property> <name>yarn.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value> </property> ``` #### 4. DRF(Dominant Resource Fairness) DRF是一种资源调度策略,用于处理多维度资源(如CPU、内存、网络带宽等)的公平分配问题[^1]。例如,在一个集群中,如果应用A需要更多内存而应用B需要更多CPU,则DRF会根据主导资源的比例进行调度。 - **适用场景**:适合资源需求多样化的场景,能够更合理地利用集群资源。 - **优点**:提高了资源利用率,避免单一资源维度导致的不公平问题。 - **缺点**:实现复杂度较高,需要精确计算每个任务的主导资源。 ```python # 配置DRF策略 yarn.scheduler.fair.drf=true ``` ### 总结 YARN提供了多种调度器以适应不同的使用场景。FIFO Scheduler适用于简单场景;Capacity Scheduler适合多租户环境;Fair Scheduler则适合需要动态资源平衡的场景;而DRF策略进一步优化了多维度资源的公平分配。选择合适的调度器需要结合实际业务需求和集群资源特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值