Mapreduce运行异常Container exited with a non-zero exit code 1

本文解决IDEA编写的MapReduce读写HBase并部署到集群时遇到的错误,详细记录了从错误日志中定位问题,到修改yarn-site.xml配置文件,再到重启YARN服务的全过程。

用idea编写mapreduce读写hbase,并打包jar放到集群服务器上运行时出现下面错误:

[2019-01-05 04:03:01.278]Container exited with a non-zero exit code 1. Error file: prelaunch.err.
Last 4096 bytes of prelaunch.err :
Last 4096 bytes of stderr :
log4j:WARN No appenders could be found for logger (org.apache.hadoop.mapreduce.v2.app.MRAppMaster).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.


For more detailed output, check the application tracking page: http://slave1:8088/cluster/app/application_1546695649125_0002 Then click on links to logs of each attempt.

解决方案:

先进入:http://slave1:8042/logs/userlogs这个地址,其中slave1为resourcemanager的服务器,然后进入错误信息里提到的jobid的日志。

点开【syslog】,可以看到详细的mapreduce运行过程的日志信息,在当中可以找到下面这个异常信息。

org.apache.hadoop.mapreduce.v2.app.client.MRClientService: Webapps failed to start. Ignoring for now: java.lang.NullPointerException

通过排查发现是新版本的hadoop的yarn中需要配置上正面的内容,于是在yarn-site.xml添加正面内容:


    <property>
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>master</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm2</name>
        <value>slave1</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>slave1</value>
    </property>

保存完同时覆盖集群其他节点上的这个文件,最后重启yarn再启动mapreduce应用,成功运行。

Hadoop YARN 环境中,当容器(Container)退出并返回非零退出代码 127 时,通常表示容器尝试执行的命令未找到(Command not found),这与操作系统中常见的 `exec` 错误码 127 相关。该问题通常与任务执行环境的配置、路径设置或依赖缺失有关。 ### 1. 检查容器执行路径与命令可执行性 YARN 容器运行时依赖于 `PATH` 环境变量来定位可执行命令。如果容器尝试运行的脚本或程序不在 `PATH` 中,或者文件本身不存在,将导致退出码 127。应确保以下配置: - **任务脚本路径正确**:确保在 `yarn-site.xml` 或任务配置中指定的脚本路径在容器内有效。 - **环境变量设置**:在 `yarn-site.xml` 中配置 `yarn.nodemanager.env-whitelist`,确保 `PATH` 等必要环境变量被正确传递到容器中。 ```xml <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_HOME,PATH</value> </property> ``` ### 2. 验证容器镜像与依赖环境 在使用 Linux 容器执行器(如 `LinuxContainerExecutor`)时,容器运行的环境可能与本地开发环境不同。应确保: - **必要的二进制文件已安装**:例如 `bash`、`python`、`java` 等运行时依赖。 - **脚本可执行权限**:确保容器内的脚本具有可执行权限,例如通过 `chmod +x script.sh` 设置。 - **挂载共享库路径**:如果任务依赖特定的库文件,应配置 `LD_LIBRARY_PATH` 或通过 `mount` 挂载相应路径。 ### 3. 调整 YARN 类路径配置 某些情况下,容器启动失败可能与类路径(classpath)配置有关。确保 `yarn.application.classpath` 包含所有必要的 Hadoop 依赖路径: ```xml <property> <name>yarn.application.classpath</name> <value>/opt/hadoop-3.4.0/etc/hadoop:/opt/hadoop-3.4.0/share/hadoop/common/lib/*:/opt/hadoop-3.4.0/share/hadoop/common/*:/opt/hadoop-3.4.0/share/hadoop/hdfs:/opt/hadoop-3.4.0/share/hadoop/hdfs/lib/*:/opt/hadoop-3.4.0/share/hadoop/hdfs/*:/opt/hadoop-3.4.0/share/hadoop/mapreduce/*:/opt/hadoop-3.4.0/share/hadoop/yarn:/opt/hadoop-3.4.0/share/hadoop/yarn/lib/*:/opt/hadoop-3.4.0/share/hadoop/yarn/*</value> </property> ``` ### 4. 检查容器日志与诊断信息 YARN 容器退出后,通常会在 `prelaunch.err` 或 `syslog` 中记录错误信息。可以通过以下方式获取日志: - 使用 `yarn logs -applicationId <application_id>` 命令查看容器日志。 - 检查 NodeManager 日志路径,如 `/var/log/hadoop-yarn/containerlogs/`。 ###
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值