前言: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实操干货!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