【问题标题】:passing all collections of a mongoDB as input to mapreduce hadoop将 mongoDB 的所有集合作为输入传递给 mapreduce hadoop
【发布时间】:2013-12-24 08:03:38
【问题描述】:

我需要将 MongoDB 中的所有数据库集合作为 Hadoop MR 作业的输入。有一种方法允许多输入:

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);

但我的数据库中有大约 10 个集合。上述方法只允许 2 个集合争论。 我需要做的就是仅在 mapper 方法中获取所有集合。我的 Reducer 对它们都是一样的。

感谢任何帮助。

【问题讨论】:

    标签: mongodb hadoop mapreduce mongo-collection


    【解决方案1】:

    您可以继续添加到MultiCollectionSplitBuilder

        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
                )
                .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
                )
        ;
    

    【讨论】:

    • 谢谢艾伦。但是我的程序无法使用此选项进行连接。只有当我使用 MongoConfigUtil.setInputURI() 传递一个集合时,它才有效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 2020-03-17
    • 2015-01-01
    • 1970-01-01
    相关资源
    最近更新 更多