Mapreduce中Shuffle 与 Spark中Shuffle 的区别 ?

Spark 1.2以后默认用SortShuffleManager

不同点:

 Mapreduce ShuffleSpark Shuffle
map端大文件的索引文件没有
map端输出的文件是否有序有序如果启用byPass机制则不会排序,反之会排序
reduce端读取文件直接读取map输出的大文件先读取索引文件
   

启用byPass机制的触发条件:

  • shuffle read task数量小于spark.shuffle.sort.bypassMergeThreshold参数的值(默认是200)
  • 不是聚合类的shuffle算子(比如repartition、join;reduceByKey是聚合类算子)

 

 

相同点:

1 都是先写到内存,达到阈值时溢出多个小文件

2 有多少个map会产生多少个大文件;上游stage有多个少task,也会产生多少个大文件;

 

网上经常说的spark基于内存计算,意思是可以把反复用到的数据cache到内存中,不再反复从磁盘加载到内存,所以快。spark的shuffle,中间文件也是会落磁盘的!

mr不会把多次用到的同一份数据cache到内存中,是多次从磁盘加载到内存。

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页