关于hadoop 的shuffle 过程理解(面试题系列~~~)

本文详细解析了Hadoop MapReduce中的Shuffle过程,包括map端的写入磁盘、分区排序和合并阶段,以及reduce端的复制和合并阶段。Shuffle过程确保数据正确分区和排序,为reduce任务提供有序输入,实现高效的数据处理。

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


MapReduce 确保每个reducer 的输入都是按键进行排序的。系统执行排序,将map 输出作为输入传给reducer 的过程称为shuffle。

map 端的shuffle 过程

写入磁盘

map 端会先将输出写入到内存缓冲区,当内存缓冲区到达指定的阈值时,一个后台线程就开始将缓冲区的内容spill 到磁盘。

分区&排序

在写入磁盘之前,线程首先根据数据最终要到达的reducer 将数据划分为相应的分区。在每个分区中,后台线程按键进行内存中排序。(分区的目的是将数据划分到不同的Reducer 上去,以期望达到负载均衡)

合并阶段

每个map 任务可能产生多个spill 文件,在任务完成之前,spill 文件会被合并为一个已分区已排序的输出文件。

reduce 端的shuffle 过程

复制阶段

每个reduce 任务需要若干个map 任务的输出作为输入,每个map 任务的完成时间可能不同,因此在每个任务完成时,reduce 任务就开始复制其输出。

这就是reduce 任务的复制阶段。reduce 任务有少量的复制线程,因此能够并行取得map 输出。

合并阶段

复制完所有map 输出后,reduce 任务进入合并阶段。这个阶段将合并map 输出,并维持其顺序排序。最后将合并结果数据直接输入reduce 函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值