我想启动MongoDB Hadoop Streaming连接器,所以我下载了兼容版本的Hadoop(2.2.0)(参见https://github.com/mongodb/mongo-hadoop/blob/master/README.md#apache-hadoop-22)
我克隆了git存储库mongohadoop,更改了build.sbt hadoopRelease for 2.2:
$ cat build.sbt
name := "mongo-hadoop"
organization := "org.mongodb"
hadoopRelease in ThisBuild := "2.2"
然后我发起了:
$ ./sbt package
$ ./sbt mongo-hadoop-streaming/assembly
$ cp core/target/mongo-hadoop-core_2.2.0-1.2.0.jar ../hadoop-2.2.0/lib/
$ cp mongo-2.7.3.jar ../hadoop-2.2.0/lib/ # Previously downloaded
$ cd ../hadoop-2.2.0/
$ ./bin/hadoop jar ../mongo-hadoop/streaming/target/mongo-hadoop-streaming-assembly-1.1.0.jar -mapper ...
我明白了:
Exception in thread "main" java.lang.ClassNotFoundException: com.mongodb.hadoop.streaming.MongoStreamJob
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:249)
at org.apache.hadoop.util.RunJar.main(RunJar.java:205)
我不明白为什么,我几乎尝试了所有支持流媒体的版本,但我总是得到同样的错误!
我确切地说我在Mac OS X上。 谢谢!
答案 0 :(得分:2)
这实际上是一个将在即将发布的版本中修复的错误。需要删除主类,但生成的清单不是。您可以通过从流式传输jar中的清单中删除Main-Class条目来调整jar。如果你在流媒体jar的目录中运行下面的脚本,它将为你解决这个问题:
#! /bin/sh
M=META-INF/MANIFEST.MF
mkdir tmp
cd tmp
cp ../$1 .
JAR=$1
jar xf ${JAR}
sed -e '/Main-Class/d' ${M} >> ${M}.new
mv ${M}.new ${M}
jar cvfm ${JAR} ${M}
mv ${JAR} ..
cd ..
rm -r tmp
这不是超级漂亮,但应该让你超越驼峰。我们将尽快发布正式的1.2.1版本。这是同时的jira票:https://jira.mongodb.org/browse/HADOOP-121