在Mongo的数据上运行Map/Reduce的最佳方式是什么?

问题描述:

我有一个大的Mongo数据库(100GB)托管在云中(MongoLab或MongoHQ)。我想对数据运行一些Map/Reduce任务来计算一些昂贵的统计数据,并想知道完成这个任务的最佳工作流程。理想情况下,我想使用亚马逊的Map/Reduce服务来完成此操作,而不是维护我自己的Hadoop群集。在Mongo的数据上运行Map/Reduce的最佳方式是什么?

将数据库中的数据复制到S3是否合理?然后在其上运行Amazon Map/Reduce?或者有更好的方法来完成这件事。

此外,如果进一步下线,我可能想像每天那样频繁地运行查询,所以S3上的数据需要反映Mongo中的内容,这会使事情变得复杂吗?

任何建议/战争故事将是超级有用的。

Amazon S3提供了一个名为S3DistCp的实用程序来获取数据进出S3。运行亚马逊的EMR产品时通常会使用此功能,并且您不想承载自己的群集或使用实例来存储数据。 S3可以为您存储所有数据,EMR可以从/向S3读取/写入数据。

但是,传输100GB将需要时间,如果您计划多次执行此操作(即超过一次性批处理作业),这将成为处理过程中的重大瓶颈(特别是在预计数据增长)。

看起来你可能不需要使用S3。 Mongo已经实现了一个适配器来实现MongoDB之上的map reduce任务。 http://blog.mongodb.org/post/24610529795/hadoop-streaming-support-for-mongodb

这看起来很吸引人,因为它可以让你在python/js/ruby​​中实现MR。

我认为这种mongo-hadoop设置比将100GB数据复制到S3更高效。

更新:使用map-reduce与mongo的示例here