【问题标题】:MongoDB Hadoop connector streaming not runningMongoDB Hadoop 连接器流未运行
【发布时间】:2014-03-06 16:41:16
【问题描述】:

我想启动 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 更改为 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 上。 谢谢!

【问题讨论】:

    标签: mongodb hadoop hadoop-streaming mongodb-hadoop


    【解决方案1】:

    这实际上是一个错误,将在即将发布的版本中修复。该主类的需求已删除,但生成的清单没有。您可以通过从流 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

    【讨论】:

    • 谢谢,它解决了我的错误,但现在,我得到java.lang.ClassNotFoundException: -mapper,而不是com.mongodb.hadoop.streaming.MongoStreamJob:./bin/hadoop jar ../../mongo-hadoop/streaming/target/mongo-hadoop-streaming-assembly-1.1.0.jar -mapper ../../mongo-hadoop/streaming/examples/enron/enron_map.js -reducer ../../mongo-hadoop/streaming/examples/enron/enron_reduce.js我真的不知道Java有效(这就是为什么我想实际使用流媒体:))
    • 我想你会想要-libjars而不是'jar'。示例见github.com/mongodb/mongo-hadoop/blob/master/streaming/…
    • 谢谢,但在这种情况下你应该更新streaming/examples/enron/*.sh,因为它根本不是同一个命令......我不知道如何让2.2工作,所以我改为0.23现在它可以工作了。
    • 我一定会仔细检查该文档。感谢您的提醒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    相关资源
    最近更新 更多