Hadoop中Shuffle过程的分步详解

Shuffle是MapReduce的关键步骤,涉及数据的分区、排序、溢写和合并。在Map端,数据先写入环形缓冲区,溢写到磁盘,并在分区后进行排序和可能的Combiner处理。Reduce端,Reduce任务复制Map输出,合并成已排序的中间文件,最终输出到HDFS。这一过程优化了数据处理效率。
摘要由CSDN通过智能技术生成

shuffle流程图
shuffle流程图

  • Shuffle概念

系统执行排序, 将map输出作为输入传给reducer的过程被称为shuffle, 从很多方面看, shuffle是MapReduce的灵魂所在. 学习shuffle有利于我们理解MapReduce的工作机制, 优化MR程序.

  • Map端的Shuffle

要进行海量数据处理, 外存文件的I/O访问为成为一个制约系统性能的重要瓶颈. 而Hadoop在Map过程实现的一个重要原则就是: 计算靠近数据, 这主要分为两个方面:

代码靠近数据:
a) 本地化数据处理(locality), 即一个计算节点尽可能处理本地磁盘上的数据
b) 尽量选择数据所在的DataNode启动Map任务

数据靠近代码:
a) 当本地没有数据处理时, 尽可能从同一机架或最近节点传输数据进行处理(host选择算法)

  1. 写入环形缓冲区
    因为频繁的磁盘I/O会严重减低效率, 所以中间结果不会被马上写入磁盘, 而是优先存储到map节点的环形缓冲区, 并作一些预排序提高效率.
    环形缓冲区:
    缓存中有一个阈值比例的配置, 当达到整个缓存的比例时, 会触发溢写操作, 在触发溢写操作的时候, map还是会往剩下的内存空间继续写入, 直到写满时map任务锁定, 数据都溢写到磁盘中. 而这个到达阈值后的继续写入使用到了折行写wrap方法, 程序会判断缓存的满是不是真的满, 如果前面还有空间, 在”写满”缓存后会从前面继续写, 直到完全写满, 这就是”环”的意思. 而这个环的意义就在于可以让写缓冲和溢写并行操作, 节省时间.
    环形缓冲区的源码解析:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值