2011-12-13 51 views
2

我在hadoop上开始了一些小东西。它的设置和运行正常。现在我正在做一个单独的节点/独立群集。 我试图运行http://hadoop.apache.org/common/docs/r0.18.3/mapred_tutorial.htmlClassNotFoundException,同时运行Hadoop的示例作业

提到的示例作业到目前为止,程序已正确编译,jar已创建,清单已成功添加。但是当我尝试运行这个工作时,我得到这个错误。

Exception in thread "main" java.lang.ClassNotFoundException: org.myorg.WordCount 
at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:247) 
at org.apache.hadoop.util.RunJar.main(RunJar.java:149) 

我有复制粘贴完全相同的程序,如链接中所述。但它给了这个错误。这是我打的命令行。

[[email protected] hadoop]$ bin/hadoop jar /home/shantanu/hadoop/src/examples/wordcount.jar org.myorg.WordCount /tmp/Hadoop_Jobs/ /tmp/Hadoop_Results 

我已经经历了很多文章,但找不到解释,请帮助。

回答

6

你确定wordcount.jar包含org.myorg.WordCount类吗?

难道你没有修改包名?

+0

修改为?怎么样 ? – Shades88

+0

可以请您详细说明吗?我也是Java新手。作为更新,我删除了'package org.myorg;'语句。现在它是一个单独的课程。它仍然给我'在线程中的异常“main”java.lang.ClassNotFoundException:WordCount'。帮帮我 !! – Shades88

+0

这就是问题所在。您不应该删除软件包名称,也不应该在没有它的情况下引用命令行。 –

9

我发现,我需要把它添加到示例应用程序获得的Hadoop知道我的类文件是在什么罐子。

diff --git a/src/org/myorg/WordCount.java b/src/org/myorg/WordCount.java 
index 912311a..8cc1b93 100644 
--- a/src/org/myorg/WordCount.java 
+++ b/src/org/myorg/WordCount.java 
@@ -43,7 +43,8 @@ public class WordCount { 
    public static void main(String[] args) throws Exception { 
    Configuration conf = new Configuration(); 

    Job job = new Job(conf, "wordcount"); 
+ job.setJarByClass(WordCount.class); 

    job.setOutputKeyClass(Text.class); 
    job.setOutputValueClass(IntWritable.class); 

我不知道这是否是新的Hadoop的与否,但setJarByClass会告诉hadoop使用基于该jar文件中包含的单个类的整个jar。该jar仍然必须在你的类路径中。这是我跑的命令:

hadoop jar wordcount.jar org.myorg.WordCount /usr/$USER/wordcount/input /usr/$USER/wordcount/output 

而且我使用这个命令之前复制的样本文件到HDFS:

hadoop dfs -copyFromLocal input/file01 /usr/$USER/wordcount/input/file01 
hadoop dfs -copyFromLocal input/file02 /usr/$USER/wordcount/input/file02 
hadoop dfs -ls /usr/$USER/wordcount/input 

其中输入/ file01:

Hello World Bye World 

和input/file02:

Hello Hadoop Goodbye Hadoop 

我提出了一个github repo,说明我能够工作。

+0

谢谢,值得更新hadoop wiki http://wiki.apache.org/hadoop/WordCount。我相信谷歌会找到维基链接和下一个人的答案。 –

+0

非常感谢,这对我很有用。 – Fernando

相关问题