为 MongoDB 编写的 map-reduce 算法以后可以移植到 Hadoop 上吗?

数据挖掘 可扩展性 apache-hadoop 地图减少 mongodb
2021-09-23 05:19:43

在我们公司,我们有一个 MongoDB 数据库,其中包含大量非结构化数据,我们需要在该数据库上运行 map-reduce 算法来生成报告和其他分析。我们有两种方法可供选择来实施所需的分析:

  1. 一种方法是将数据从 MongoDB 提取到 Hadoop 集群,并在 Hadoop 平台中完全进行分析。但是,这需要在准备平台(软件和硬件)和教育团队使用 Hadoop 并为其编写 map-reduce 任务方面进行大量投资。

  2. 另一种方法是将我们的精力放在设计 map-reduce 算法上,并在 MongoDB map-reduce 功能上运行算法。通过这种方式,我们可以创建可以生成报告的最终系统的初始原型。我知道 MongoDB 的 map-reduce 功能与 Hadoop 相比要慢得多,但目前数据并没有那么大,这使它成为瓶颈,至少在接下来的六个月内不会。

问题是,使用第二种方法并为 MongoDB 编写算法,它们以后是否可以在几乎不需要修改和算法重新设计的情况下移植到 Hadoop?MongoDB 只支持 JavaScript,但编程语言差异很容易处理。但是,MongoDB 和 Hadoop 的 map-reduce 模型是否存在根本性差异,可能会迫使我们大量重新设计算法以移植到 Hadoop?

3个回答

您可以在 Hadoop 中使用 map reduce 算法,而无需使用 Java 对其进行编程。它被称为流式传输,其工作方式类似于 Linux 管道。如果你相信你可以移植你的函数来读写终端,它应该可以很好地工作。是示例博客文章,展示了如何在 Hadoop 中使用用 Python 编写的 map reduce 函数。

如果您仅使用 mongo 进行原型制作,最后肯定会有翻译任务。

当您在 mongodb 上运行 MapReduce 任务时,它具有内置的数据源和结构。当您最终转换为 hadoop 时,您的数据结构可能看起来不一样。您可以利用 mongodb-hadoop 连接器直接从 hadoop 中访问 mongo 数据,但这并不像您想象的那么简单。一旦你有一个原型,IMO,弄清楚如何以最佳方式进行转换的时间将更容易证明是合理的。

虽然您需要翻译 mapreduce 函数,但基本伪代码应该适用于两个系统。您将找不到任何可以在 MongoDB 中完成但使用 Java 无法完成的事情,或者使用 Java 完成的事情要复杂得多。

您还可以创建 MongoDB-Hadoop连接