发展史:
先有 HashShuffle --> SortShuffle --> 钨丝计划(优化阶段) --> 钨丝计划合并到SortShuffle ---> 删除HashShuffle统一合并到SortShuffle(2.0版本以后)
Hashshuffle:
优化前:
上游的RDD的每个分片都会产生和下游分区数量相等的文件的数量, 每个文件对应下游的一个分区的数据, 这样导致产生大量的分区的文件, 对IO影响也是非常大的 最终影响效率
优化后:
把原有由上游的每一个RDD生成与下游等同的的分区数量 转换为 由每一个executor来生成与下游等同的分区的数量, 从而减少的分区文件数量的产生,从而降低了IO, 提升了效率
SortShuffle的机制: 两种机制 普通机制 和 bypass机制
普通机制:
将处理的数据先写入到内存中, 当内存中数据达到一定的阈值后, 就会触发溢写, 将数据溢写到磁盘上,在溢写的时候会对数据进行分区操作, 以及排序操作, 形成的文件分好区排好序的数据, 溢写完成后, 还会将多个溢写的文件的数据合并为最终的大的文件数据, 同时这个文件数据还会携带有一个索引文件, 用于后续加载读取文件中数据
bypass机制:
比普通机制少了排序的操作, 所以在某些情况下bypass的机制执行效率可能会高于普通机制, 毕竟干的活少了
使用条件的:
1- 要求RDD的分区数量不能超过200个
2- 要求上游的RDD不允许进行提前聚合的操作(满足两个特性,系统自动采用bypass)