YARN资源管理器

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队列 :日志显示只初始化了 rootroot.default 队列,没有 onlineoffline 队列

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 队列,还没有配置 onlineoffline 多队列。

这就是为什么之前看不到多队列的原因 - 配置文件中还没有添加它们。

YARN的三种调度器

YARN的三种调度器主要负责资源分配,决定集群繁忙时如何为不同任务划分计算和内存资源。

1.FIFO调度器(先进先出)

作用:作业按提交顺序依次执行,只有当前一个任务完成后,下一个才能开始

特点:实现简单,但容易出现队头堵塞。且无法利用集群并行环境,不适合共享环境。

  1. 容量调度器

作用:将资源分给多个独立的队列。每个队列分配固定比例的资源(如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

  • 提交任务顺序:

    1. Job A (大任务):需要 80GB,运行 2 小时

    2. Job B (小任务):需要 20GB,运行 10 分钟

    3. 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 队列,还没有配置 onlineoffline 多队列

接下来:编辑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>

其中:

onlineoffline你自己命名的队列名称,用来区分不同类型的任务

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/命令行访问 :使用短名称 onlineofflinedefault

  • 配置文件内部 :使用完整路径 root.onlineroot.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        <!-- 这个会失败 -->
相关推荐
Mr数据杨1 小时前
飞船乘客状态预测与金融风控建模启发
大数据·机器学习·数据分析·kaggle
金融小师妹1 小时前
AI治理框架下的货币政策接续:鲍威尔理事留任机制与决策权迁移的系统博弈
大数据·人工智能·逻辑回归·能源
Joseph Cooper2 小时前
Linux regmap 子系统实战:在驱动中 dump PMIC 寄存器定位供电问题
linux·运维·服务器
吃着火锅x唱着歌2 小时前
深度探索C++对象模型 学习笔记 第四章 Function语意学(2)
c++·笔记·学习
Fullde福德负载箱厂家2 小时前
负载箱的隐性成本与全周期经济性:用户应知的持有成本与价值管理
大数据·安全·制造
程序鉴定师2 小时前
深圳小程序制作哪家好?2026深度市场分析与选择指南?
大数据·小程序
计算机安禾2 小时前
【Linux从入门到精通】第35篇:容器化技术预备——Docker安装与基本概念
linux·运维·docker
子木HAPPY阳VIP2 小时前
信创UOS,Docker 完整操作部署(Dockerfile部署方式)&排错整合
linux·运维·redis·nginx·docker·容器·tomcat
瞎折腾啥啊2 小时前
vcpkg与CMake
linux·c++·cmake·cmakelists