1

MongoDB Hadoop ストリーミング コネクタを起動したいので、Hadoop の互換バージョン (2.2.0) をダウンロードしました ( https://github.com/mongodb/mongo-hadoop/blob/master/README.md#apache-を参照)。 hadoop-22 )

git リポジトリ mongohadoop のクローンを作成し、build.sbt hadoopRelease を 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 を使用しています。ありがとうございます。

4

1 に答える 1

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 リリースをすぐに出すように努めます。当面のジラ チケットはこちら: https://jira.mongodb.org/browse/HADOOP-121

于 2014-03-06T17:00:34.030 に答える