从Mongo运行Map / Reduce数据的最佳方法是什么?

时间:2012-06-12 10:01:04

标签: mongodb hadoop amazon-s3 amazon-web-services mapreduce

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

将数据从数据库复制到S3是否有意义。然后运行Amazon Map / Reduce吗?或者有更好的方法来完成这项工作。

此外,如果我想进一步下线,我可能希望每天都经常运行查询,因此S3上的数据需要反映Mongo中的内容会使事情变得复杂吗?

任何建议/战争故事都会非常有用。

1 个答案:

答案 0 :(得分:9)

Amazon S3提供了一个名为S3DistCp的实用程序,用于将数据输入和输出S3。这通常在运行Amazon的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更有效。

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