Hadoop shuffer 和 Spark shuffer区别

本文详细解析了Hadoop的MapReduce作业流程中的Shuffle阶段,包括mapshuffler和reduceshuffler的工作原理,并对比了Spark的Shuffle机制。重点介绍了Hadoop的sort-based与Spark的hash-based差异,以及两者在内存使用和执行模型上的不同。

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

 Hadoop shuffer阶段分为mapshuffer阶段,reduceshuffer阶段两个阶段

在理解之前需要知道shuffer是什么意思,mapreduce的任务流程,大家可以先理解一下再进一步学习下一阶段,图1、2是我在网上找了两个画的不错的mapreduce任务流程图帮助你们理解。

mapshuffer阶段:

   这个阶段发生在map阶段之后(数据写入内存之前),数据在写入内存的过程就已经开始shuffer了,内存的大小是可以改变的,mapreduce.task.io.sort.mb的数值就是内存的大小,默认为100M。数据在写入内存大于80%时,会发生溢出(spill)过程,将数据整体移至磁盘,在移至磁盘partitions时会发生排序过程(combiner()),将数据按照排序的规则分布在分区中,然后进入mapshuffer最后一个阶段merge,这个过程将一个分区的所有数据进行排序合并成一个文件目录,以供reduce获取。

reduceshuffer阶段:

          copy merge中的数据到reduce端,这过程中将同一个key的分组放在一起,通过sort()排序,让后聚合为一个文件,这个过程实在磁盘上实现的,接下来就是reduce阶段了

Spark shuffer

https://www.cnblogs.com/jcchoiling/p/6431969.html

 

 

 

区别在于hadoopshuffer是sort-based,spill内存大小是100M,saprk是hash-based(hash-based故名思义也就是在Shuffle的过程中写数据时不做排序操作,只是将数据根据Hash的结果,将各个Reduce分区的数据写到各自的磁盘文件中),内存大小是32K,Hadoop的shuffle过程是明显的几个阶段:map(),spill,merge,shuffle,sort,reduce()等,是按照流程顺次执行的,属于push类型;但是,Spark不一样,因为Spark的Shuffle过程是算子驱动的,具有懒执行的特点,属于pull类型。

                                                                                           图1 

                                                                                            图2 

           参考文件:https://www.jianshu.com/p/0ddf3ae19b49  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值