跳至主要内容

为什么不使用类似 MapReduce 的东西?

·阅读时间:2分钟

我们可以将 MapReduce 之类的系统称为分布式计算系统,其中 reduce 操作基于分布式排序。此类中最常见的开源解决方案是Apache Hadoop

由于这些系统的延迟较高,因此它们不适合在线查询。换句话说,它们不能用作 Web 接口的后端。这些类型的系统对于实时数据更新也不实用。如果操作的结果和所有中间结果(如果有)都位于单个服务器的 RAM 中,则分布式排序不是执行 reduce 操作的最佳方法,对于在线查询通常就是这种情况。在这种情况下,哈希表是执行 reduce 操作的最佳方法。优化 map-reduce 任务的一种常见方法是使用 RAM 中的哈希表进行预聚合(部分 reduce)。用户手动执行此优化。分布式排序是运行简单 map-reduce 任务时性能下降的主要原因之一。

大多数 MapReduce 实现允许您在集群上执行任意代码。但是,声明性查询语言更适合 OLAP 以快速运行实验。例如,Hadoop 有 Hive 和 Pig。还可以考虑用于 Spark 的 Cloudera Impala 或 Shark(已过时),以及 Spark SQL、Presto 和 Apache Drill。运行此类任务时的性能与专门系统相比非常次优,但相对较高的延迟使得将这些系统用作 Web 接口的后端变得不切实际。