首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于简单纱线应用的NoClassDefFoundError

用于简单纱线应用的NoClassDefFoundError
EN

Stack Overflow用户
提问于 2014-05-05 00:01:17
回答 2查看 11.4K关注 0票数 2

我正在尝试从simple-yarn-app运行简单的yarn应用程序。但是我在我的应用程序错误日志中得到了以下异常。

代码语言:javascript
运行
复制
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“命令,我会看到以下输出:

代码语言:javascript
运行
复制
/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的路径。谁能告诉我我可能忘记设置正确的类路径的方向。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-05 13:00:07

我发现Hadoop在迭代YarnConfiguration属性时不能解析$HADOOP_HOME和$YARN_HOME环境变量。在Yarn客户机中运行以下命令将打印未解析的配置,例如,

$HADOOP_HOME/、$HADOOP_HOME/lib/

代码语言:javascript
运行
复制
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问题就会得到解决。

代码语言:javascript
运行
复制
<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>
票数 4
EN

Stack Overflow用户

发布于 2014-08-20 05:34:22

在使用不完整的应用程序类路径启动ResourceManager和/或NodeManager守护程序的纱线群集上将会出现此问题。即使像包含的spark-shell这样简单的东西也会失败:

代码语言:javascript
运行
复制
user@linux$ spark-shell --master yarn-client

可悲的是,您只有在启动应用程序时才会发现;或者运行应用程序的时间足够长,直到遇到缺少的类。为了解决这个问题,我接受了以下CLASSPATH命令的输出,

代码语言:javascript
运行
复制
user@linux$ yarn classpath

并将其清除(因为它包含重复和非规范条目),将其附加到以下YARN配置指令(可在/etc/hadoop/conf/yarn-site.xml,中找到)中,并最终重新启动YARN集群守护进程:

代码语言:javascript
运行
复制
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集群上的所有节点。

通常,您需要将所有未提供的依赖项(类和模块)打包到应用程序存档中。=:)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23458385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档