我正在尝试从simple-yarn-app运行简单的yarn应用程序。但是我在我的应用程序错误日志中得到了以下异常。
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/yarn/conf/YarnConfiguration
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2531)
at java.lang.Class.getMethod0(Class.java:2774)
at java.lang.Class.getMethod(Class.java:1663)
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.yarn.conf.YarnConfiguration但是,如果我在所有数据节点上运行"yarn classpath“命令,我会看到以下输出:
/etc/hadoop/conf:/usr/lib/hadoop/lib/*:/usr/lib/hadoop/.//*:/usr/lib/hadoop-hdfs/./:/usr/lib/hadoop-hdfs/lib/*:/usr/lib/hadoop-hdfs/.//*:/usr/lib/hadoop-yarn/lib/*:/usr/lib/hadoop-yarn/.//*:/usr/lib/hadoop-mapreduce/lib/*:/usr/lib/hadoop-mapreduce/.//*:/usr/lib/hadoop-yarn/.//*:/usr/lib/hadoop-yarn/lib/*其中包含应用程序所需的yarn客户端、yarn-api、yarn-common和hadoop-common jars的路径。谁能告诉我我可能忘记设置正确的类路径的方向。
发布于 2014-05-05 13:00:07
我发现Hadoop在迭代YarnConfiguration属性时不能解析$HADOOP_HOME和$YARN_HOME环境变量。在Yarn客户机中运行以下命令将打印未解析的配置,例如,
$HADOOP_HOME/、$HADOOP_HOME/lib/
YarnConfiguration conf = new YarnConfiguration()
for (String c : conf.getStrings(
YarnConfiguration.YARN_APPLICATION_CLASSPATH,
YarnConfiguration.DEFAULT_YARN_APPLICATION_CLASSPATH)) {
System.out.println(c);
}因此,如果您提供yarn.application.classpath属性的完整路径,NoClassDefFoundError问题就会得到解决。
<property>
<description>CLASSPATH for YARN applications. A comma-separated list of CLASSPATH entries</description>
<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-mapreduce/*,
/usr/lib/hadoop-mapreduce/lib/*,
/usr/lib/hadoop-yarn/*,
/usr/lib/hadoop-yarn/lib/*
</value>
</property>发布于 2014-08-20 05:34:22
在使用不完整的应用程序类路径启动ResourceManager和/或NodeManager守护程序的纱线群集上将会出现此问题。即使像包含的spark-shell这样简单的东西也会失败:
user@linux$ spark-shell --master yarn-client可悲的是,您只有在启动应用程序时才会发现;或者运行应用程序的时间足够长,直到遇到缺少的类。为了解决这个问题,我接受了以下CLASSPATH命令的输出,
user@linux$ yarn classpath并将其清除(因为它包含重复和非规范条目),将其附加到以下YARN配置指令(可在/etc/hadoop/conf/yarn-site.xml,中找到)中,并最终重新启动YARN集群守护进程:
user@linux$ sudo vi /etc/hadoop/conf/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/*,
$YARN_HOME/*,
$YARN_HOME/lib/*,
/etc/hadoop/conf,
/usr/lib/hadoop/*,
/usr/lib/hadoop/lib,
/usr/lib/hadoop/lib/*,
/usr/lib/hadoop-hdfs,
/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>上面不包含环境变量引用的条目是我添加的条目。请记住,在重新启动ResourceManager和NameNode守护进程之前,要将这个修改过的文件复制到YARN集群上的所有节点。
通常,您需要将所有未提供的依赖项(类和模块)打包到应用程序存档中。=:)
https://stackoverflow.com/questions/23458385
复制相似问题