Spark的四种Shuffle

本文详细探讨了Spark中的四种Shuffle机制:未经优化和优化的HashShuffle,以及SortShuffleManager的普通和ByPass运行机制。重点讨论了数据分布、磁盘文件的创建以及内存与磁盘的交互,强调了SortShuffleManager在性能优化上的优势。
摘要由CSDN通过智能技术生成

未经优化的HashShuffle

上游stage的task对相同的key执行hash算法,从而将相同的key写到一个磁盘文件中,而每个磁盘文件都只属于下游stage的一个task,这就导致了下游有几个task上有就要创建多少个磁盘小文件,当下游的task任务过多的时候,上游就会堆积磁盘小文件

优化的HashShuffle

spark.shuffle.consolidateFiles=true

当开启上面的配置的时候,spark使用的是优化的HashShuffle。每个shuffleFileGroup会对应一批磁盘文件,数量与下游stage的task数量相同。一个executor上有多少个CPU核数,就可以并行执行多少个task,而第一批并行执行的task,每个task就会创建一个shuffleFileGroup,并写入数据到磁盘文件中,下一批task会复用之前已有的shuffleFileGroup,包括其中的磁盘文件。

SortShuffleManager普通运行机制

该模式下,数据会先写到一个内存数据结构中,根据不同的算子,可能选用不同的数据结构,如果是reduceBykey这种聚合类的算子,那么会选用Map数据结构,一边通过Map进行聚合,一边写入内存,如果是join类的shuffle算子,那么会选用Array数据结构,直接写入内存。每写一条到内存中,就会判断一下,是否达到某个阈值,当达到阈值是,会尝试把内存中的数据写入磁盘,然后清空数据结构。在溢写磁盘之前,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值