Mongodb map reduce vs Apache Spark map reduce

时间:2016-12-22 15:41:06

标签: java mongodb hadoop apache-spark

我有一个用例,我的Mongodb中有3M记录。

我想根据某些条件汇总数据。

我找到两种方式来完成它

  • 使用Mongodb map reduce function query
  • 通过将Mongodb连接到spark来使用Apache Spark map reduce函数。

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

我的查询

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

1 个答案:

答案 0 :(得分:4)

  

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

广义上的map-reduce算法,是的。虽然实现明智,但它们是不同的(即JavaScript与Java Jar)

如果您的问题更多的是要找出两者对您的用例的适用性,您应该从其他方面考虑。 特别是如果您的用例,您发现它们的性能相似。我们来看下面的内容:

假设您拥有在Apache Spark集群旁边维护MongoDB集群的资源(时间,资金,服务器)和专业知识,那么就拥有一个单独的处理框架(Spark)和数据存储(MongoDB) )是理想的。维护CPU / RAM资源仅用于MongoDB服务器中的数据库查询,以及仅用于Spark节点中密集ETL的CPU / RAM资源。然后将处理结果写回MongoDB。

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

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

如果您没有资源和专业知识来维护Spark群集,请将其保留在MongoDB中。值得一提的是,对于大多数聚合操作,Aggregation Pipeline提供了比MongoDB map-reduce更好的性能和更一致的接口。如果您可以将map-reduce转换为聚合管道,我建议您这样做。另请参阅Aggregation Pipeline Optimisation以获取额外的优化提示。

如果您的用例不需要实时处理,则可以配置delayedhiddenMongoDB Replica Set节点。它将作为聚合/映射减少处理的专用服务器/实例。分离处理节点和数据存储节点。另请参阅Replica Set Architectures