2016-02-27 57 views
0

我正在使用Java MongoDB Connector針對MongoDB運行Hadoop Mapreduce作業。
Hadoop MongoConfigUtil查詢限制

我設置的輸入和輸出URI與MongoConfigUtil

MongoConfigUtil.setInputURI(conf, "mongodb://host/db.collection"); 
MongoConfigUtil.setOutputURI(conf, "mongodb://host/db.collectionOut"); 

,且作業正確地獲取所有文件指定的收藏。
有沒有辦法可以限制獲取文件的數量

我想實現這個查詢(蒙戈風格):

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

我知道MongoConfigUtil有一個SetQuery方法,但我怎麼可以設置限制查詢?任何提示?

我嘗試添加

MongoConfigUtil.setLimit(conf, 1000) 

但我仍然得到集合中的所有文件。

回答

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 query(find())。 您可以根據您的情況找到另一種過濾像{fieldName:{$ lt:20}}這樣的查詢的方法。另外,您可以根據您使用投影限制來創建單獨的集合,然後在其中應用MapReduce。

最後,SetQuery用於過濾集合。

+0

感謝,一個setLimit方法已被添加到該MongoInputSplit類 –