Hadoop MongoConfigUtil查询限制

时间:2016-02-27 20:58:13

标签: java mongodb hadoop mapreduce mongodb-query

我正在使用 Java MongoDB Connector 来针对MongoDB运行Hadoop Mapreduce作业。

我正在使用MongoConfigUtil

设置输入和输出URI
MongoConfigUtil.setInputURI( conf, "mongodb://host/db.collection" ); 
MongoConfigUtil.setOutputURI( conf, "mongodb://host/db.collectionOut" ); 

Job正确获取指定集合中的所有文档 有没有办法限制提取文件的数量

我希望实现此查询( Mongo Style ):

db.collection.find().limit(1000)

我知道MongoConfigUtilSetQuery方法,但如何设置限制查询?任何提示?

我尝试添加

MongoConfigUtil.setLimit(conf, 1000)

但我仍然收集了该系列中的所有文件。

2 个答案:

答案 0 :(得分:0)

setSplitSize 8 MB是默认大小,此属性的优先级高于setLimit(mongo.input.limit)。

Example mongoConfig.setSplitSize(5); // MB - 8 MB Deafault

在上面的示例中,我将值设置为5 MB。 如果为每个Mapper.setLimit获取的每个块的规定限制大小(例如1000)表示每个块(拆分)查询限制的限制。

我认为您希望限制整个MapReduce进程的查询。 SetQuery是find()中的查询,必须用像MongoDB这样的JSON格式表示。到目前为止,我知道你不能限制mongo查询(find())。 您可以根据自己的情况找到另一种过滤{fieldName:{$ lt:20}}等查询的方法。此外,您可以根据使用投影限制创建单独的集合,然后在那里应用MapReduce。

最后,SetQuery用于过滤集合。

答案 1 :(得分:0)

我使用MongoInputSplit类的 setLimit 方法找到了解决方案,并传递了要获取的文档数。

myMongoInputSplitObj = new MongoInputSplit(*param*)
myMongoInputSplitObj.setLimit(100)

MongoConfigUtil setLimit
Allow users to set the limit on MongoInputSplits (HADOOP-267).