java - 由于NoClassDefFoundError而无法运行hadoop应用程序

标签 java hadoop mapreduce

我是Hadoop的新手,我一直在关注this等一些教程。我在here中找到了一组不错的mapreduce示例。我能够运行wordcount示例,但无法运行EnhancedTopN示例。它给了我错误:Exception in thread "main" java.lang.NoClassDefFoundError: EnhancedTopN (wrong name: samples/topn_enhanced/EnhancedTopN)。我已经正确编译了Java文件,尽管它给了我一个注释:“注意:EnhancedTopN.java使用未经检查或不安全的操作。
注意:使用-Xlint:unchecked可以重新编译以获取详细信息。”。可能是什么问题?

谢谢

最佳答案

带有消息“错误名称”的NoClassDefFoundError表示您的类的包结构错误,或者您以错误的方式运行它。这与Hadoop无关,而与程序包在Java中的工作方式无关。

您的类EnhancedTopN是否在名为samples.topn_enhanced的包中?您在源文件的顶部是否有以下package语句?

package samples.topn_enhanced;

public class EnhancedTopN {
    // ...
}

项目的目录结构必须与包结构匹配,因此源文件EnhancedTopN.java应该在目录samples\topn_enhanced中,并且您必须从包结构的基本目录中对其进行编译和运行:
C:\Project> javac samples\topn_enhanced\EnhancedTopN.java

C:\Project> java samples.topn_enhanced.EnhancedTopN

进入目录并使用java EnhancedTopN而不是起作用,并且会给您您所询问的错误:
C:\Project\samples\topn_enhanced> java EnhancedTopN    -- error!

请参阅:Oracle Java教程中的Lesson: Packages

关于java - 由于NoClassDefFoundError而无法运行hadoop应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38367374/

相关文章:

java - NetBeans 代码格式化程序可以用来格式化 javadoc 注释吗?

java - Java 中的 Character.getNumericValue(..) 为大小写字符返回相同的数字

Hadoop 2.7.0 - MapReduce 作业未运行 - 因 AM 容器错误而失败

java - 用于大型文本文件的 Hadoop InputSplit

hadoop - 如果 InputSplit 大小与 Block 大小不同会怎样?

java - 如何在缺少参数的情况下使 Maven 构建失败?

java - 强制 JVM 使用特定密码进行 https 连接

hadoop - 如何在HA模式下配置HBase?

hadoop - 租约不匹配 LeaseExpiredException

hadoop - 通过Reducer Hadoop中的值进行两次迭代