0

我们有一个由多个 PostgreSQL 数据库组成的系统。每个数据库都有相同的表,即模式,但只承载数据的一部分(而不是完整的数据!)。分发数据的原因是我们的客户运行相当复杂的查询并执行多达 100 次计算每行。

通过将数据分布到多个数据库,我们希望减少每个数据库处理的工作量,并最终加快搜索速度。最后,我们结合每个数据库的结果来创建最终结果。

我的一个朋友建议查看 MapReduce (Hadoop)。在我看来,map-reduce 仅在单个工作人员共享相同的数据但对其执行不同类型的工作时才有意义(对应于多指令,单数据)。
然而,在我们的例子中,worker 应该执行相同的任务,但是对不同的数据执行该任务(对应于单个指令,多个数据)。

MapReduce (Hadoop) 对于在不同数据上执行的范式相同任务是否有意义?

4

1 回答 1

1

MapReduce (Hadoop) 对于在不同数据上执行的范式相同任务是否有意义?

是的。


我认为您对 Hadoop 和 MapReduce 有误解。MapReduce 作业确实适用于相同类型的数据(即“相同的表”),但该数据的不同段。并行 Map 和 Reduce 任务是针对数据不同部分的相同任务。从您的定义来看,MapReduce 绝对是“单指令、多数据”。

Hadoop 绝不是 SQL 数据库的直接替代品。他们以不同的方式做不同的事情。以下是其他一些需要注意的事项:

请注意,MapReduce 只会真正为您进行批量分析。诸如汇总、计数和聚合之类的东西。您将无法使用 MapReduce 有效地检索或搜索。此外,在 Hadoop 中更新数据并不是您想要做的事情的典型方式——您将事情视为“仅附加”。对于其中任何一个,您可能都想看看 HBase。

Hadoop 的文件系统为您分割数据。从文件系统的角度来看,它看起来像是包含 CSV(或其他文件格式)的文件夹中的文件。文件被分成块,然后可以与地图任务分开操作。您不必像现在这样手动分片数据。

看看蜂巢。它是 MapReduce 之上的一个抽象层,它在底层将 SQL 的轻量级版本解释为 MapReduce。它应该允许您更轻松地转换一些逻辑。

于 2013-11-13T14:05:15.187 回答