我是 Hadoop 新手,我一直在关注一些像 this 这样的教程。我在here中找到了一组很好的mapreduce示例。
我能够运行“wordcount”示例,但无法运行“EnhancedTopN”示例。它给了我错误:
线程“main”java.lang.NoClassDefFoundError中出现异常:EnhancedTopN(错误名称:samples/topn_enhanced/EnhancedTopN)
我已经正确编译了 java 文件,尽管它给了我一条注释:“注意:EnhancedTopN.java 使用未经检查或不安全的操作。 注意:使用 -Xlint 重新编译:未选中详细信息。”。可能出了什么问题?
NoClassDefFoundError
带有“错误名称”消息意味着您的类的包结构错误,或者您以错误的方式运行它。这与 Hadoop 无关,只是与 Java 中包的工作方式有关。
您的班级
EnhancedTopN
是否位于名为samples.topn_enhanced
的包中;源文件顶部是否有以下包声明?
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 教程中的课程:包。