Spark Shuffle之Sort Shuffle

概述

Spark 1.2起默认使用Sort Shuffle,并且Sort Shuffle在map端有三种实现,分别是UnsafeShuffleWriterBypassMergeSortShuffleWriterSortShuffleWriter,根据运行时信息自动选择对应的实现。

三种ShuffleWriter实现

简单介绍三种ShuffleWriter实现

BypassMergeSortShuffleWriter和Hash Shuffle实现基本相同,区别在于map task输出会汇总为一个文件
UnsafeShuffleWritertungsten-sort,ShuffleExternalSorter使用Java Unsafe直接操作内存,避免Java对象多余的开销和GC 延迟,效率高
SortShuffleWriterSort Shuffle,和Hash Shuffle的主要不同在于,map端支持Partition级别的sort,map task输出会汇总为一个文件

注:上面SortShuffleWriter中提到的Partition,不是RDD中的Partition,而是类似Spark Shuffle之Hash Shuffle中的bucket,如果没有单独说明,Sort Shuffle相关文章中的Partition均为bucket,和源码中的变量名保持一致。

运行时三种ShuffleWriter实现的选择

Spark根据运行时信息选择三种ShuffleWriter实现中的一种,对应的源码为SortShuffleManager中的registerShuffle方法,如下
这里写图片描述
具体逻辑如下

map-side aggregationPartition数(RDD)Serializer支持relocation
BypassMergeSortShuffleWriter小于200(默认)-
UnsafeShuffleWriter小于16777216
SortShuffleWriter---
  1. 没有map端聚合操作,且RDD的Partition数小于200,使用BypassMergeSortShuffleWriter。
  2. 没有map端聚合操作,RDD的Partition数小于16777216,且Serializer支持relocation,使用UnsafeShuffleWriter。
  3. 上述条件都不满足,使用SortShuffleWriter。

Serializer支持relocation

上面提到UnsafeShuffleWriter需要Serializer支持relocation,Serializer支持relocation是指,Serializer可以对已经序列化的对象进行排序,这种排序起到的效果和先对数据排序再序列化一致。Serializer的这个属性会在UnsafeShuffleWriter进行排序时用到,具体参考Introduce internal Serializer API for determining if serializers support object relocation #5924

支持relocation的Serializer是KryoSerializer,Spark默认使用JavaSerializer,通过参数spark.serializer设置。

Sort Shuffle设置

上述三种ShuffleWriter实现均由SortShuffleManager管理
这里写图片描述
如上图,sorttungsten-sort均对应SortShuffleManager,并且上面我们讨论了SortShuffleManager选择哪种ShuffleWriter实现是运行时动态选择的,因此,设置参数spark.shuffle.manager为sort或tungsten-sort没有区别。

BypassMergeSortShuffleWriter

BypassMergeSortShuffleWriter和Hash Shuffle中的HashShuffleWriter实现基本一致,唯一的区别在于,map端的多个输出文件会被汇总为一个文件,如下
这里写图片描述
map端结果按照bucket顺序依次写入dataFile文件中,这么处理后,Shuffle生成的文件数显著减少了,同时还会生成indexFile文件,记录各个bucket在dataFile中的位置,用于后续reducer随机读取文件。

UnsafeShuffleWriter和SortShuffleWriter也是这么处理的。

UnsafeShuffleWriter

Spark Shuffle之Tungsten-Sort

SortShuffleWriter

Spark Shuffle之SortShuffleWriter

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值