为什么Spark比MapReduce快?
1、内存和磁盘使用方面
Spark vs MapReduce不等于内存 vs 磁盘,Spark和MapReduce的计算都发生在内存中,区别在于:
- MapReduce需要将每次计算的结果写入磁盘,然后再从磁盘读取数据,从而导致了频繁的磁盘IO。
- Spark通常不需要将计算的结果写入磁盘,可以在内存中进行迭代计算。这得益于Spark的RDD和DAG(有向无环图),其中DAG记录了job的stage以及在job执行过程中父RDD和子RDD之间的依赖关系。中间结果能够以RDD的形式存放在内存中,极大减少了磁盘IO。
2、Shuffle上的不同
Spark和MapReduce在计算过程中通常都不可避免的会进行Shuffle,Shuffle都会落盘,但:
- MapReduce在Shuffle时需要花费大量时间进行排序,排序在MapReduce的Shuffle中似乎是不可避免的;
- Spark在Shuffle时则只有部分场景才需要排序,支持基于Hash的分布式聚合,更加省时;
3、任务级别并行度上的不同