2015-08-13 234 views
0

当我跑步时DistCp使用将数据从S3到我的本地HDFS我在地图上减少作业过程中得到这个异常移动推出复制数据:Hadoop的DistCp使用引发无法找到或加载主类org.apache.hadoop.mapreduce.v2.app.MRAppMaster

Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster 

我检查了每一篇可能的在线文章。 我yarn-site.xml文件包含

<property> <name>yarn.application.classpath</name> <value> $HADOOP_CONF_DIR, $HADOOP_COMMON_HOME/*, $HADOOP_COMMON_HOME/lib/*, $HADOOP_HDFS_HOME/*, $HADOOP_HDFS_HOME/lib/*, $HADOOP_MAPRED_HOME/*, $HADOOP_MAPRED_HOME/lib/*, $HADOOP_YARN_HOME/*, $HADOOP_YARN_HOME/lib/*, $HADOOP_HOME/share/hadoop/mapreduce/, $HADOOP_HOME/share/hadoop/mapreduce/lib/ </value> </property> 为集群的每个节点,我检查,这些变量被设置并指向正确的文件夹,实际上$HADOOP_HOME/share/hadoop/mapreduce/是指向hadoop-mapreduce-client-app-2.7.1.jar是包含org.apache.hadoop.mapreduce.v2.app.MRAppMaster
罐子一个有什么建议么??

回答

0

我也遇到过这个问题。 在我的Hadoop发行版,没有目录$ HADOOP_HOME /股/的Hadoop/MapReduce的/,并$ HADOOP_HOME /股/的Hadoop/MapReduce的/ lib目录/, 但有目录$ HADOOP_HOME /股/ Hadoop的/ mapreduce1/$ HADOOP_HOME/share/hadoop/mapreduce2/

修复目录路径,只需确定。

要小心,不要在纱default.xml中复制默认值!

4

我有同样的问题,花了几天来解决。 存在这样的问题,在mapred-site.xml中缺少

<property> 
    <name>mapreduce.application.classpath</name> 
    <value> 
     $HADOOP_MAPRED_HOME/*, 
     $HADOOP_MAPRED_HOME/lib/*, 
     $MR2_CLASSPATH, 
     $CDH_MR2_HOME 
    </value> 
</property> 

这里是整个路径,我不得不经历(万一有人会来调查类似的问题): 作业后运行我可以在客户端日志中这样看到一个错误:

异常来自容器推出:

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 

我也注意到错误:在作业执行日志中找不到或加载主类org.apache.hadoop.mapreduce.v2.app.MRAppMaster

找出你可以去日志目录上节点管理器通过hadoop.log.dir定义主机纱配置选项(在我的情况下,它是在/ var /日志/ cloudera_logs/Hadoop的纱线/)。在那里您将看到文件hadoop-cmf-yarn-NODEMANAGER *。它可以帮助您在./container目录内遵循所有工作流程,包括运行脚本和清理过程。 这里很好注意脚本default_container_executor.sh。 此脚本通常会在执行作业前导出所有系统变量。在我的情况下,与$ HADOOP_MAPRED_ *有关的所有内容都已丢失。

然后,我开始寻找我的服务器配置选项找到mapreduce.application。类路径选项,它已经指出了正确的变量。出于某种原因,他们在工作时不适用。

在此之后,我试图在客户端添加相同的变量到mapred-site.xml它工作。

注重你的$ HADOOP_MAPRED_HOME应该指向的类Hadoop MapReduce的客户端应用程序 - 的.jar,其中org.apache.hadoop.mapreduce.v2.app.MRAppMaster被打包的有效位置。如果您不确定您的失踪班属于哪个罐子,请在MAVEN CENTRAL中使用高级搜索。

我的猜测是它可以以某种方式与yarn.nodemanager.env-whitelist选项相关。根据Cloudera的“容器可能覆盖的环境变量而不是使用NodeManager的默认值”,但我不确定。

1

实际上,这是纱类路径的一个问题。您可以在文档中看到默认值(https://hadoop.apache.org/docs/r2.7.1/hadoop-yarn/hadoop-yarn-common/yarn-default.xml搜索yarn.application.classpath)。

所以要解决它,请确保环境变量设置正确,特别是应该指向hadoop-mapreduce-client-app-.jar所在目录的HADOOP_MAPRED_HOME。

通常情况下,以下应该工作:

纱的site.xml

<property> 
<name>yarn.application.classpath</name> 
<value>$HADOOP_CONF_DIR,$HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,$HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,$HADOOP_YARN_HOME/*,$HADOOP_YARN_HOME/lib/*,$HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*</value> 
</property> 

mapred-site.xml中

<property> 
<name>mapreduce.application.classpath</name> 
<value>$HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*</value> 
</property> 

有了,例如HADOOP_MAPRED_HOME指向/ usr/lib/hadoop-mapreduce

我花了很长时间尝试在一些docker容器上完成所有操作,最后我跳过了环境变量,并在配置文件中对库目录进行了硬编码,并且它可以工作。

在我的环境(但你需要有正确的目录为您的替换):

纱的site.xml

<property> 
<name>yarn.application.classpath</name> 
<value>/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/*</value> 
</property> 

mapred-site.xml中

<property> 
<name>mapreduce.application.classpath</name> 
<value>/usr/lib/hadoop-mapreduce/*,/usr/lib/hadoop-mapreduce/lib/*</value> 
</property> 

也许你的问题就像地雷,只是一些环境变量不适用,当容器a重新启动。

相关问题