MapReduce灵魂——看不见的Shuffle

本文详细解析了MapReduce中至关重要的Shuffle过程,从Shuffle的本意、MapReduce中的作用、为何需要Shuffle,到Shuffle的流程概述,包括Map端的分区、收集、排序、溢写和合并,以及Reduce端的复制和归并排序。Shuffle是MapReduce的精髓,理解其工作原理有助于优化MapReduce任务的执行效率。
摘要由CSDN通过智能技术生成

1.Shuffle概述

1.1 shuffle本意

《柯林斯英汉双解大词典》的shuffle愿意为“洗牌”。

shuffle:rearrange (a deck of cards) by sliding the cards over each other quickly.
shuffle:洗牌
同义词:mix(混合);mixup(混淆;拌和;调和)
——《柯林斯英汉双解大词典》

1.2 MapReduce中的shuffle

shuffle的本意是洗牌、混洗的意思,指把一组有规则的数据尽量打乱成无规则的数据。而在MapReduce中,shuffle更应该被理解成“规整”(跟愿意正好相反),即把一组无规则的数据整理成有规则的数据。对应到MapReduce的处理中,shuffle是将map端的无规则输出按指定的规则“整理”成具有一定规则的数据,以便reduce端接收处理。
官方的Shuffle过程如图1所示,不过细节有错乱,官方图并没有说明partition、sort、fetch、merge等具体作用于哪个阶段。从图中可以看出,Shuffle处于map输出后和reduce接收前。
在这里插入图片描述
map(映射)阶段将原始数据转化为键值对,MapReduce会对要处理的数据进行分片(split)操作,为每一个分片分配一个MapTask任务,在Mapper中map()函数会对每一个分片中的每一行数据进行处理得到键值对(key,value),此时得到的键值对又叫做“中间结果”。此后便进入shuffle阶段,shuffle对map阶段输出的“中间结果”键值对进行拷贝、归并、排序等操作,整合后发送至Reducer端等待处理。shuffle结束后才进入reduce(规约)阶段,将具有相同key值的value进行合并处理后再转换成新的键值对作为最终输出结果。

1.3为什么一定要shuffle?

原因1:MapReduce的设计原则

MapReduce makes the guarantee that the input to every reducer is sorted by key.

在MR的设计原则之一就是“每个Reducer的输入都是按Key(键值对中的键)排序的”。

原因2:数据分发
Hadoop的集群环境,大部分的map task和reduce task是执行在不同的节点上的,reduce计算时需要先获取到map的输出结果,因此要有模块专门负责从reduce端拉取数据到reduce端。为了尽可能提升执行效率,Shuffle在设计上要做到:
(1)完整地从map task端拉取数据到reduce task端;
(2)在拉取数据的过程中,尽可能地减少网络资源的消耗;
(3)尽可能地减少磁盘IO对task执行效率的影响。

1.4Shuffle的意义

1.shuffle是隐藏的过程,是MR框架自动完成的,屏蔽了复杂的操作,让我们专注于业务逻辑的编写。了解shuffle的过程可以帮助我们更高效地实现Mapper和Reducer。

In many ways, the shuffle is the heart of MapReduce and is where the magic happens.
http://timepasstechies.com/mapreduce-shuffle-sort-phase/

2.正如这篇文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值