2010-05-07 163 views
3

我是hadoop的新手。運行hadoop時出現Classnotfound異常

我有一個文件Wordcount.java是指hadoop.jar和斯坦福parser.jar是

我運行以下commnad

javac -classpath .:hadoop-0.20.1-core.jar:stanford-parser.jar -d ep WordCount.java 

jar cvf ep.jar -C ep . 

bin/hadoop jar ep.jar WordCount gutenburg gutenburg1 

執行我收到以下錯誤後:

lang.ClassNotFoundException: edu.stanford.nlp.parser.lexparser.LexicalizedParser 

類是在斯坦福大學parser.jar是...

瓦在可能是可能的問題?

感謝

+0

此文件屬於Standford Parser - http://javasearch.buggybread.com/home.php?keyword=edu.stanford.nlp.parser.lexparser。LexicalizedParser – 2016-02-15 21:41:14

回答

2

我認爲你需要調用的Hadoop時也,而不只是編譯器添加斯坦福解析器罐子。 (如果你看ep.jar,我想它只會有一個文件 - WordCount.class)

E.g.

bin/hadoop jar ep.jar WordCount -libjars stanford-parser.jar gutenburg gutenburg1 

See Map/Reduce Tutorial

+1

嗨,我試過你建議的命令,但我得到這個錯誤 異常在線程「main」java.lang.ClassNotFoundException:-libjars – vana 2010-05-07 03:10:08

+0

嗨,我用正確的地方更新了與libjars的職位。請再試一次! – mdma 2010-05-07 08:23:06

+0

我試過你發佈的命令,得到這個錯誤 異常在線程「main」org.apache.hadoop.mapred.InvalidInputException:輸入路徑不存在:hdfs:// localhost:11111/user/hadoop/-libjars – vana 2010-05-08 07:01:54

0

另一種選擇,因爲-libjars你可以嘗試似乎並不爲你工作是一切打包成一個jar,即你的代碼+的依賴關係到一個JAR。

這就是它在〜Hadoop-0.18.0之前必須完成的工作(在那裏他們的某處修復了這個問題)。

使用ant(我在eclipse中使用ant)可以設置一個構建,解包依賴並將它們添加到目標構建項目。你可能可以自己破解這個,通過手動解開依賴jar並將內容添加到你的jar中。

即使我現在使用0.20.1,我仍然使用這種方法。它使命令行的工作更簡單。

1

mdma處於正確的軌道,但您還需要您的作業驅動程序來實施工具。

1

我有同樣的問題。我認爲-libjars選項沒有被程序識別的原因是因爲你沒有通過調用GenericOptionsParser.getRemainingArgs()來解析它。在Hadoop 0.21.0的WordCount.java示例中(在mapred/src/examples/org/apache/hadoop/examples /中),找到了這段代碼,並在我的程序中執行相同的操作後,-libjars comma-separated-罐子是公認:

String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); 
if (otherArgs.length != 2) { 
    System.err.println("Usage: wordcount <in> <out>"); 
    System.exit(2); 
} 

... 
FileInputFormat.addInputPath(job, new Path(otherArgs[0])); 
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); 
+0

我試過了,但它似乎不起作用 – Gavriel 2014-04-09 08:59:52

1

我剛剛發現,你可以簡單地編輯$ HADOOP_HOME/conf目錄/ hadoop-env.sh並添加JAR來HADOOP_CLASSPATH。 這可能是最簡單和最有效的。

-1

@Kuro Kurosaka我下載了hadoop的源代碼jar,打開它,得出了同樣的結論。這是網上提供的WordCount示例缺少的必要代碼。使用GenericOptionParser和-libjars參數修復了我嵌套的ClassNotFound異常,並且我的作業正在運行。