2016-05-18 93 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