Spark shuffle和Hadoop shuffle区别通俗易懂

一、Hadoop Shuffle

分成两个阶段:Map、Reduce

        Map端Shuffle会将数据写入到环形缓冲区,默认大小是100M,底层是一个数组,一半存储数据,另一半存储元数据,当达到80%的时候进行反向溢写,溢写之前要根据key的hashcode值对reduce task的个数取模进行分区快排,然后溢写到本地磁盘中。接着会对多个溢写文件进行一次归并排序。reduce Shuffle会拉取对应map task分区的数据,先加载到内存。当内存满了之后会写到本地磁盘。拉去完毕后会对内存和磁盘中的数据进行一次归并排序。

二、spark shuffle分类

Hash Shuffle和Sort Shuffle

        Hash Shuffle分为普通机制和合并机制。合并机制就是对普通机制进行了优化。普通机制分为write阶段和read阶段。write阶段会根据key将value写入到buffer中。当buffer满了之后会写到磁盘。这时会产生mapper数量*reducer数量的文件,有大量的磁盘IO。read阶段就是reduce拉取对应map task的数据。合并机制是让多个task共享一个buffer,这样会减少落盘的文件,会产生reduce个数 * core个数的文件

        Sort Shuffle分为普通机制和bypass机制。普通机制会将计算结果写入到一个默认的内存结构(默认是5M),每次写入都会进行一个阈值的判断,是否写满了。如果写满了会进行扩充到二倍的申请。如果申请到则继续写,没有申请到会按照key进行分区排序溢写。然后会对多个溢写文件进行合并成一个数据文件,同时生成一个索引文件(记录数据的开始和结束)。reduce读取数据时首先会解析这个索引文件,根据索引文件区拉取数据。Bypass机制是将排序给省略了。但是有触发条件。shuffle reduse task的数量小于200,并且没有聚合类的算子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值