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

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

我有一个大型 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/

相关文章:

hadoop - 为什么MapReduce在映射步骤中麻烦将每个值映射到1?

python - 使用Python将文件上传到S3(保留原始文件夹结构)并具有正确的MIME类型

java - 是否可以在Java中创建具有多个角色的MongoDb用户?

php - 从 $类别中选择 *

node.js - MongoDB 深度嵌套

hadoop - 什么是无状态节点? Hadoop 节点如何是无状态的?

执行 Mapreduce 时出现 Java 堆空间错误

c# - 如何创建包含 $redact 的 c# mongodb 管道

java - 使用 Amazon s3 Java SDK 的异常

python - 为什么我在使用 boto 上传文件时得到 400?