2011-12-13 50 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

相關問題