Mapreduce中Shuffle 与 Spark中Shuffle 的区别 ?

Love The Way You Lie 2021-09-25 05:14 518阅读 0赞

Spark 1.2以后默认用SortShuffleManager

不同点:





























  Mapreduce Shuffle Spark 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到内存中,是多次从磁盘加载到内存。

发表评论

表情:
评论列表 (有 0 条评论,518人围观)

还没有评论,来说两句吧...

相关阅读