Yarn MapReduce 作业问题 - Hadoop 2.3.0 中的 AM 容器启动错误

问题描述 投票:0回答:12

我已经设置了 Hadoop 2.3.0 的 2 节点集群。它工作正常,我可以成功运行 Distributedshell-2.2.0.jar 示例。但是当我尝试运行任何 MapReduce 作业时,我收到错误。我已经根据(http://www.alexjf.net/blog/distributed-systems/hadoop-yarn-installation-definitive-guide)设置了 MapRed.xml 和其他配置来运行 MapReduce 作业,但出现以下错误:

14/03/22 20:31:17 INFO mapreduce.Job: Job job_1395502230567_0001 failed with state FAILED due to: Application application_1395502230567_0001 failed 2 times due to AM Container for appattempt_1395502230567_0001_000002 exited 
with  exitCode: 1 due to: Exception from container-launch: org.apache.hadoop.util.Shell$ExitCodeException: 
    org.apache.hadoop.util.Shell$ExitCodeException: 
        at org.apache.hadoop.util.Shell.runCommand(Shell.java:505)
        at org.apache.hadoop.util.Shell.run(Shell.java:418)
        at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:650)
        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:283)
        at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:79)
        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
    .Failing this attempt.. Failing the application.
    14/03/22 20:31:17 INFO mapreduce.Job: Counters: 0
    Job ended: Sat Mar 22 20:31:17 PKT 2014
    The job took 6 seconds.

如果查看 stderr(作业日志),只有一行

"Could not find or load main class 614"

现在我已经用谷歌搜索了它,通常当你有不同的JAVA版本或在

