hadoop mongoconfigutil查询限制

ioekq8ef  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(283)

我使用javamongodb连接器对mongodb运行hadoopmapreduce作业。
我正在用 MongoConfigUtil ```
MongoConfigUtil.setInputURI( conf, "mongodb://host/db.collection" );
MongoConfigUtil.setOutputURI( conf, "mongodb://host/db.collectionOut" );

作业正在正确获取指定集合中的所有文档。
有没有办法限制提取文档的数量?
我希望实现这个查询(mongo风格):

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

我知道 `MongoConfigUtil` 有一个 `SetQuery` 方法,但如何设置限制查询?有什么提示吗?
我试图补充

MongoConfigUtil.setLimit(conf, 1000)

但我还是拿到了所有的文件。
xmq68pz9

xmq68pz91#

我使用mongoinputsplit类的setlimit方法找到了解决方案,它传递了要获取的文档数。

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

mongoconfigutil设置限制
允许用户设置mongoinputsplits的限制(hadoop-267)。

lzfw57am

lzfw57am2#

setsplitsize 8 mb是默认大小,此属性的优先级高于setlimit(mongo.input.limit)。

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

在上面的示例中,我将值设置为5MB。如果为每个mapper.setlimit获取的每个块指定的限制大小(例如1000),则表示每个块(分割)查询限制的限制。
我想您应该限制整个mapreduce过程的查询。setquery是find()中的查询,它必须以类似mongodb的json格式表示。据我所知,您不能在mongo query(find())中进行限制。您可以根据自己的情况找到另一种过滤查询的方法,如{fieldname:{$lt:20}}。此外,您可以根据使用投影的限制创建一个单独的集合,然后在那里应用mapreduce。
最后,使用setquery过滤集合。

相关问题