【Hadoop】:Hadoop的shuffle(混洗)过程

Shuffle过程是MapReduce的核心,涉及到从map task到reduce task的数据传输。Map端的Shuffle包括内存缓冲区、溢写、排序、合并和Combiner的使用。Reduce端则负责拉取数据、合并与Merge,最后生成Reducer的输入文件。Shuffle过程中,合理使用Combiner可以优化中间结果,减少网络和磁盘IO负担。
摘要由CSDN通过智能技术生成

1. 前言

Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方,Shuffle的正常意思是洗牌或弄乱,可能大家更熟悉的是Java API里的Collections.shuffle(List)方法,它会随机地打乱参数list里的元素顺序。如果你不知道MapReduce里Shuffle是什么,那么请看这张图:
在这里插入图片描述
这张是官方对Shuffle过程的描述。但我可以肯定的是,单从这张图你基本不可能明白Shuffle的过程,因为它与事实相差挺多,细节也是错乱的。后面我会具体描述Shuffle的事实情况,所以这里你只要清楚Shuffle的大致范围就成—怎样把map task的输出结果有效地传送到reduce端。 也可以这样理解, Shuffle描述着数据从map task输出到reduce task输入的这段过程。

在Hadoop这样的集群环境中,大部分map task与reduce task的执行是在不同的节点上,当然很多情况下Reduce执行时需要跨节点去拉取其它节点上的map task结果,如果集群正在运行的job有很多,那么task的正常执行对集群内部的网络资源消耗会很严重。这种网络消耗是正常的,我们不能限制,能做的就是最大化地减少不必要的消耗。还有在节点内,相比于内存,磁盘IO对job完成时间的影响也是可观的。从最基本的要求来说,我们对Shuffle过程的期望可以有:

  1. 完整地从map task端拉取数据到reduce端。
  2. 在跨节点拉取数据时,尽可能地减少对带宽的不必要消耗。
  3. 减少磁盘IO对task执行的影响。

优化的地方主要在于减少拉取数据的量及尽量使用内存而不是磁盘,以WordCount为例,并假设它有8个map task和3个reduce task。从上图看出,Shuffle过程横跨map与reduce两端,所以下面我也会分两部分来展开。

2. Map的shuffle过程

先看看map端的情况,如下图:
在这里插入图片描述
整个流程我分了四步,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值