我有一个大型 Mongo 数据库 (100GB) 托管在云中(MongoLab 或 MongoHQ)。我想对数据运行一些 Map/Reduce 任务来计算一些昂贵的统计数据,并且想知道完成这项工作的最佳工作流程是什么。理想情况下,我想使用 Amazon 的 Map/Reduce 服务来做到这一点,而不是维护自己的 Hadoop 集群。
将数据从数据库复制到 S3 是否有意义。然后在上面运行 Amazon Map/Reduce?或者有更好的方法来完成这项工作。
此外,如果再往下走,我可能希望像每天一样频繁地运行查询,因此 S3 上的数据需要反射(reflect) Mongo 中的内容,这会使事情复杂化吗?
任何建议/ war 故事都会非常有帮助。
最佳答案
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 更有效。
更新:将 map-reduce 与 mongo 一起使用的示例 here .
关于mongodb - 在 Mongo 的数据上运行 Map/Reduce 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10994340/