Spark的shuffle的机制

文章讲述了Spark中Shuffle过程的发展,从HashShuffle到SortShuffle的改进,以及钨丝计划的优化阶段,最终在2.0版本后统一到SortShuffle并删除了HashShuffle。HashShuffle因产生大量小文件影响IO效率,而SortShuffle通过Executor生成分区数据减少了文件数量,提高了效率。SortShuffle有两种机制,普通机制包括内存溢写、分区排序和文件合并,而bypass机制则省略了排序步骤,适用于特定条件下的性能优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

发展史:
        先有 HashShuffle --> SortShuffle --> 钨丝计划(优化阶段) --> 钨丝计划合并到SortShuffle ---> 删除HashShuffle统一合并到SortShuffle(2.0版本以后)
Hashshuffle:

优化前:  

        上游的RDD的每个分片都会产生和下游分区数量相等的文件的数量, 每个文件对应下游的一个分区的数据, 这样导致产生大量的分区的文件, 对IO影响也是非常大的 最终影响效率


优化后:

        把原有由上游的每一个RDD生成与下游等同的的分区数量 转换为 由每一个executor来生成与下游等同的分区的数量, 从而减少的分区文件数量的产生,从而降低了IO, 提升了效率


SortShuffle的机制: 两种机制 普通机制 和 bypass机制


普通机制:

将处理的数据先写入到内存中, 当内存中数据达到一定的阈值后, 就会触发溢写, 将数据溢写到磁盘上,在溢写的时候会对数据进行分区操作, 以及排序操作, 形成的文件分好区排好序的数据, 溢写完成后, 还会将多个溢写的文件的数据合并为最终的大的文件数据, 同时这个文件数据还会携带有一个索引文件, 用于后续加载读取文件中数据


bypass机制:

比普通机制少了排序的操作, 所以在某些情况下bypass的机制执行效率可能会高于普通机制, 毕竟干的活少了
        使用条件的:
                1- 要求RDD的分区数量不能超过200个
                2- 要求上游的RDD不允许进行提前聚合的操作(满足两个特性,系统自动采用bypass)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值