Yarn三种调度器详解及默认调度器说明
摘要:本文深入解析Hadoop Yarn的三种核心调度器:FIFO调度器(简单但效率低)、容量调度器(默认配置,支持多队列资源隔离)和公平调度器(动态资源分配)。详细介绍了各调度器的工作原理、优缺点及适用场景,重点演示了如何修改默认调度器配置,包括yarn-site.xml参数设置和fair-scheduler.xml队列配置。通过对比表格清晰展示三者的区别,为企业级集群调度策略选择提供实用指导,
前言:Yarn作为Hadoop生态中的核心资源调度平台,负责为MapReduce、Spark、Flink等运算程序分配CPU、内存等服务器资源,其调度器的选择直接影响集群资源的利用率和任务执行效率。本文干货满满,新手友好,将详细介绍Yarn的三种调度器核心特性、适用场景,以及默认调度器的配置与修改方法,结合实操细节,帮助大家快速掌握Yarn调度器的核心知识点,轻松应对集群调度配置需求。
一、Yarn核心基础回顾
在了解调度器之前,先简单回顾Yarn的核心定位和工作流程,帮助大家建立整体认知:
-
Yarn核心定位:分布式资源调度器,相当于分布式操作系统平台,为上层运算程序(MR/spark/flink)提供资源支持。
-
Hadoop核心组成:hadoop = HDFS + MapReduce + Yarn,其中HDFS负责存储数据,MapReduce负责分布式计算,Yarn负责资源调度。
-
Yarn核心工作流程:客户端提交作业 → ResourceManager(RM)接收请求并调度 → NodeManager(NM)创建Container启动ApplicationMaster(AM) → AM申请资源并监控任务执行 → 任务完成后AM注销。
Yarn的核心调度能力,就体现在ResourceManager(RM)对任务的调度逻辑上,不同调度器对应不同的资源分配规则,下面我们逐一拆解三种核心调度器的细节。
二、Yarn的三种调度器详解
Yarn提供了三种核心任务调度策略,分别是FIFO Scheduler、Capacity Scheduler和Fair Scheduler,每种调度器有其独特的适用场景和工作逻辑,下面逐一拆解。
2.1 FIFO Scheduler(先进先出调度器)
这是最基础、最简单的调度器,核心逻辑就是“先来后到”,将所有提交的应用按照提交顺序排成一个单一队列,前一个任务执行完成后,后一个任务才能开始执行,无任何资源隔离机制。
核心特点:
-
无资源隔离,整个集群资源被队列中的任务依次占用;
-
优点:实现简单、无额外配置成本;
-
缺点:资源利用率极低,大任务会阻塞小任务。例如,一个占用100%资源的大任务执行4小时,后续提交的小任务只能等待4小时后才能执行;
-
适用场景:仅适用于单用户、任务量少、无并发需求的测试环境,企业生产环境中几乎不使用。

2.2 Capacity Scheduler(容量调度器)
容量调度器是Yarn的默认调度器,也是中小企业最常用的调度器,核心设计目标是支持多组织、多用户共享集群资源,通过队列划分实现资源隔离和固定容量分配,避免单个用户或任务耗尽集群资源。
核心特点:
-
多队列机制:为不同组织、不同业务分配专门的队列,每个队列分配固定的集群资源(如A队列占40%内存,B队列占60%内存);
-
队列嵌套:队列内部可垂直划分,满足同一组织内不同成员、不同任务的资源共享需求;
-
调度逻辑:队列内部采用FIFO策略,队列之间按分配的容量比例调度,空闲队列的资源可被其他队列临时借用(需配置最大容量限制);
-
适用场景:中小企业、多组织共享集群的场景,支持任务优先级配置、资源限制,能有效避免单个任务耗尽集群资源。

2.3 Fair Scheduler(公平调度器)
公平调度器的核心目标是“资源公平分配”,不遵循提交顺序,而是为所有运行中的应用动态分配公平的资源(公平性可通过参数灵活配置),适合任务并发量高、任务类型多样的大型集群。
核心特点:
-
动态资源分配:当集群中只有一个应用时,该应用占用全部集群资源;当有新应用提交时,已运行的应用会释放部分资源,最终所有应用公平共享资源;
-
多队列支持:可在多个队列间实现公平调度,每个队列可配置资源权重,权重越高,获得的资源越多;
-
优点:资源利用率高,适合多用户、多任务并发的场景,能避免小任务被大任务长期阻塞;
-
适用场景:大型企业、高并发任务集群,尤其是任务类型多样(有大任务、小任务)、对资源公平性要求高的场景。

