有的人说Spark比MapReducede计算速度快的原因是因为Spark是基于内存计算的,其实是错误的,两个都是基于内存计算。甚至Spark还沿用了MapReduce的模型和概念,只不过这些概念被融入了RDD模型中:
- Split:在Spark中,数据首先被划分为多个分区(partitions),这相当于split的过程。每个分区可以在集群中的不同节点上进行并行处理。
- Map:Spark的transformation操作,如
map
、flatMap
等,对应于map过程。这些操作对分区中的每个元素应用一个函数,生成新的RDD(Resilient Distributed Dataset,弹性分布式数据集)。 - Shuffle:在Spark中,当需要进行跨分区的聚合操作时,如
reduceByKey
或groupByKey
,就会发生shuffle。这个过程涉及将数据重新分区和排序,以便相同的键被聚集到同一个分区中。 - Reduce:Spark的action操作,如
reduce
或collect
,通常用于聚合数据并产生最终结果。这些操作会触发实际的计算,并返回最终结果给驱动程序。
Spark较MapReduce节省时间最大的环节应该是是在shuffle阶段,MapReduce在shuffle阶段的排序时间开销是相当大的,因为shuffle包括了map task端对数据的分区、排序,溢写磁盘和