yarn-site.xml
类路径设置不正确时,通常会出现这个问题,我的
yarn-site.xml
有这个

  <property>
    <name>yarn.application.classpath</name>
    <value>/opt/yarn/hadoop-2.3.0/etc/hadoop,/opt/yarn/hadoop-2.3.0/*,/opt/yarn/hadoop-2.3.0/lib/*,/opt/yarn/hadoop-2.3.0/*,/opt/yarn/hadoop-2.3.0/lib/*,/opt/yarn/hadoop-2.3.0/*,/opt/yarn/hadoop-2.3.0/lib/*,/opt/yarn/hadoop-2.3.0/*,/opt/yarn/hadoop-2.3.0/lib/*</value>
  </property>

那么还有其他想法可能是什么问题吗?

我正在像这样运行我的 MapReduce 作业:

$HADOOP_PREFIX/bin/hadoop jar $HADOOP_PREFIX/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar randomwriter out
java hadoop mapreduce hadoop-yarn
12个回答
7
投票

我在尝试手动安装 Hortonworks HDP 2.1 时遇到了同样的问题。 我设法捕获包含以下内容的容器启动器脚本:

#!/bin/bash

export NM_HTTP_PORT="8042"
export LOCAL_DIRS="/data/1/hadoop/yarn/local/usercache/doug/appcache/application_1406927878786_0001,/data/2/hadoop/yarn/local/usercache/doug/appcache/application_1406927878786_0001,/data/3/hadoop/yarn/local/usercache/doug/appcache/application_1406927878786_0001,/data/4/hadoop/yarn/local/usercache/doug/appcache/application_1406927878786_0001"
export JAVA_HOME="/usr/java/latest"
export NM_AUX_SERVICE_mapreduce_shuffle="AAA0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
export CLASSPATH="$PWD:$HADOOP_CONF_DIR:$HADOOP_COMMON_HOME/share/hadoop/common/*:$HADOOP_COMMON_HOME/share/hadoop/common/lib/*:$HADOOP_HDFS_HOME/share/hadoop/hdfs/*:$HADOOP_HDFS_HOME/share/hadoop/hdfs/lib/*:$HADOOP_YARN_HOME/share/hadoop/yarn/*:$HADOOP_YARN_HOME/share/hadoop/yarn/lib/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*:job.jar/job.jar:job.jar/classes/:job.jar/lib/*:$PWD/*"
export HADOOP_TOKEN_FILE_LOCATION="/data/2/hadoop/yarn/local/usercache/doug/appcache/application_1406927878786_0001/container_1406927878786_0001_01_000001/container_tokens"
export NM_HOST="test02.admin.hypertable.com"
export APPLICATION_WEB_PROXY_BASE="/proxy/application_1406927878786_0001"
export JVM_PID="$$"
export USER="doug"
export HADOOP_HDFS_HOME="/usr/lib/hadoop-hdfs"
export PWD="/data/2/hadoop/yarn/local/usercache/doug/appcache/application_1406927878786_0001/container_1406927878786_0001_01_000001"
export CONTAINER_ID="container_1406927878786_0001_01_000001"
export HOME="/home/"
export NM_PORT="62404"
export LOGNAME="doug"
export APP_SUBMIT_TIME_ENV="1406928095871"
export MAX_APP_ATTEMPTS="2"
export HADOOP_CONF_DIR="/etc/hadoop/conf"
export MALLOC_ARENA_MAX="4"
export LOG_DIRS="/data/1/hadoop/yarn/logs/application_1406927878786_0001/container_1406927878786_0001_01_000001,/data/2/hadoop/yarn/logs/application_1406927878786_0001/container_1406927878786_0001_01_000001,/data/3/hadoop/yarn/logs/application_1406927878786_0001/container_1406927878786_0001_01_000001,/data/4/hadoop/yarn/logs/application_1406927878786_0001/container_1406927878786_0001_01_000001"
ln -sf "/data/1/hadoop/yarn/local/usercache/doug/filecache/10/libthrift-0.9.2.jar" "libthrift-0.9.2.jar"
ln -sf "/data/4/hadoop/yarn/local/usercache/doug/appcache/application_1406927878786_0001/filecache/13/job.xml" "job.xml"
mkdir -p jobSubmitDir
ln -sf "/data/3/hadoop/yarn/local/usercache/doug/appcache/application_1406927878786_0001/filecache/12/job.split" "jobSubmitDir/job.split"
mkdir -p jobSubmitDir
ln -sf "/data/2/hadoop/yarn/local/usercache/doug/appcache/application_1406927878786_0001/filecache/11/job.splitmetainfo" "jobSubmitDir/job.splitmetainfo"
ln -sf "/data/1/hadoop/yarn/local/usercache/doug/appcache/application_1406927878786_0001/filecache/10/job.jar" "job.jar"
ln -sf "/data/2/hadoop/yarn/local/usercache/doug/filecache/11/hypertable-0.9.8.0-apache2.jar" "hypertable-0.9.8.0-apache2.jar"
exec /bin/bash -c "$JAVA_HOME/bin/java -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/data/4/hadoop/yarn/logs/application_1406927878786_0001/container_1406927878786_0001_01_000001 -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA  -Xmx1024m org.apache.hadoop.mapreduce.v2.app.MRAppMaster 1>/data/4/hadoop/yarn/logs/application_1406927878786_0001/container_1406927878786_0001_01_000001/stdout 2>/data/4/hadoop/yarn/logs/application_1406927878786_0001/container_1406927878786_0001_01_000001/stderr "

设置

CLASSPATH
的那条线是罪魁祸首。 为了解决这个问题,我必须在
HADOOP_COMMON_HOME
中设置变量
HADOOP_HDFS_HOME
HADOOP_YARN_HOME
HADOOP_MAPRED_HOME
hadoop-env.sh
来指向
/usr/lib
下的相应目录。 在每个目录中,我还必须设置可以找到 jar 的
share/hadoop/...
子目录层次结构。


1
投票

我用以下方法解决了这个问题:

因为我的hadoop/etc/hadoop中[hadoop-2.7.3配置目录]:关于mapred-site.xml:

<configuration>
 <property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
 </property>
 <property>
   <name>mapreduce.jobhistory.address</name>
   <value>zhangjunj:10020</value>
 </property>
 <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>zhangjunj:19888</value>
 </property>
</configuration>

在此文件中。 “zhangjunj”肯定是你master的机器名,但我一开始就写了“hadoop”。


0
投票

我解决了这个问题,这是由于路径不正确造成的。通过为mapred、hdfs、yarn和common提供完整的目录路径可以解决问题。

谢谢, 托尼


0
投票

请检查财产。 确保所有必需的罐子都存在。

**yarn.application.classpath** /etc/hadoop/conf、/usr/lib/hadoop/、/usr/lib/hadoop/lib/、/usr/lib/hadoop-hdfs/、/usr/lib/hadoop-hdfs/lib /,/ usr/lib/hadoop-yarn/、/usr/lib/hadoop-yarn/lib/、/usr/lib/hadoop-mapreduce/、/usr/lib/hadoop-mapreduce/lib/


0
投票

也许你可以在 $HADOOP_HOME/bin 下使用以下代码运行 HistoryServer,

./mr-jobhistory-daemon.sh start historyserver

然后你可以从这个url控制Hadoop错误的日志,(历史日志)

http://<Resource Manager Host name adress>:8088/cluster

很可能您会遇到“找不到类”异常


0
投票

我在Ambari 2.0 + HDP2.3 + HUE3.9上也遇到了这个问题 我的修复经验是: 1.确保spark客户端存在于所有hadoop的yarn节点上 2. 在所有yarn节点(spark客户端)和hue主机上导出SPARK_HOME


0
投票

权限应该是6050 所有者:root组hadoop

---Sr-s--- 1 root hadoop /usr/lib/hadoop-yarn/bin/container-executor


0
投票

请先检查日志(日志位于Hadoop的logs目录下的用户目录中)。

还要检查您在yarn、hdfs、core-site XML 文件中提到的所有目录的权限。因为这个错误大多数情况是由于错误的权限问题导致的。


0
投票

检查系统中的交换大小:

free -m
如果有
Swap: 0 0 0
按照这些指令

分配交换内存

0
投票

就我而言,问题是由于内存不足造成的。我按照阿迪诺在上面的评论中建议的那样将以下内容插入到yarn-site-xml中:

<property> <name>yarn.nodemanager.delete.debug-delay-sec</name> <value>600</value> </property>

之后我可以在 stderr 日志文件中看到错误。我不记得确切的措辞(日志文件一段时间后被删除)。这是“内存不足错误”

我编辑了我的虚拟机,添加了另一个大小为 3 GB 的交换分区(可能完全是多余的)。我用 Gparted 做了这个。

之后我必须通过输入

来注册新的交换分区
mkswap /dev/sda6 (/dev/sda6 is the partition name)
swapon /dev/sda6 

我通过输入“blkid”并复制 uid 找到了新交换分区的 uid。

我将交换注册到文件 fstab 中:

sudo vi /etc/fstab

我为新的交换分区添加了一行。我从之前的交换分区复制了整行并更改了 UID。

UUID=2d29cddd-e721-4a7b-95c0-7ce52734d8a3 none  swap    sw      0       0

此后,错误消失。我确信有更优雅的方法来解决这个问题,但这对我有用。我对于处理 Linux 还很陌生。


0
投票

如果

ls -lt  /usr/lib/hadoop-yarn/bin/container-executor -rwsr-sr-- 1 root yarn 524648 Dec  5  2023 /usr/lib/hadoop-yarn/bin/container-executor
并且 Permissin 被拒绝并且错误 13,然后在纱线组中添加用户纱线/ 结果:

[root@data-adh7-01 adhadmin_local]# cat /etc/group|grep yarn
yarn:x:518:yarn

-1
投票

您需要将

yarn.nodemanager.delete.debug-delay-sec
设置为 600 来延迟日志删除。

这将允许您浏览相关容器目录中

/hadoop/yarn/log
中的stderr、stdout和syslog。

您很可能会在系统日志中找到错误。而且,最有可能的是,它会是 tez.history.logging.service.class=org.apache.tez.dag.history.logging.ats.ATSV15HistoryLoggingService 类的

ClassNotFoundException

如果是这种情况,请参考以下票证:

https://issues.apache.org/jira/browse/AMBARI-15041

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.