2016-05-18 97 views
1

我正在學習如何使用mongodb數據作爲輸入來編寫hadoop中的map/reduce作業。所以我也跟着this例子,但我得到了以下錯誤:使用mongoDB的Hadoop:NoClassDefFoundError MongoConfigUtil

Exception in thread "main" java.lang.NoClassDefFoundError: com/mongodb/hadoop/util/MongoConfigUtil 
    at WordCount.main(WordCount.java:58) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.apache.hadoop.util.RunJar.run(RunJar.java:221) 
    at org.apache.hadoop.util.RunJar.main(RunJar.java:136) 
Caused by: java.lang.ClassNotFoundException: com.mongodb.hadoop.util.MongoConfigUtil 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 7 more 

我已經沒有任何搜索結果幾個小時。任何人都可以幫助我。

+0

你試過-libjars選項?看到這個例子https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html –

+0

pom。xml不可見。它非常難以理解和回答什麼是缺少你如何部署 –

回答

1

這意味着mongo-hadoop-core.jar在編譯時可用,但在運行時不可用。

嘗試運行在類路徑中加入依賴罐子您的應用程序

例子:java -cp mongo-hadoop-core.jar<++other dependencies> MainClass

編輯1

如果您使用hadoop外殼

檢查classpath通過執行運行它將打印類路徑中的dir/jar。

如果相關的罐子不是在類路徑中使用classpathexport命令添加它們然後執行hadoop jar yourjar.jar mainClass

EDIT 2

化妝用libjars選項

hadoop jar myjar.jar mainClass -libjars ${LIBJARS}

+0

問題是,在hadoop中,我們應該從應用程序中提取jar並使用「hadoop jar name.jar className」執行它,所以我不知道如何包含其他罐子。 –

+0

已更新的答案,請檢查 – Saravana

1

的我可以看到這個鏈接示例文件夾結構是maven。我可以看到該鏈接中的pom.xml。

我們可以行家範圍設置爲從providedruntime

  1. 你需要寫assembly.xml(打包應用程序的lib和tar文件相關的依賴),並需要從pom.xml的包裝mongo-指它hadoop-core.jar以及其他依賴關係,其中NOT安裝在羣集中。
 
export HADOOP_CLASSPATH=`hadoop classpath`:`hbase classpath` 
hadoop jar .... -cp $HADOOP_CLASSPATH MainClass 

如果你解壓上面提到的tar文件,你可以參考例如類路徑: Hadoop的罐子.... ../lib/*主要班組長 其中lib文件夾contails所有你的依賴也像你的mongodb一樣。

  • 如果蒙戈db和相關組件被安裝在集羣中,我們可以提到的類路徑像下面的例子。
  • 也看到這個答案,他們是如何使用libjars