YARN提交teragen任务报错container-launch退出码127求助
问题根因
YARN容器退出码127对应Linux系统「命令未找到」错误,本次报错/bin/bash: line 1: m: command not found的核心原因是:NodeManager生成容器启动脚本时,注入了语法错误的环境变量配置行,行首多出来的m字符被bash识别为待执行的命令,最终触发启动失败。
排查步骤
- 排查所有NodeManager节点的
mapred-site.xml配置,重点核对以下三个MapReduce环境变量参数:yarn.app.mapreduce.am.env(ApplicationMaster环境变量)mapreduce.map.env(Map任务容器环境变量)mapreduce.reduce.env(Reduce任务容器环境变量)
优先检查是否存在配置值开头误加m字符、未闭合的引号、非法换行等语法问题,例如错误配置mJAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64就会直接触发本次报错
- 排查
yarn-site.xml中的yarn.nodemanager.env-whitelist参数,确认白名单内的环境变量配置没有类似语法错误 - 定位到报错NodeManager的本地容器工作目录,默认路径为
${yarn.nodemanager.local-dirs}/usercache/${任务提交用户}/appcache/${失败作业ID}/container_${失败容器ID}/launch_container.sh,直接查看该脚本第一行内容即可精准定位异常字符的来源
修复方案
- 删掉环境变量配置中误加的
m前缀或其他非法字符,保证所有环境变量配置符合KEY=VALUE的bash语法规范 - 重启所有NodeManager服务使配置生效
- 重新提交teragen任务验证执行结果
内容的提问来源于stack exchange,提问作者Xavier Merino
相关产品推荐
相关产品推荐

