hadoop与mongodb:noclassdeffounderror mongoconfigutil

kyks70gy  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(477)

我正在学习如何用mongodb数据作为输入在hadoop中编写map/reduce作业。所以我遵循这个例子,但我得到了以下错误:

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

我找了好几个小时都没有结果。任何人都可以帮我。

4smxwvx5

4smxwvx51#

意思是 mongo-hadoop-core.jar 在编译时可用,但在运行时不可用。
试着用类路径中添加的依赖jar运行应用程序
例子: java -cp mongo-hadoop-core.jar<++other dependencies> MainClass 编辑1
如果你用 hadoop
检查 classpath 通过执行 hadoop classpath 它将打印类路径中的dir/jar。
如果依赖jar不在类路径中,则将它们添加到 classpath 使用 export 命令然后执行 hadoop jar yourjar.jar mainClass 编辑2
利用 libjars 选项 hadoop jar myjar.jar mainClass -libjars ${LIBJARS}

e5njpo68

e5njpo682#

我可以看到这个链接示例文件夹结构是maven。我在那个链接中看不到pom.xml。
我们可以从 providedruntime 您需要编写assembly.xml(将您的应用程序库和相关的依赖项打包到tar文件中),并且需要将它从pom.xml引用到打包mongo-hadoop-core.jar以及集群中未安装的其他依赖项。

export HADOOP_CLASSPATH=`hadoop classpath`:`hbase classpath`
hadoop jar .... -cp $HADOOP_CLASSPATH MainClass

如果您解压缩上面提到的tar文件,并且可以引用类路径,例如:hadoopjar/lib/*main类,其中lib folder包含所有依赖项,比如mongodb。
如果mongodb和相关组件安装在集群中,我们可以提到类路径,如下面的示例所示。
也看看这个答案他们是怎么用的 libjars

相关问题