YARN - 解决资源信息统计显示不正确问题(CPU和内存都是8)
作者:hangge | 2024-08-29 08:34
1,问题描述
(1)我们知道 YARN 主要负责管理集群中的 CPU 和内存资源。NodeManager 节点在启动时,会自动向 ResourceManager 节点注册,将当前节点上的可用 CPU 和内存信息注册进去。这样所有的 NodeManager 注册完成后,ResourceManager 就知道目前集群的资源总量了。
注意:这里面显示的资源是集群中所有从节点的资源总和,不包括主节点的资源。
(2)比如我搭建了个单节点的 Hadoop 集群,显示节点数为 1,CPU 数是 8 个,内存是 8G。但是这个数值是对不上的,因为我使用虚拟机部署时只给它分配了 5G 的内存和 2 核 CPU。
2,问题原因
(1)这是因为在 yarn-default.xml 中有这些默认资源的配置信息:
- yarn.nodemanager.resource.memory-mb:单节点可分配的物理内存总量,默认是 8MB*1024,即 8G
- yarn.nodemanager.resource.cpu-vcores:单节点可分配的虚拟 CPU 个数,默认是 8
(2)这都是默认单节点的内存和 CPU 信息,就算你这个机器没有这么多资源,但是在 yarn-default.xml 中有这些默认资源的配置,这样当 NodeManager 去上报资源的时候就会读取这两个参数的值,这也就是为什么我们在前面看到了单节点都是 8G 内存和 8 个 cpu。
3,解决办法
(1)要解决这个问题,我们需要编辑 yarn-site.xml 文件,该文件通常位于 Hadoop 安装目录的 etc/hadoop 子目录中。
vi /usr/local/hadoop/etc/hadoop/yarn-site.xml
(2)然后根据根据我们的 CPU 和内存规格(例如 2 个 CPU 核心和 5GB 内存)添加相关配置。
<!-- 配置节点管理器的内存容量 --> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>5120</value> <!-- 5GB内存,转换为MB --> </property> <!-- 配置节点管理器的CPU核心数 --> <property> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>2</value> <!-- 2个CPU核心 --> </property> <!-- 配置YARN调度器为单个容器分配的最大内存 --> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>5120</value> <!-- 最大分配内存为5GB,转换为MB --> </property> <!-- 配置YARN调度器为单个容器分配的最大CPU核心数 --> <property> <name>yarn.scheduler.maximum-allocation-vcores</name> <value>2</value> <!-- 最大分配2个CPU核心 --> </property>
(3)重启 Hadoop 集群:
./sbin/stop-all.sh ./sbin/start-all.sh
(4)可以看到显示的资源信息已经修改后的了:
全部评论(0)