yarn-site.xml
yarn-site.xml是YARN(Yet Another Resource Negotiator,另一种资源协调者)框架的核心配置文件,它定义了整个YARN集群的运行参数和行为。类似于操作系统的"注册表"或"系统设置".
主要作用:
- 配置ResourceManager和NodeManager:ResourceManger的地址和端口、NodeManger的行为方式
- 定义资源管理策略:内存、CPU的分配方式;资源计算器类型
- 指定调度器类型:告诉YARN用哪种调度器来分配资源
如果不指定调度器,YARN会使用默认的调度器(通常是容量调度器的简化版)
YARN启动时需要决定调度器类:
bash
// YARN 启动时读取这个参数
String schedulerClass = conf.get("yarn.resourcemanager.scheduler.class");
// 如果没有配置,使用默认值
if (schedulerClass == null) {
schedulerClass = "org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler";
}
不同的调度器有不同的配置方式:
- 容量调度器:用capacity-schedular.xml
- 公平调度器:用fair-schedular.xml
为了让你更清晰理解,这里是 Hadoop 各配置文件的作用:
| 配置文件 | 作用 | 配置内容示例 |
|---|---|---|
| core-site.xml | Hadoop 核心配置(HDFS、I/O等) | 默认文件系统地址 (fs.defaultFS) |
| hdfs-site.xml | HDFS 分布式文件系统配置 | 副本数、NameNode 数据目录 |
| yarn-site.xml | YARN 资源管理配置 | 调度器类型、ResourceManager地址 |
| mapred-site.xml | MapReduce 计算框架配置 | 历史服务器地址、Map/Reduce 参数 |
| capacity-scheduler.xml | 容量调度器专用配置 | 队列结构、容量比例 |
bash
[root@master ~]# cd /opt
[root@master opt]# ls
hadoop-3.1.4 jdk-8u281-linux-x64.rpm
[root@master opt]# cd hadoop-3.1.4
[root@master hadoop-3.1.4]# ls
bin etc include lib libexec LICENSE.txt logs NOTICE.txt README.txt sbin share
[root@master hadoop-3.1.4]# cd logs
[root@master logs]# ls
hadoop-root-historyserver-master.log hadoop-root-namenode-master.out hadoop-root-resourcemanager-master.out.1 hadoop-root-secondarynamenode-master.out.2
hadoop-root-historyserver-master.out hadoop-root-namenode-master.out.1 hadoop-root-resourcemanager-master.out.2 hadoop-root-secondarynamenode-master.out.3
hadoop-root-historyserver-master.out.1 hadoop-root-namenode-master.out.2 hadoop-root-resourcemanager-master.out.3 hadoop-root-secondarynamenode-master.out.4
hadoop-root-historyserver-master.out.2 hadoop-root-namenode-master.out.3 hadoop-root-resourcemanager-master.out.4 hadoop-root-secondarynamenode-master.out.5
hadoop-root-historyserver-master.out.3 hadoop-root-namenode-master.out.4 hadoop-root-resourcemanager-master.out.5 SecurityAuth-root.audit
hadoop-root-historyserver-master.out.4 hadoop-root-namenode-master.out.5 hadoop-root-secondarynamenode-master.log
hadoop-root-historyserver-master.out.5 hadoop-root-resourcemanager-master.log hadoop-root-secondarynamenode-master.out
hadoop-root-namenode-master.log hadoop-root-resourcemanager-master.out hadoop-root-secondarynamenode-master.out.1
[root@master logs]# grep "Using Scheduler" hadoop-root-resourcemanager-master.log
2026-04-18 02:27:22,305 INFO org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: Using Scheduler: org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
2026-04-19 12:50:20,359 INFO org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: Using Scheduler: org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
2026-04-22 23:56:03,577 INFO org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: Using Scheduler: org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
2026-04-23 08:12:18,125 INFO org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: Using Scheduler: org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
2026-04-23 23:26:04,056 INFO org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: Using Scheduler: org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
2026-04-25 00:49:39,206 INFO org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: Using Scheduler: org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
2026-04-25 10:34:29,641 INFO org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: Using Scheduler: org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
2026-04-25 13:28:10,180 INFO org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: Using Scheduler: org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
2026-04-26 22:46:59,336 INFO org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: Using Scheduler: org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
2026-04-29 00:19:30,250 INFO org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: Using Scheduler: org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
[root@master logs]# yarn queue -status root # 查看所有队列
2026-04-29 00:59:18,210 INFO client.RMProxy: Connecting to ResourceManager at master/192.168.128.130:8032
Queue Information :
Queue Name : root
State : RUNNING
Capacity : 100.00%
Current Capacity : .00%
Maximum Capacity : 100.00%
Default Node Label expression : <DEFAULT_PARTITION>
Accessible Node Labels : *
Preemption : disabled
Intra-queue Preemption : disabled
[root@master logs]#
1. 日志输出(grep命令)含义
-
✅ 容量调度器已启用 :
Using Scheduler: CapacityScheduler -
✅ 配置文件已加载 :找到了
capacity-scheduler.xml -
✅ 资源限制已生效:
-
最小资源:512MB内存 + 1虚拟CPU核
-
最大资源:4096MB内存 + 4虚拟CPU核
-
-
✅ 当前只有root队列 :日志显示只初始化了
root和root.default队列,没有online和offline队列
2. yarn queue -status root 输出含义
-
Queue Name: root - 这是根队列(所有队列的顶层)
-
State: RUNNING - 队列处于运行状态,可以接收任务
-
Capacity: 100.00% - root队列占用集群100%资源(正常,因为它是顶层)
-
Current Capacity: .00% - 当前实际使用的资源为0%(没有运行的任务)
-
Maximum Capacity: 100% - 最大可用资源为100%
-
Preemption: disabled - 未启用资源抢占功能(队列不会强制收回已分配的资源)
🎯 核心结论
你的YARN正在运行,容量调度器已生效,但目前只有默认的 default 队列,还没有配置 online 和 offline 多队列。
这就是为什么之前看不到多队列的原因 - 配置文件中还没有添加它们。
YARN的三种调度器
YARN的三种调度器主要负责资源分配,决定集群繁忙时如何为不同任务划分计算和内存资源。
1.FIFO调度器(先进先出)
作用:作业按提交顺序依次执行,只有当前一个任务完成后,下一个才能开始
特点:实现简单,但容易出现队头堵塞。且无法利用集群并行环境,不适合共享环境。
- 容量调度器
作用:将资源分给多个独立的队列。每个队列分配固定比例的资源(如60%。40%),队列内部再按FIFO或者其他规则分配
特点:保证资源容量。队列间相互间隔,能保证核心业务
3.公平调度器
YARN的容量调度器设置多个队列的原因:
1.隔离资源,避免"任务争抢"
这是最直接的原因。确保即使某个队列出现问题,也不会影响到其他队列
- 坏的情况(无队列):数据仓库团队提交了一个有bug的SQL,耗尽了集群所有资源。此时算法团队想训练一个紧急模型,只能干瞪眼排队
- 好的情况(有队列):提前分号,数据仓库团队最多只能用60%的资源。就算它的任务挂掉,也只是在这60%里折腾。算法团队依然有40%的资源可以立即使用
2.保障核心业务,即"服务等级协议"
不同任务的重要性不一样,需要给关键任务留"专座"(即不同任务有不同的优先级)
- 场景:每天早上的核心营收报表(优先级高)和下午数据科学家实验性分析(优先级低)
- 队列设计:把核心报表放到高优先级队列(如保障50%资源),实验性分析放到低优先级队列(保障10%资源,但弹性可用到80%)
- 即使低优先级的队列跑着再多的任务,也必须给高优先级队列留出50%的资源,保障每天早上报表准时算完,不耽误CEO看数据
3.公平调度,避免用户独占
防止一个用户或一个任务把整个集群的资源都吃光
4.提升集群的"总体利用率"
咋看多个队列就像分车道,貌似是浪费空间,但长远看,这反而能更高效地利用碎片资源。
- 无队列时:一个大任务(例如需要80%的资源)卡在那(因为任务就是按照FIFO先进先出的方式来执行的,当前任务没有执行完,后面的任务就不会被执行),剩下20%的资源太小,别的任务用不上。集群整体利用率只有80%
- 有队列时:可以专门配置一个跑短小任务的队列(资源保障10%,但最多可以用到50%),当大任务占了80%的资源时,小任务可以立即用起那剩下的20%。一旦小任务队列要超过20%,但如果大任务需要了,小任务队列会归还资源(弹性)。最终集群可能保持95%的利用率
场景设定
-
集群总资源:100GB
-
提交任务顺序:
-
Job A (大任务):需要 80GB,运行 2 小时
-
Job B (小任务):需要 20GB,运行 10 分钟
-
Job C (小任务):需要 20GB,运行 10 分钟
-
无队列时(FIFO调度器)的执行过程
bash
时间轴:
00:00 - Job A 提交,检查资源:空闲100GB,满足80GB → 启动 Job A,占用80GB
剩余20GB空闲,但无人可用(因为Job B在排队)
00:05 - Job B 提交,检查资源:Job A正在用80GB,剩余20GB刚好够Job B?
❌ 不能启动!FIFO规则:Job B必须等Job A完全结束才能开始
→ Job B进入排队队列
00:10 - Job C 提交,同样排队在Job B后面
... 2小时后 ...
02:00 - Job A 完成,释放80GB资源
02:00 - Job B 开始运行,占用20GB,10分钟后完成
02:10 - Job C 开始运行,10分钟后完成
关键点 :虽然有20GB资源一直空闲,但FIFO调度器不会 让Job B"插队"运行。它必须严格遵守任务提交顺序,不管任务大小。
从00:00到02:00这两个小时内:
-
总资源容量:100GB × 2小时 = 200 GB·小时
-
实际使用:80GB × 2小时 = 160 GB·小时
-
利用率 = 160/200 = 80%
那20GB资源在这2小时内完全空闲,但因为FIFO规则,它们无法被利用。
有队列时:
假设配置是:
bash
队列1(大任务队列):保障80%,最多100%
队列2(小任务队列):保障10%,最多50%(其余40%弹性共享)
bash
00:00 - Job A 提交到队列1,用满80GB(刚好达到保障值),剩余20GB空闲
00:05 - Job B 提交到队列2
调度器检查:队列2保障10GB(空闲),集群还剩20GB空闲
→ 立刻启动Job B,占用20GB(虽然超过保障10GB,但有空闲资源可用)
00:10 - Job C 提交到队列2
调度器检查:队列2已用20GB(达到最大容量50%的一半)
集群还剩0GB空闲(队列1用80,队列2用20)
→ Job C等待队列2释放资源
00:15 - Job B 完成(实际只需10分钟),释放20GB
→ 调度器立即启动Job C,占用20GB
00:25 - Job C 完成
02:00 - Job A 完成
YARN配置多个队列的容器调度器
bash
[root@master ~]# cd /opt/hadoop-3.1.4/etc/hadoop/
[root@master hadoop]# ls
capacity-scheduler.xml hadoop-env.sh httpfs-env.sh kms-env.sh mapred-env.sh ssl-server.xml.example yarnservice-log4j.properties
configuration.xsl hadoop-metrics2.properties httpfs-log4j.properties kms-log4j.properties mapred-queues.xml.template user_ec_policies.xml.template yarn-site.xml
container-executor.cfg hadoop-policy.xml httpfs-signature.secret kms-site.xml mapred-site.xml workers
core-site.xml hadoop-user-functions.sh.example httpfs-site.xml log4j.properties shellprofile.d yarn-env.cmd
hadoop-env.cmd hdfs-site.xml kms-acls.xml mapred-env.cmd ssl-client.xml.example yarn-env.sh
[root@master hadoop]# cat yarn-site.xml
在yarn-site.xml中的末尾(</configuration>前)添加下列内容:作用是添加调度器配置
bash
<!-- 容量调度器配置 2026/4/30 -->
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
<property>
<name>yarn.scheduler.capacity.resource-calculator</name>
<value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value>
</property>
之后刷新队列配置:
bash
yarn rmadmin -refreshQueues
bash
yarn queue -status root #查看所有队列
bash
[root@master hadoop]# yarn queue -status root
2026-04-30 15:00:54,895 INFO client.RMProxy: Connecting to ResourceManager at master/192.168.128.130:8032
Queue Information :
Queue Name : root
State : RUNNING
Capacity : 100.00%
Current Capacity : .00%
Maximum Capacity : 100.00%
Default Node Label expression : <DEFAULT_PARTITION>
Accessible Node Labels : *
Preemption : disabled
Intra-queue Preemption : disabled
yarn queue -status root 输出含义
-
Queue Name: root - 这是根队列(所有队列的顶层)
-
State: RUNNING - 队列处于运行状态,可以接收任务
-
Capacity: 100.00% - root队列占用集群100%资源(正常,因为它是顶层)
-
Current Capacity: .00% - 当前实际使用的资源为0%(没有运行的任务)
-
Maximum Capacity: 100% - 最大可用资源为100%
-
Preemption: disabled - 未启用资源抢占功能(队列不会强制收回已分配的资源)
这表明:
你的YARN正在运行,容量调度器已生效,但目前只有默认的 default 队列,还没有配置 online 和 offline 多队列
接下来:编辑capacity-scheduler.xml
原始:
bash
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>default</value>
<description>
The queues at the this level (root is the root queue).
</description>
</property>
<property>
<name>yarn.scheduler.capacity.root.default.capacity</name>
<value>100</value>
<description>Default queue target capacity.</description>
</property>
修改后:
bash
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<!--修改队列名称,即新加online、offline队列 2026/04/30 -->
<!-- 注意注释的格式,一开始我就是只打了一对尖括号,自然就会出错-->
<value>online,offline,default</value>
<description>
The queues at the this level (root is the root queue).
</description>
</property>
<property>
<name>yarn.scheduler.capacity.root.default.capacity</name>
<!-- 修改default队列为0,原先容量为100 2026/04/30 -->
<value>0</value>
<description>Default queue target capacity.</description>
</property>
注:将 default 队列的容量从 100 改为 0(因为资源已经分配给 online 和 offline)
然后在在 </configuration> 之前(文件末尾),添加以下内容,作用是增加新队列配置:
bash
<!-- online 队列配置 2026/04/30 -->
<property>
<name>yarn.scheduler.capacity.root.online.capacity</name>
<value>60</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.online.maximum-capacity</name>
<value>80</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.online.state</name>
<value>RUNNING</value>
</property>
<!-- offline 队列配置 2026/04/30-->
<property>
<name>yarn.scheduler.capacity.root.offline.capacity</name>
<value>40</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.offline.maximum-capacity</name>
<value>80</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.offline.state</name>
<value>RUNNING</value>
</property>
其中:
online 和 offline 是你自己命名的队列名称,用来区分不同类型的任务
online 队列(在线队列)
-
用途 :用于需要快速响应、实时处理的任务
-
特点:
-
优先级高,需要快速得到资源
-
任务通常比较小,执行时间短
-
例如:实时查询、交互式分析、在线服务
-
-
资源分配:你配置了 60% 的资源
offline 队列(离线队列)
-
用途 :用于后台批处理、耗时较长的任务
-
特点:
-
优先级相对较低
-
任务规模大,执行时间长
-
例如:ETL数据处理、夜间报表生成、大规模计算
-
-
资源分配:你配置了 40% 的资源
接着:
bash
# 刷新队列(使配置生效)
yarn rmadmin -refreshQueues
要关闭并且再次重启yarn
然后
bash
[root@master hadoop]# yarn application -list
2026-04-30 13:45:05,719 INFO client.RMProxy: Connecting to ResourceManager at master/192.168.128.130:8032
Total number of applications (application-types: [], states: [SUBMITTED, ACCEPTED, RUNNING] and tags: []):0
Application-Id Application-Name Application-Type User Queue State Final-State Progress Tracking-URL
[root@master hadoop]# yarn queue -status default
2026-04-30 13:45:40,746 INFO client.RMProxy: Connecting to ResourceManager at master/192.168.128.130:8032
Queue Information :
Queue Name : default
State : RUNNING
Capacity : .00%
Current Capacity : .00%
Maximum Capacity : 100.00%
Default Node Label expression : <DEFAULT_PARTITION>
Accessible Node Labels : *
Preemption : disabled
Intra-queue Preemption : disabled
[root@master hadoop]# yarn queue -status online
2026-04-30 13:45:58,018 INFO client.RMProxy: Connecting to ResourceManager at master/192.168.128.130:8032
Queue Information :
Queue Name : online
State : RUNNING
Capacity : 60.00%
Current Capacity : .00%
Maximum Capacity : 80.00%
Default Node Label expression : <DEFAULT_PARTITION>
Accessible Node Labels : *
Preemption : disabled
Intra-queue Preemption : disabled
[root@master hadoop]# yarn queue -status offline
2026-04-30 13:46:17,793 INFO client.RMProxy: Connecting to ResourceManager at master/192.168.128.130:8032
Queue Information :
Queue Name : offline
State : RUNNING
Capacity : 40.00%
Current Capacity : .00%
Maximum Capacity : 80.00%
Default Node Label expression : <DEFAULT_PARTITION>
Accessible Node Labels : *
Preemption : disabled
Intra-queue Preemption : disabled
完美!✅ 你的 YARN 队列配置已经成功运行了!
当前队列配置分析
从输出可以看到你的队列资源配置:
| 队列 | 容量 (Capacity) | 最大容量 (Maximum Capacity) | 状态 |
|---|---|---|---|
| online | 60% | 80% | RUNNING |
| offline | 40% | 80% | RUNNING |
| default | 0% | 100% | RUNNING |
容量含义:
-
Capacity(容量):队列保证的最小资源百分比
-
online 保证 60% 的资源
-
offline 保证 40% 的资源
-
default 没有保证资源(0%)
-
-
Maximum Capacity(最大容量):队列最多能使用的资源百分比
-
online 和 offline 最多都能扩展到 80%
-
default 最多能使用 100%(如果其他队列空闲
-
YARN常用命令速查表
| 类别 | 命令 | 说明 |
|---|---|---|
| 应用管理 | yarn application -list |
列出集群中的应用,可用 -appStates 筛选状态 (如 RUNNING, FINISHED) |
yarn application -status <ApplicationId> |
查看指定应用的详细状态 | |
yarn application -kill <ApplicationId> |
终止正在运行的应用 | |
yarn application -movetoqueue <ApplicationId> -queue <QueueName> |
将应用移动到其他队列 | |
| 日志 | yarn logs -applicationId <ApplicationId> |
获取指定应用的容器日志。可配合 -containerId 获取特定容器日志 |
| 节点 | yarn node -list |
查看集群中所有节点,可用 -states 筛选状态 (如 RUNNING, UNHEALTHY) |
yarn node -status <NodeId> |
查看指定节点的状态报告 | |
| 队列 | yarn queue -status <QueueName> |
查看指定调度队列的状态 |
| 容器 | yarn container -list <ApplicationAttemptId> |
列出指定应用尝试下的所有容器 |
yarn container -status <ContainerId> |
查看特定容器的状态 | |
| 基础 | yarn jar <jar> [mainClass] args... |
提交并运行打包的 YARN 应用,是执行 MapReduce 作业的命令 |
yarn classpath |
打印 Hadoop 和 YARN 所需的类路径 | |
yarn version |
显示 Hadoop/YARN 版本 |
常用管理命令:
| 命令 | 说明 |
|---|---|
yarn resourcemanager |
启动 ResourceManager 服务 |
yarn nodemanager |
启动 NodeManager 服务 |
yarn rmadmin |
YARN 管理员工具,用于动态更新配置等 |
yarn daemonlog |
动态获取或设置守护进程的日志级别 |
-
YARN ResourceManager Web UI :
http://<rm-host>:8088,可通过此界面可视化监控和管理作业。 -
官方文档 : Apache Hadoop 官方文档的 YARN Commands 页面。
注意:执行上述命令前,请确保已配置好 Hadoop 环境变量或已切换到 Hadoop 安装目录下。部分管理命令可能需要管理员权限才能执行。
在yarn-site.xml中配置容器调度器的作用:
bash
[root@master ~]# cd /
[root@master /]# ls
bin boot data demo01 dev etc home lib lib64 media mnt opt parent proc Projects root run sbin srv sys Tests tmp usr var
[root@master /]# cd opt
[root@master opt]# ls
hadoop-3.1.4 jdk-8u281-linux-x64.rpm
[root@master opt]# cd hadoop-3.1.4
[root@master hadoop-3.1.4]# ls
bin etc include lib libexec LICENSE.txt logs NOTICE.txt README.txt sbin share
[root@master hadoop-3.1.4]# cd etc
[root@master etc]# ls
hadoop
[root@master etc]# cd hadoop
[root@master hadoop]# ls
capacity-scheduler.xml hadoop-env.sh httpfs-env.sh kms-env.sh mapred-env.sh ssl-server.xml.example yarnservice-log4j.properties
configuration.xsl hadoop-metrics2.properties httpfs-log4j.properties kms-log4j.properties mapred-queues.xml.template user_ec_policies.xml.template yarn-site.xml
container-executor.cfg hadoop-policy.xml httpfs-signature.secret kms-site.xml mapred-site.xml workers
core-site.xml hadoop-user-functions.sh.example httpfs-site.xml log4j.properties shellprofile.d yarn-env.cmd
hadoop-env.cmd hdfs-site.xml kms-acls.xml mapred-env.cmd ssl-client.xml.example yarn-env.sh
找到yarn-site.xml和capacity-scheduler.xml文件
yarn-site.xml是YARN框架的核心配置文件,定义了整个YARN集群的运行参数和行为。
需要在yarn-site.xml中添加容量调度器配置,这是因为:
- 告诉YARN"我要用容量调度器"
- 防止使用默认调度器
- 显式设置比依赖默认值更好维护
如果不配置容量调度器,虽然Hadoop本身就默认使用容量调度器
yarn queue -status root
这个命令用于查询指定队列(这是查询的是root队列)的详细配置和状态信息
命令结构分解:
yarn queue -status root
│ │ │ │
│ │ │ └── 队列名称(root是根队列)
│ │ └────────── 选项参数(表示要查看状态)
│ └──────────────── YARN的子命令(队列管理)
└───────────────────── YARN命令行工具
各部分的详细说明:
1.yarn
- Hadoop YARN的命令行工具
- 用于管理YARN集群资源、应用、队列等
- 通过RMProxy连接到ResourceManager
2.queue 子命令
- 指定要操作的对象的类型是队列
- 其他子命令如application(应用)、node(节点)、cluster(集群)
3.-status 操作选项
- 表示要执行的操作是"查询状态"
- 后面跟具体的队列的名称
4.root 参数
- 指定要查询的队列的名称
- root是最顶层的根队列
- 其他示例:root.online,root.default,online(简写)
命令执行流程:
执行命令
↓
1. 读取本地配置(core-site.xml, yarn-site.xml)
↓
2. 通过RMProxy连接到ResourceManager (master:8032)
↓
3. 向ResourceManager发送RPC请求:getQueueInfo(root)
↓
4. ResourceManager从调度器获取队列信息
↓
5. 返回队列状态数据
↓
6. 格式化输出到终端
输出字段详解:
Queue Information :
Queue Name : root # 队列名称
State : RUNNING # 队列状态(RUNNING/STOPPED/DRAINING)
Capacity : 100.00% # 配置的容量(百分比)
Current Capacity : .00% # 当前实际使用的容量
Maximum Capacity : 100.00% # 最大可用容量(弹性上限)
Default Node Label expression : <DEFAULT_PARTITION> # 默认节点标签
Accessible Node Labels : * # 可访问的节点标签(*表示所有)
Preemption : disabled # 抢占功能(是否可抢占其他队列资源)
Intra-queue Preemption : disabled # 队列内抢占
root (根队列)
├── online (子队列)
├── offline (子队列)
└── default (子队列)
常用队列查询命令对比:
| 命令 | 作用 | 示例输出 |
|---|---|---|
yarn queue -status root |
查看根队列状态 | 显示整体容量配置 |
yarn queue -status online |
查看子队列状态 | 显示online队列详细配置 |
yarn queue -status default |
查看默认队列 | 显示default队列信息 |
yarn queue -status root.online |
完整路径查询 | 同 online 效果 |
root队列
root队列是YARN中所有队列的顶层根队列,相当于整个集群资源的总入口。
树形结构的最顶层:
root (根队列)
├── online (子队列)
├── offline (子队列)
└── default (子队列)
-
root是所有队列的父队列 -
其他所有队列都是
root的子队列 或孙子队列 -
整个集群的资源总量 = root队列的总容量(100%)
root队列的特点:
| 特点 | 说明 |
|---|---|
| 唯一性 | 每个集群只有一个root队列,不能删除 |
| 不可提交任务 | 不能直接向root队列提交应用 |
| 资源总和 | 子队列的Capacity总和必须等于100% |
| 自动创建 | YARN启动时自动创建,无需配置 |
root队列的作用:
1.资源分配的源头
bash
# root队列总容量 = 100% = 整个集群资源
yarn queue -status root
# 输出: Capacity : 100.00%
2.子队列的资源池
bash
# 子队列从root分配资源
online队列: 60% (从root的100%中分配)
offline队列: 40% (从root的100%中分配)
default队列: 0% (从root的100%中分配)
# 总和 = 60% + 40% + 0% = 100%
3.层级管理的根节点
bash
<!-- capacity-scheduler.xml 中的配置 -->
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>online,offline,default</value>
<!-- 这行定义了root下有三个子队列 -->
</property>
<property>
<name>yarn.scheduler.capacity.root.online.capacity</name>
<value>60</value>
<!-- online队列占root的60% -->
</property>
bash
[root@master ~]# yarn queue -status root
2026-04-30 16:18:32,234 INFO client.RMProxy: Connecting to ResourceManager at master/192.168.128.130:8032
Queue Information :
Queue Name : root
State : RUNNING
Capacity : 100.00%
Current Capacity : .00%
Maximum Capacity : 100.00%
Default Node Label expression : <DEFAULT_PARTITION>
Accessible Node Labels : *
Preemption : disabled
Intra-queue Preemption : disabled
[root@master ~]# yarn queue -status online
2026-04-30 16:42:32,264 INFO client.RMProxy: Connecting to ResourceManager at master/192.168.128.130:8032
Queue Information :
Queue Name : online
State : RUNNING
Capacity : 60.00%
Current Capacity : .00%
Maximum Capacity : 80.00%
Default Node Label expression : <DEFAULT_PARTITION>
Accessible Node Labels : *
Preemption : disabled
Intra-queue Preemption : disabled
[root@master ~]# yarn queue -status root.default
2026-04-30 16:43:25,006 INFO client.RMProxy: Connecting to ResourceManager at master/192.168.128.130:8032
Cannot get queue from RM by queueName = root.default, please check.
[root@master ~]# yarn queue -status default
2026-04-30 16:43:58,010 INFO client.RMProxy: Connecting to ResourceManager at master/192.168.128.130:8032
Queue Information :
Queue Name : default
State : RUNNING
Capacity : .00%
Current Capacity : .00%
Maximum Capacity : 100.00%
Default Node Label expression : <DEFAULT_PARTITION>
Accessible Node Labels : *
Preemption : disabled
Intra-queue Preemption : disabled
[root@master ~]# yarn queue -status root.online
2026-04-30 16:44:16,332 INFO client.RMProxy: Connecting to ResourceManager at master/192.168.128.130:8032
Cannot get queue from RM by queueName = root.online, please check.
这个现象说明了一个重要问题:你的队列配置中,子队列使用的是相对路径,而不是绝对路径。
从你的配置可以看出:
-
✅
yarn queue -status default- 成功(使用队列名) -
✅
yarn queue -status online- 成功 -
✅
yarn queue -status offline- 成功 -
❌
yarn queue -status root.default- 失败 -
❌
yarn queue -status root.online- 失败
这说明在 capacity-scheduler.xml 中,子队列是直接配置在 root 下,但访问时不需要 加 root. 前缀
当前配置方式(相对路径):
bash
<!-- 子队列直接定义在root下 -->
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>online,offline,default</value>
</property>
<!-- 配置子队列容量时使用完整路径 -->
<property>
<name>yarn.scheduler.capacity.root.online.capacity</name>
<value>60</value>
</property>
在这种配置下:
-
API/命令行访问 :使用短名称
online、offline、default -
配置文件内部 :使用完整路径
root.online、root.offline
另一种配置方式(多级队列):
bash
<!-- 二级队列配置示例 -->
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>prod,test</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.prod.queues</name>
<value>realtime,batch</value> <!-- prod下有子队列 -->
</property>
<!-- 访问三级队列 -->
yarn queue -status prod.realtime <!-- 需要用点号 -->
yarn queue -status realtime <!-- 这个会失败 -->