三、Yarn默认调度器及修改方法
3.1 默认调度器
重点强调:Yarn的默认调度器是 Capacity Scheduler(容量调度器),其核心配置由`yarn-site.xml`文件中的`yarn.resourcemanager.scheduler.class`参数控制,默认配置如下(直接复制可用):
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
3.2 调度器修改方法(以切换为公平调度器为例)
实际生产中,若需根据集群规模和业务需求,将默认的容量调度器修改为公平调度器,需完成以下3步配置(基于Hadoop 3.x版本,实操可直接参考):
步骤1:修改yarn-site.xml配置
在`yarn-site.xml`中添加/修改以下参数,指定公平调度器,并配置其专属配置文件路径:
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
<name>yarn.scheduler.fair.allocation.file</name>
<value>/opt/installs/hadoop3.1.4/etc/hadoop/fair-scheduler.xml</value>
</property>
关键说明:`fair-scheduler.xml`是公平调度器的核心队列配置文件,需自行创建并根据实际业务配置队列资源、权重、调度策略等,配置错误会导致Yarn启动失败。
步骤2:配置fair-scheduler.xml
创建`fair-scheduler.xml`文件,以下是通用示例配置(可根据自身集群资源调整参数,直接复制可快速搭建基础配置):
<?xml version="1.0"?>
<allocations>
<!-- 单个队列中Application Master占用资源的最大比例,取值0-1 -->
<queueMaxAMShareDefault>0.5</queueMaxAMShareDefault>
<!-- 单个队列最大资源的默认值 -->
<queueMaxResourcesDefault>4096mb,4vcores</queueMaxResourcesDefault>
<!-- 自定义队列zs -->
<queue name="zs">
<minResources>2048mb,2vcores</minResources>
<maxResources>4096mb,4vcores</maxResources>
<maxRunningApps>4</maxRunningApps>
<maxAMShare>0.5</maxAMShare>
<weight>1.0</weight>
<schedulingPolicy>fair</schedulingPolicy>
</queue>
<!-- 任务队列分配策略 -->
<queuePlacementPolicy>
<rule name="specified" create="false"/>
<rule name="default" />
</queuePlacementPolicy>
</allocations>
步骤3:生效配置
1. 将修改后的`yarn-site.xml`和`fair-scheduler.xml`分发到集群所有节点;
2. 重启Yarn集群(或执行`yarn rmadmin -refreshQueues`刷新队列配置);
3. 提交任务时,可通过`-D mapreduce.job.queuename=队列名`指定队列,验证调度器是否生效(若未指定队列,将按`fair-scheduler.xml`中的队列分配策略执行)。
四、三种调度器对比总结
|
调度器类型 |
核心逻辑 |
优点 |
缺点 |
适用场景 |
|---|---|---|---|---|
|
FIFO Scheduler |
先进先出,无资源隔离 |
实现简单、无配置成本 |
资源利用率低,小任务被大任务阻塞 |
测试环境、单用户场景 |
|
Capacity Scheduler |
多队列、固定容量,队列内FIFO |
资源隔离、支持多组织共享,配置简单 |
资源分配不够灵活,队列空闲资源借用有限制 |
中小企业、多组织共享集群 |
|
Fair Scheduler |
动态公平分配资源,支持权重配置 |
资源利用率高,避免任务阻塞,灵活度高 |
配置复杂,需维护专属配置文件 |
大型企业、高并发任务集群 |
五、注意事项
-
生产环境中,优先选择容量调度器(默认)或公平调度器,严禁使用FIFO调度器,避免出现资源浪费和任务阻塞问题;
-
修改调度器配置后,必须重启Yarn集群或执行`yarn rmadmin -refreshQueues`刷新队列配置,否则配置无法生效;
-
公平调度器的`fair-scheduler.xml`文件路径必须配置正确,路径错误会直接导致Yarn集群启动失败;
-
多队列配置时,需根据业务优先级合理分配各队列资源容量,避免单个队列占用过多资源,影响其他队列正常运行。
结语:掌握Yarn三种调度器的特点和适用场景,是做好Hadoop集群资源管理的基础。实际应用中,可根据集群规模、用户数量、任务类型,选择合适的调度器,或通过多队列配置实现更精细的资源管理,提升集群运行效率。如果觉得本文有用,欢迎点赞收藏,后续会持续更新Hadoop实操干货!
更多推荐


所有评论(0)