Hadoop with mongoDB : NoClassDefFoundError MongoConfigUtil



我正在学习如何在hadoop中使用mongodb数据作为输入来编写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

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

这意味着mongo-hadoop-core.jar在编译时可用,但在运行时不可用。

尝试在类路径中添加依赖jar来运行应用程序

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

编辑1

如果您使用hadoop shell 运行

通过执行hadoop classpath检查classpath,它将打印类路径中的dir/jars。

如果依赖jar不在类路径中,则使用export命令将它们添加到classpath中,然后执行hadoop jar yourjar.jar mainClass

编辑2

利用libjars选项

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

我可以看到这个链接示例文件夹结构是maven。我在那个链接中看不到pom.xml。

我们可以将maven范围从provided设置为runtime

  1. 您需要编写assembly.xml(将您的应用程序库和相关依赖项打包到tar文件中),并需要将其从pom.xml引用到包mongo-hadoop-core.jar以及安装在集群中的其他依赖项
export HADOOP_CLASSPATH=`HADOOP类路径`:`hbase类路径`
hadoop jar .... -cp $HADOOP_CLASSPATH MainClass

如果解压缩上面提到的tar文件,则可以引用类路径,例如:hadoop jar/lib/*主类其中lib文件夹包含所有的依赖项,比如mongodb。

  1. 如果集群中安装了mongodb和相关组件,我们可以提到类路径,如下例所示

另请参阅他们如何使用libjars

最新更新