解决Exception from container-launch: ExitCodeException exitCode=1的另类错误

转载请标明出处:http://blackwing.iteye.com/blog/2107107

环境为hadoop2.2,在linux下运行自己的job,报如下错误:

Exception from container-launch: ExitCodeException exitCode=1: 
ExitCodeException exitCode=1:
at org.apache.hadoop.util.Shell.runCommand(Shell.java:538)
at org.apache.hadoop.util.Shell.run(Shell.java:455)
at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:702)
at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:195)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:300)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:81)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Container exited with a non-zero exit code 1


但运行自带wordcount却能正常执行。google了很久,无非都是建议在mapred-site.xml中增加:
<property>
<name>mapreduce.application.classpath</name>
<value>
/usr/local/cluster/hadoop-2.2.0/etc/hadoop,
/usr/local/cluster/hadoop-2.2.0/share/hadoop/common/*,
/usr/local/cluster/hadoop-2.2.0/share/hadoop/common/lib/*,
/usr/local/cluster/hadoop-2.2.0/share/hadoop/hdfs/*,
/usr/local/cluster/hadoop-2.2.0/share/hadoop/hdfs/lib/*,
/usr/local/cluster/hadoop-2.2.0/share/hadoop/mapreduce/*,
/usr/local/cluster/hadoop-2.2.0/share/hadoop/mapreduce/lib/*,
/usr/local/cluster/hadoop-2.2.0/share/hadoop/yarn/*,
/usr/local/cluster/hadoop-2.2.0/share/hadoop/yarn/lib/*
</value>
</property>

但是问题依旧。从log中发现一个奇怪的输出:
Improperly specified VM option 'PretenureSizeThreshold'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

立刻想到自己设置的mapred.child.java.opts参数,其中就有PretenureSizeThreshold,原来是不支持这个参数导致。修改后就能正确运行,居然折腾了很久。
<think>嗯,用户遇到了YARN应用失败的问题,AM容器的退出代码是1,诊断信息显示container-launch异常。首先,我需要根据提供的引用内容来分析可能的原因。根据引用[1]和[4],退出代码1通常意味着容器启动时遇到了非零退出,可能和用户代码或资源有关。引用[5]提到需要清理某些jar包和恢复目录,可能涉及环境配置问题。 接下来,我应该分步骤排查。首先检查用户代码是否有错误,比如语法问题或依赖缺失。然后查看日志,特别是应用程序的stderr和stdout,以及YARN的日志路径。资源分配不足也可能导致问题,比如内存或CPU不足。环境配置方面,检查Hadoop和Spark的版本兼容性,以及类路径是否正确。此外,清理临时文件如jar包和恢复目录可能解决残留文件导致的冲突。 引用[3]提到launchContainer方法,如果准备阶段失败,可能抛出异常。需要确认是否有资源准备的问题,比如无法下载依赖或配置文件权限错误。节点特定问题也需要考虑,比如磁盘空间不足或网络问题,可以尝试在特定节点上运行任务或使用yarn node -list命令检查节点状态。 最后,总结常见原因,并提供具体的解决步骤,比如检查日志、验证资源、清理临时文件等。同时,建议用户逐步排除各个可能性,确保每个环节都正确配置和运行。</think>### YARN应用失败排查步骤(AM容器退出码1) #### 一、关键错误分析 根据提供的错误信息,AM容器退出码1通常与容器启动过程或用户代码执行相关[^1][^4]。关键诊断信息包括: ``` Exception from container-launch. Exit code: 1 Container exited with a non-zero exit code 1 Failing the application ``` 此类错误可能涉及代码逻辑、环境配置或资源限制问题。 --- #### 二、详细排查流程 1. **检查用户代码逻辑** - **语法/运行时错误**:检查Spark/MapReduce程序是否存在空指针、数组越界等基础错误 - **依赖缺失**:确认任务JAR包是否包含全部依赖项,或通过`--jars`参数正确传递 - **输入路径验证**:检查HDFS输入路径是否存在且权限正确(参考错误模式[^4]) 2. **日志分析** ```bash # 获取应用日志路径 yarn logs -applicationId application_1683105646105_0007 > app.log ``` - 重点查看`stderr`和`stdout`中的Java堆栈跟踪 - 搜索关键词:`Caused by`, `Exception in thread` 3. **资源分配验证** - **内存配置检查**: ```xml <!-- yarn-site.xml --> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>8192</value> <!-- 总内存需大于单个容器需求 --> </property> ``` - **AM内存设置**: ```bash spark-submit --driver-memory 4g ... # 确保不超过节点可用内存 ``` 4. **环境配置检查** - **Hadoop/Spark版本兼容性**:确认客户端与服务端版本一致 - **类路径冲突**:检查是否存在多版本Hadoop JAR包(参考清理命令[^5]) ```bash find /data*/yarn/nm/ -name *.jar | xargs rm -rf rm -rf /var/lib/hadoop-yarn/yarn-nm-recovery-new/* ``` 5. **节点特定问题排查** - 通过`yarn node -list`检查节点健康状态 - 在故障节点执行测试任务: ```bash yarn node -status <node_id> hdfs dfs -test -e /tmp/testfile ``` --- #### 三、常见原因总结 | 问题类型 | 典型表现 | 解决方案 | |----------------|-----------------------------|----------------------------| | 内存不足 | `Container killed by YARN` | 增加`yarn.scheduler.maximum-allocation-mb` | | 依赖冲突 | `NoSuchMethodError` | 清理旧版本JAR[^5] | | 权限问题 | `Permission denied` | 检查HDFS权限和Linux文件权限 | | 节点硬件故障 | 特定节点重复失败 | 排除故障节点或重启NodeManager | --- #### 四、进阶诊断工具 1. **启用DEBUG日志**: ```xml <!-- log4j.properties --> log4j.logger.org.apache.hadoop.yarn=DEBUG ``` 2. **使用JVM参数捕获内存快照**: ```bash spark-submit --conf spark.executor.extraJavaOptions="-XX:+HeapDumpOnOutOfMemoryError" ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值