java - Mongodb map 减少与 Apache Spark map 减少

标签 java mongodb hadoop apache-spark

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

我想根据某些条件聚合数据。

我找到了两种方法来完成它

  • 使用Mongodb map reduce函数查询
  • 通过将 Mongodb 连接到 spark,使用 Apache Spark map reduce 功能。

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

我的查询是 ?

Mongodb 和 Apache Spark 使用相同的 Map reduce 算法吗?哪种方法(M.R 使用 Spark 或原生 Mongodb map reduce)更高效

最佳答案

Does Mongodb and Apache Spark use the same Map reduce algorithm and which method (M.R using Spark or native Mongodb map reduce) is more efficient ?

广义上的map-reduce算法,是的。尽管在实现方面它们是不同的(即 JavaScript 与 Java Jar)

如果您的问题更多是关于找出两者对您的用例的适用性,您应该从其他方面考虑。 特别是如果对于您的用例,您发现两者在性能上相似。让我们在下面探索:

假设您有资源(时间、金钱、服务器)和专业知识来维护 Apache Spark沿边集群MongoDB集群,然后拥有一个单独的处理框架(Spark)和数据存储(MongoDB)是理想的。维护 CPU/RAM 资源仅用于 MongoDB 服务器中的数据库查询,CPU/RAM 资源仅用于密集型 ETL在 Spark 节点中。然后将处理结果写回 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额外的优化技巧。

如果您的用例不需要实时处理,您可以配置 delayedhidden MongoDB Replica Set的节点.它将作为您的聚合/map-reduce 处理的专用服务器/实例。分离处理节点和数据存储节点。另见 Replica Set Architectures .

关于java - Mongodb map 减少与 Apache Spark map 减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41286802/

相关文章:

java - AndroidX "ArrayAdapter requires the resource ID to be a TextView"错误

java - 执行多个 if else 语句的更有效方法

javascript - 使用 mongoose 插入 MongoDB 时在键中使用 "@"

regex - Mongodb正则表达式查询字符串的前2个字符

hadoop - CoreOS & HDFS - 在 Linux 容器/Docker 中运行分布式文件系统

java - Paypal 自动充值

java - 如何连续应用两个正则表达式

javascript - FindAndUpdate 如何检查文档是否真的更新了

java - Spark 作业失败,因为它找不到 hadoop core-site.xml

hadoop - 如何理解 Flink 中的流表?