多个集合作为hadoop mapreduce作业的mongodb输入

时间:2014-01-02 05:57:33

标签: mongodb hadoop

我正在尝试传递多个集合作为执行map-reduce hadoop作业的输入。  我发现版本1.2中的MultiCollectionSplitBuilder具有该功能。以下示例发布在github中,这是不起作用任何帮助表示赞赏。

 MultiCollectionSplitBuilder mcsb = new MultiCollectionSplitBuilder();
        mcsb.add(new MongoURI("mongodb://localhost:27017/mongo_hadoop.yield_historical.in"),
                 (MongoURI)null, // authuri
                 true, // notimeout
                 (DBObject)null, // fields
                 (DBObject)null, // sort
                 (DBObject)null, // query
                 false,
                 MultiMongoCollectionSplitter.class)
            .add(new MongoURI("mongodb://localhost:27017/mongo_hadoop.yield_historical.in"),
                 (MongoURI)null, // authuri
                 true, // notimeout
                 (DBObject)null, // fields
                 (DBObject)null, // sort
                 new BasicDBObject("_id", new BasicDBObject("$gt", new Date(883440000000L))),
                 false, // range query
                 MultiMongoCollectionSplitter.class);

        Configuration conf = new Configuration();
        conf.set(MultiMongoCollectionSplitter.MULTI_COLLECTION_CONF_KEY, mcsb.toJSON());

1 个答案:

答案 0 :(得分:0)

感谢你指出这个问题。这是一个例子中的错误。已提交HADOOP-109来解决此问题。

我通过将所有输入集合的子拆分器类设为null来修复此问题。请参阅this pull request

为了使其正常工作,请确保将以下参数传递给Hadoop:

-D mongo.splitter.class=com.mongodb.hadoop.splitter.MultiMongoCollectionSplitter

以上修复是一种解决方法。为您提供有关该问题的更多详细信息。根据设计,子分割器类可以是除MultiMongoCollectionSplitter之外的任何分割器类。但是有一个错误HADOOP-110阻止我们这样做。这个问题将在未来版本中尽快解决。