2016-12-22 125 views
2

我有我的Mongodb中有3M记录的用例。Mongodb映射减少与Apache Spark映射减少

我想基于某些条件来汇总数据。

我发现两种方式来完成它

  • 使用MongoDB的地图功能降低查询
  • 使用Apache星火地图通过连接到mongodb的火花减少功能。

我使用上述方法成功执行了我的用例,发现两者都有相似的性能。

我的查询结果是

Mongodb和Apache Spark使用相同的Map Reduce算法和哪种方法(M.R使用Spark或本地Mongodb映射reduce)更有效

回答

4

确实的MongoDB和Apache火花使用相同的地图减少算法和该方法(M.R使用火花或天然的MongoDB地图减少)是更有效的

广义上的map-reduce算法,是的。尽管它们的实现方式明显不同(即JavaScript vs Java Jar),但您应该从其他方面考虑。如果您的问题更多地关于如何找出两者的适用性,请考虑其他方面。 特别是如果您的使用案例中,您发现两者在性能上相似。下面就让我们来探讨:

假设你有足够的资源(时间,金钱,服务器)和专业知识,保持沿侧MongoDB集群的Apache Spark集群,然后有一个单独的处理框架(星火)和数据存储(MongoDB的)是理想。维护CPU/RAM资源仅用于在MongoDB服务器中查询数据库,以及仅在Spark节点中使用密集型ETL的CPU/RAM资源。之后将处理结果写回到MongoDB。

如果您使用的是MongoDB Connector for Apache Spark,则可以利用Aggregation Pipeline(secondary) indexes仅执行ETL数据范围的ETL需求。与将不必要的数据拉到Spark节点相反,这意味着更多的处理开销,硬件要求,网络延迟。

您可能会发现下面的资源非常有用:

如果你不具备的资源和专业知识,保持星火簇,然后保存在MongoDB中。值得一提的是,对于大多数聚合操作,Aggregation Pipeline比MongoDB的map-reduce提供更好的性能和更一致的接口。如果您可以将您的map-reduce转换为聚合管道,我会建议您这样做。另请参阅Aggregation Pipeline Optimisation了解更多优化技巧。

如果您的使用案例不需要实时处理,您可以配置delayedhidden节点MongoDB Replica Set。这将用作聚合/映射减少处理的专用服务器/实例。分离处理节点和数据存储节点。另见Replica Set Architectures