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

问题描述 投票:0回答:1

我是 Hadoop 新手,我一直在关注一些像 this 这样的教程。我在here中找到了一组很好的mapreduce示例。

我能够运行“wordcount”示例,但无法运行“EnhancedTopN”示例。它给了我错误:

线程“main”java.lang.NoClassDefFoundError中出现异常:EnhancedTopN(错误名称:samples/topn_enhanced/EnhancedTopN)

我已经正确编译了 java 文件,尽管它给了我一条注释:“注意:EnhancedTopN.java 使用未经检查或不安全的操作。 注意:使用 -Xlint 重新编译:未选中详细信息。”。可能出了什么问题?

java hadoop mapreduce
1个回答
0
投票

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 教程中的课程:包

© www.soinside.com 2019 - 2024. All rights reserved.