2014-02-10 33 views
0

我想在独立模式下运行hadoop,并设置了所有正确的配置文件,并成功运行了wordCount示例。当我尝试将我的源代码和jar文件组织到一个文件层次结构中时,会出现问题,使事情变得更加有条理。Hadoop独立模式,dirName.className,给出classNotFoundException

hadoop --config ~/myconfig jar ~/MYPROGRAMSRC/WordCount.jar MYPROGRAMSRC.WordCount ~/wordCountInput/allData ~/wordCountOutput 

我使用上述代码从我的主目录中的脚本文件调用hadoop。它无法识别MYPROGRAMSRC目录下一级的WordCount文件。

的〜/ MYPROGRAMSRC目录包含:

WordCount.jar, WordCount.java, WordCount.class, WordCount$Map.class and WordCont$Reduce.class文件。

购买为什么Hadoop的抛出一个ClassNotFoundException:

Exception in thread "main" java.lang.ClassNotFoundException: MYPROGRAMSRC.WordCount 

我知道我的程序运行,因为如果我的脚本文件转移到同一目录WordCount.class文件并运行以下命令:

hadoop --config ~/myconfig jar WordCount.jar WordCount ~/wordCountInput/allData ~/wordCountOutput 

它运行良好。

回答

0

尝试

hadoop --config ~/myconfig jar ~/MYPROGRAMSRC/WordCount.jar ~/MYPROGRAMSRC/WordCount ~/wordCountInput/allData ~/wordCountOutput 

MYPROGRAMSRC.WordCount是没有意义的,如果MYPROGRAMSRC是一个目录。

+0

这仍然不起作用。我也尝试过。它坚持说脚本文件必须在同一个目录下。 – anonuser0428

+0

什么是脚本文件? – vefthym

+0

好吧,我刚刚写了一个脚本文件,其他一些东西一起运行命令:hadoop --config〜/ myconfig jar WordCount.jar〜/ MYPROGRAMSCR/WordCount〜/ wordCountInput/allData〜/ wordCountOutput但不似乎工作。即使我在没有脚本文件的情况下尝试命令行,它仍然可以工作,只有当我在目录〜/ MYPROGRAMSRC中,并且只需将WordCount作为类文件传递即可。我只是好奇为什么会发生这种情况。 – anonuser0428