如何在启用NodeManager重启恢复的YARN集群中正确移除NodeManager?
正确的YARN NodeManager节点退役方法
你遇到的问题是因为启用NodeManager恢复后,直接把节点加入黑名单的操作不会触发容器的优雅迁移流程,导致容器无法被重新调度,最终超时失败。以下是适配NM恢复功能的正确退役步骤:
第一步:配置优雅退役相关参数
先确认yarn-site.xml中已配置以下参数(如果没有就添加):<property> <name>yarn.resourcemanager.nodes.exclude-path</name> <value>/path/to/yarn_exclude_hosts</value> <!-- 替换成你的exclude文件实际路径 --> </property> <property> <name>yarn.nodemanager.graceful-decommission.timeout-ms</name> <value>3600000</value> <!-- 优雅退役超时时间,建议设为1小时左右,可根据业务调整 --> </property> <property> <name>yarn.resourcemanager.decommissioning.monitor.interval-ms</name> <value>10000</value> <!-- ResourceManager检查退役状态的间隔,默认10秒即可 --> </property>首次配置这些参数的话,需要重启ResourceManager使其生效。
第二步:触发优雅退役流程
- 把要退役的NodeManager主机名写入
yarn_exclude_hosts文件 - 在ResourceManager节点执行刷新命令:
此时ResourceManager会把该节点标记为DECOMMISSIONING状态,不会再给它分配新容器,同时会尝试把节点上正在运行的容器迁移到其他可用节点。yarn rmadmin -refreshNodes
- 把要退役的NodeManager主机名写入
第三步:确认退役完成
用以下命令查看节点状态:yarn node -list -all当节点状态变成DECOMMISSIONED后,就可以安全停止这个NodeManager进程,进行后续维护了。
额外提醒
- 要确保集群有足够的空闲资源来接收迁移的容器,不然部分容器可能还是会超时失败
- 如果是短作业或者依赖本地资源无法迁移的作业,最好等作业跑完再退役节点
- 维护完成后,把节点从exclude文件里删掉,再执行一次
yarn rmadmin -refreshNodes,节点就能重新加入集群了
内容的提问来源于stack exchange,提问作者Mohammad Solaiman
相关产品推荐
相关产品推荐

