mongodb-map-reduce与apache-spark-map-reduce

sqougxex  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(369)

我有一个用例,在我的mongodb中有3m条记录。
我想根据某些条件聚合数据。
我找到了两种方法来实现它
使用mongodb map reduce函数查询
通过将mongodb连接到spark,使用apachespark map reduce函数。
我使用上述方法成功地执行了我的用例,并发现两者的性能相似。
我的问题是?
mongodb和apachespark是否使用了相同的map reduce算法?哪种方法(m.r使用spark或原生mongodb map reduce)更有效?

33qvvth1

33qvvth11#

mongodb和apachespark使用相同的map reduce算法吗 哪种方法(m.r使用spark或原生mongodb map reduce)更有效 ?
广义的Map缩减算法,是的。尽管在实现方面它们是不同的(比如javascript和javajar)
如果您的问题更多的是找出这两种方法是否适合您的用例,那么您应该从其他方面考虑。尤其是对于您的用例,您发现两者在性能上是相似的。下面我们来探讨一下:
假设您有资源(时间、金钱、服务器)和专业知识来维护一个apachespark集群和mongodb集群,那么拥有一个单独的处理框架(spark)和数据存储(mongodb)是理想的。在mongodb服务器中维护cpu/ram资源只用于数据库查询,在spark节点中维护cpu/ram资源只用于密集的etl。然后将处理结果写回mongodb。
如果您使用的是用于apachespark的mongodb连接器,那么您可以利用聚合管道和(辅助)索引来仅对spark需要的数据范围进行etl。与拉不必要的数据到spark节点相反,这意味着更多的处理开销、硬件要求和网络延迟。
您可能会发现以下资源很有用:
mongodb connector for spark:入门-包含聚合示例。
mongodb spark连接器java api
m233:spark和mongodb入门-免费在线课程
如果您没有资源和专业知识来维护spark集群,那么将其保存在mongodb中。值得一提的是,对于大多数聚合操作, 这个 聚合管道 提供比mongodb的map reduce更好的性能和更一致的接口。如果您可以将map reduce转换为聚合管道,我建议您这样做。另请参阅聚合管道优化以获取额外的优化提示。
如果您的用例不需要实时处理,您可以配置mongodb副本集的延迟或隐藏节点。它将作为聚合/Map缩减处理的专用服务器/示例。分离处理节点和数据存储节点。另请参见副本集体系结构。

相关问题