我正在学习如何用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
我找了好几个小时都没有结果。任何人都可以帮我。
2条答案
按热度按时间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}
e5njpo682#
我可以看到这个链接示例文件夹结构是maven。我在那个链接中看不到pom.xml。
我们可以从
provided
至runtime
您需要编写assembly.xml(将您的应用程序库和相关的依赖项打包到tar文件中),并且需要将它从pom.xml引用到打包mongo-hadoop-core.jar以及集群中未安装的其他依赖项。如果您解压缩上面提到的tar文件,并且可以引用类路径,例如:hadoopjar/lib/*main类,其中lib folder包含所有依赖项,比如mongodb。
如果mongodb和相关组件安装在集群中,我们可以提到类路径,如下面的示例所示。
也看看这个答案他们是怎么用的
libjars