Spark学习——排序Shuffle

其他更多java基础文章:
java基础学习(目录)


这部分能力有限,所以推荐一些大神文章阅读学习:

  • Apache Spark Shuffle 过程:这篇文章可以作为入门学习文章,主要讲了Spark Shuffle和MapReduce Shuffle的对比、Shuffle Write和Shuffle Read的概念和原理、典型 transformation() 算子的 shuffle read原理、Shuffle read 中的 HashMap模型
    由于文章编写的比较旧了,所以是HashSHuffle原理的文章。但是仍然是非常好的一篇原理讲解文章。了解了hashShuffle才能更好的了解后面的Sort Base Shuffle

  • 彻底解密Spark的HashShuffle:这篇文章可以作为上一篇的延伸阅读,从源码级别讲解了HashShuffle的Shuffle Write和Shuffle Read,

  • Spark 2.1.0 中 Sort-Based Shuffle 产生的内幕:这篇文章通过讲述HashShuffle的缺陷,引出Sort-Based Shuffle的出现缘由和原理。从源码级别讲解了Sort-Based Shuffle的排序算法。

  • Spark Tungsten-sort Based Shuffle 分析:这篇文章从源码级别讲解了tungsten-sort的Shuffle Write和Shuffle Read

  • Spark Shuffle之Tungsten-Sort:这篇文章讲解了tungsten-sort的底层UnsafeShuffleWriter的实现

总结

我在以我的理解简单的概括下,如有不对,希望大家及时斧正:

  • Hash Shuffle是Spark 1.2之前的默认Shuffle实现,并在Spark 2.0版本中被移除。HashShuffle有个巨大的缺点,Shuffle前在磁盘上会产生海量的小文件,此时会产生大量耗时低效的 IO 操作
  • Consolidated Hash Shuffle是Hash Shuffle的优化版,会只产生Cores数量 x Reduce端数量的小文件。
  • Sort-Based Shuffle目前默认的Shuffle实现,Sorted-Based Shuffle 会把Mapper 中每个ShuffleMapTask 所有的输出数据Data 只写到一个文件中。它会产生一个 Data 文件和一个 Index 文件,其中 Data 文件是存储当前 Task 的 Shuffle 输出的, 而 Index 文件则存储了 Data 文件中的数据通过 Partitioner 的分类信息,此时下一个阶段的 Stage 中的 Task 就是根据这个 Index 文件获取自己所需要抓取的上一个 Stage 中 ShuffleMapTask 所产生的数据;默认情况下的Sort-Based Shuffle是会在溢写磁盘前,先根据key进行排序
  • bypass模式的Sort-Based Shuffle。spark.shuffle.sort.bypassMergeThreshold 默认值为200 ,如果shuffle map task的数量小于这个阀值200,且不是聚合类的shuffle算子(比如reduceByKey),则不会进行排序。 该机制与sortshuffle的普通机制相比,在map task不多的情况下,首先写的机制是不同,其次不会进行排序。这样就可以节约一部分性能开销。
  • Tungsten-sort Based Shuffle:引入新的内存管理模型Page。个人理解是只对类似于指针或者index的二进制数据进行排序,所以会比Sort-Based Shuffle的针对java objects的排序更快。 当且仅当下面条件都满足时,才会使用新的Shuffle方式:
    • Shuffle dependency 不能带有aggregation 或者输出需要排序
    • Shuffle 的序列化器需要是 KryoSerializer 或者 Spark SQL's 自定义的一些序列化方式.
    • Shuffle 文件的数量不能大于 16777216
    • 序列化时,单条记录不能大于 128 MB

转载于:https://juejin.im/post/5ca40b24e51d452f4f21845c

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值