簡體   English   中英

帶有mongoDB的Hadoop:NoClassDefFoundError MongoConfigUtil

[英]Hadoop with mongoDB : NoClassDefFoundError MongoConfigUtil

我正在學習如何使用mongodb數據作為輸入在hadoop中編寫地圖/約簡作業。 所以我遵循了這個示例,但是出現以下錯誤:

 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

我一直在尋找沒有任何結果的小時。 任何人都可以幫助我。

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

嘗試使用在classpath中添加的依賴項jar運行應用程序

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

編輯1

如果您正在使用hadoop shell運行

通過執行hadoop classpath檢查classpath hadoop classpath ,它將在類路徑中打印dir / jars。

如果依賴的jar不在類路徑中,請使用export命令將其添加到classpath然后執行hadoop jar yourjar.jar mainClass

編輯2

利用libjars選項

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

我可以看到此鏈接示例的文件夾結構是maven。 我不能在該鏈接中看到pom.xml。

我們可以將Maven范圍從providedruntime

  1. 你需要寫assembly.xml (打包應用程序的lib和tar文件相關的依賴),並需要從pom.xml的是指它與安裝在群集中的其他依賴關系沿着封裝蒙戈- Hadoop的core.jar添加。
export HADOOP_CLASSPATH=`hadoop classpath`:`hbase classpath`
hadoop jar .... -cp $HADOOP_CLASSPATH MainClass

如果解壓縮上述的tar文件,則可以引用類路徑,例如:hadoop jar .... .//lib/*主類,其中lib文件夾包含您的所有依賴項,例如mongodb。

  1. 如果在集群中安裝了mongo db和相關組件,我們可以像下面的示例一樣提及classpath

另請參閱此答案,他們如何使用libjars

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM