我正在使用 Java MongoDB Connector 来针对MongoDB运行Hadoop Mapreduce作业。
我正在使用MongoConfigUtil
MongoConfigUtil.setInputURI( conf, "mongodb://host/db.collection" );
MongoConfigUtil.setOutputURI( conf, "mongodb://host/db.collectionOut" );
Job正确获取指定集合中的所有文档
有没有办法限制提取文件的数量?
我希望实现此查询( Mongo Style ):
db.collection.find().limit(1000)
我知道MongoConfigUtil
有SetQuery
方法,但如何设置限制查询?任何提示?
我尝试添加
MongoConfigUtil.setLimit(conf, 1000)
但我仍然收集了该系列中的所有文件。
答案 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).