跳到主要内容

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

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

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

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

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

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