AWS EMR 6.X配置YARN节点标签将Master任务调度到Core节点报错排查
问题原因
- 你配置的两个YARN参数仅完成了「开启节点标签功能」「指定Application Master(AM)默认使用CORE标签调度」两步,但没有为集群的CORE节点实际绑定CORE标签,YARN调度时无法找到匹配标签的可用节点,最终因资源分配超时抛出返回码5的错误。
- EMR 6.x默认的节点标签配置类型不为自定义模式,额外需要补充
yarn.node-labels.configuration-type参数声明使用自定义标签,否则你配置的标签规则不会生效。
可行解决方案
这里提供两种实现方案,可按需选择:
方案1:修复原有节点标签配置(推荐需要精细化标签调度的场景)
步骤1:修改mrjob.conf的yarn-site配置,补充缺失参数
在emr_configurations的yarn-siteProperties中新增一行配置:
yarn.node-labels.configuration-type: 'custom'
修改后的完整yarn-site配置如下:
- Classification: yarn-site Properties: yarn.node-labels.enabled: true yarn.node-labels.am.default-node-label-expression: 'CORE' yarn.node-labels.configuration-type: 'custom'
步骤2:新增bootstrap脚本为CORE节点绑定标签
在bootstrap配置列表末尾追加以下脚本:
- | # 初始化CORE节点标签 if grep -q "\"instanceFleetType\":\"CORE\"" /mnt/var/lib/info/extraInstanceData.json; then sudo -u hadoop yarn rmadmin -addToClusterNodeLabels "CORE(exclusive=false)" NODE_NAME=$(hostname -f) sudo -u hadoop yarn rmadmin -replaceLabelsOnNode "$NODE_NAME,CORE" fi
说明:
exclusive=false表示CORE节点允许非CORE标签的普通任务运行,若需要仅允许AM跑在CORE节点上,可改为exclusive=true。
方案2:使用更简单的原生参数(仅需禁止AM跑在Master节点场景推荐)
不需要配置节点标签相关参数,直接在mapred-site的Properties中添加以下配置即可实现AM自动调度到Core节点:
mapreduce.job.am.blacklist-master-nodes: true
该参数为EMR原生支持的特性,开启后会自动将Master节点加入AM调度的黑名单,完全不需要额外的标签配置,运维成本更低。
内容的提问来源于stack exchange,提问作者Stephen
相关产品推荐
相关产品推荐

