我有一个大型的Mongo数据库(100GB)托管在云中(MongoLab或MongoHQ)。我想对数据运行一些 Map/Reduce 任务以计算一些昂贵的统计数据,并且想知道完成此操作的最佳工作流程是什么。理想情况下,我想使用Amazon的Map/Reduce服务来做到这一点,而不是维护我自己的Hadoop集群。
将数据从数据库复制到 S3 是否有意义。然后在上面运行Amazon Map/Reduce?或者有更好的方法来完成这项工作。
此外,如果再往下,我可能想像每天一样频繁地运行查询,因此 S3 上的数据需要反映 Mongo 中的数据,这会让事情复杂化吗?
任何建议/战争故事都会超级有帮助。
提供了一个名为 S3DistCp 的实用程序,用于将数据传入和传出 S3。这通常在运行 Amazon 的 EMR 产品时使用,并且您不想托管自己的集群或用完实例来存储数据。S3 可以为您存储所有数据,EMR 可以从 S3 读取/写入数据。
但是,传输 100GB 需要时间,如果您计划多次执行此操作(即不止一次性批处理作业),这将是处理过程中的重大瓶颈(尤其是在数据预计增长的情况下)。
看起来您可能不需要使用 S3。Mongo已经实现了一个适配器,用于在MongoDB之上实现mapreduce作业。http://blog.mongodb.org/post/24610529795/hadoop-streaming-support-for-mongodb
这看起来很有吸引力,因为它允许你在python/js/ruby中实现MR。
我认为这种mongo-hdoop设置比将100GB的数据复制到S3更有效。
更新:在这里使用map-reduce和mongo的示例。