Java Hadoop与mongoDB:NoClassDefFoundErrorMongoConfigUtil

Java Hadoop与mongoDB:NoClassDefFoundErrorMongoConfigUtil,java,mongodb,hadoop,mapreduce,mongodb-hadoop,Java,Mongodb,Hadoop,Mapreduce,Mongodb Hadoop,我正在学习如何使用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.NativeMethodAccessorImp

我正在学习如何使用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

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

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

尝试在类路径中添加依赖项jar的情况下运行应用程序

示例:
java-cp mongo-hadoop-core.jar MainClass

编辑1

如果您正在使用hadoop运行
shell

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

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

编辑2

使用
libjars
选项


hadoop-jar-myjar.jar mainClass-libjars${libjars}
我可以看到这个链接示例文件夹结构是maven。我在那个链接中看不到pom.xml

我们可以将maven范围从
提供的
设置为
运行时

  • 您需要编写(将您的应用程序库和相关依赖项打包到tar文件中),并需要将其从pom.xml引用到包mongo-hadoop-core.jar以及集群中未安装的其他依赖项
  • 如果您解压缩上面提到的tar文件,您可以引用类路径,例如: hadoop jar/lib/*主类 其中lib文件夹包含所有依赖项,比如mongodb

  • 如果mongo db和相关组件安装在集群中,我们可以提到类路径,如下面的示例所示

  • 还可以看到这个答案他们是如何使用的

    问题是,在hadoop中,我们应该从应用程序中提取jar,并使用“hadoop jar name.jar className”执行它,所以我不知道如何将其他jar包含在其中。您尝试过-libjars选项吗?以pom.xml不可见为例,请参见此。很难理解和回答您在部署时遗漏了什么 export HADOOP_CLASSPATH=`hadoop classpath`:`hbase classpath`
    hadoop jar .... -cp $HADOOP_CLASSPATH MainClass