为什么不使用类似 MapReduce 的东西?
我们可以将类似 MapReduce 的系统称为分布式计算系统,其中 reduce 操作基于分布式排序。此类中最常见的开源解决方案是 Apache Hadoop。
这些系统由于其高延迟而不适合在线查询。换句话说,它们不能用作 Web 界面后端。这些类型的系统对于实时数据更新也不有用。如果操作结果和所有中间结果(如果有)都位于单个服务器的 RAM 中,分布式排序并不是执行 reduce 操作的最佳方法,这种情况通常发生在线查询中。在这种情况下,哈希表是执行 reduce 操作的最佳方法。优化 map-reduce 任务的一种常见方法是使用 RAM 中的哈希表进行预聚合(部分 reduce)。用户手动执行此优化。分布式排序是运行简单 map-reduce 任务时性能降低的主要原因之一。
大多数 MapReduce 实现允许您在集群上执行任意代码。但声明性查询语言更适合 OLAP,以便快速运行实验。例如,Hadoop 有 Hive 和 Pig。也可以考虑 Cloudera Impala 或 Spark 的 Shark(已过时),以及 Spark SQL、Presto 和 Apache Drill。运行此类任务时的性能与专门系统相比极低,但相对较高的延迟使得将这些系统用作 Web 界面后端变得不切实际。