shuffle

https://www.cnblogs.com/arachis/p/Spark_Shuffle.html

https://zhuanlan.zhihu.com/p/70331869

https://www.educba.com/spark-shuffle/

https://lmrzero.blog.csdn.net/article/details/106015264?spm=1001.2014.3001.5502

https://blog.csdn.net/zp17834994071/article/details/107887292

https://zhuanlan.zhihu.com/p/431015932

0 shuffle是什么,什么时候shuffle

what:多个partition的数据流向一个partition

when:宽依赖会有shuffle

shuffle分为两个阶段:shuffle read , shuffle write

map端-》shuffle read-》 shuffle write-》reduce端

1 mapreduce shuffle

2 spark shuffle

1 简介

2 分类

https://www.51cto.com/article/703950.html#

过去hash shuffle ,现在sort shuffle

1.Hash Shuffle

2.Sort Shuffle

1 普通机制的SortShuffleManager

2 bypass

此时task会为每个reduce端的task都创建一个临时磁盘文件,并将数据按key进行hash,然后根据key的hash值,将key写入对应的磁盘文件之中。当然,写入磁盘文件时也是先写入内存缓冲,缓冲写满之后再溢写到磁盘文件的。最后,同样会将所有临时磁盘文件都合并成一个磁盘文件,并创建一个单独的索引文件。
该过程的磁盘写机制其实跟未经优化的HashShuffleManager是一模一样的,因为都要创建数量惊人的磁盘文件,只是在最后会做一个磁盘文件的合并而已。因此少量的最终磁盘文件,也让该机制相对未经优化的HashShuffleManager来说,shuffle read的性能会更好。

3 总结

bypass与普通SortShuffleManager运行机制的不同在于:
第一,磁盘写机制不同;
第二,不会进行排序。也就是说,启用该机制的最大好处在于,shuffle write过程中,不需要进行数据的排序操作,也就节省掉了这部分的性能开销。

3 对比

https://www.zhihu.com/question/27643595

4 优化

因此在我们的开发过程中,能避免则尽可能避免使用会进行shuffle的算子,尽量使用非shuffle算子

1 shuffle算子:

https://blog.csdn.net/py_tamir/article/details/95457813

reduceByKey、join、distinct、repartition

2 非shuffle算子

map,flatMap


:D 一言句子获取中...