我是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/