Hadoop 3.0 GA版本GPU资源配置异常求助
从你提供的日志里反复出现的Got unknown resource type: yarn.io/gpu警告,一眼就能看出核心问题——你的Hadoop集群还没正确配置GPU作为可调度的自定义资源。我帮你梳理几个关键的配置检查点,一步步排查:
1. 补全resource-types.xml配置
日志里明确提示resource-types.xml not found,这个文件是YARN识别自定义资源类型的核心配置文件,你需要在$HADOOP_CONF_DIR目录下创建它,内容如下:
<configuration> <property> <name>yarn.resource-types</name> <value>yarn.io/gpu</value> </property> </configuration>
创建完成后,重启ResourceManager和NodeManager让配置生效。
2. 配置NodeManager识别并上报GPU资源
接下来需要修改yarn-site.xml,让NodeManager能够检测节点上的GPU资源并上报给ResourceManager:
<property> <name>yarn.nodemanager.resource-plugins</name> <value>yarn.io/gpu</value> </property> <property> <name>yarn.nodemanager.resource-plugins.gpu.allowed-gpu-devices</name> <value>auto</value> <!-- 自动检测节点GPU,也可以指定具体设备编号比如"0,1" --> </property> <property> <name>yarn.nodemanager.resource-plugins.gpu.path-to-discovery-executables</name> <value>/usr/local/nvidia/bin</value> <!-- 你的nvidia-smi所在路径,和命令里的路径一致 --> </property>
3. 配置调度器支持多资源调度
YARN默认的资源计算器只支持内存和vcores,要调度GPU必须切换到支持多资源的DominantResourceCalculator。以CapacityScheduler为例,修改capacity-scheduler.xml:
<property> <name>yarn.scheduler.capacity.resource-calculator</name> <value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value> </property>
如果你用的是FairScheduler,对应的配置是修改fair-scheduler.xml里的resourceCalculator属性为org.apache.hadoop.yarn.util.resource.DominantResourceCalculator。
4. 验证资源配置是否生效
完成上述配置后,再次重启ResourceManager和NodeManager,然后执行以下命令验证:
yarn node -list -showDetails
查看输出的节点详情,确认是否包含类似yarn.io/gpu:1的GPU资源统计;也可以访问ResourceManager的Web UI(默认端口8088),在节点列表中查看资源情况。
5. 确认容器资源配置文件的正确性
你使用了-container_resource_profile gpu-1参数,需要确保$HADOOP_CONF_DIR下的resource-profiles.xml已经正确定义了这个配置项:
<configuration> <property> <name>yarn.resource-profiles.gpu-1.resource.yarn.io/gpu</name> <value>1</value> </property> <property> <name>yarn.resource-profiles.gpu-1.resource.memory-mb</name> <value>4096</value> <!-- 根据你的任务需求调整内存大小 --> </property> <property> <name>yarn.resource-profiles.gpu-1.resource.vcores</name> <value>2</value> <!-- 根据你的任务需求调整vcores数量 --> </property> </configuration>
完成以上所有配置后,重新运行你的Distributed Shell命令,应该就能正确调度GPU资源了。
内容的提问来源于stack exchange,提问作者Kangrok Lee

