Hadoop MapReduce Shuffle过程解析
Shuffle过程是Mapreduce的核心,要想理解Mapreduce,Shuffle过程是必须了解的。
Shuffle的本义是洗牌,混乱,把一组有规则的数据转换成一组无规则的数据,Mapreduce中的shuffle更像是洗牌的逆过程,把map端处理完的数据规约到reduce端,更像是一个整合的过程,把相对无规则的数据转换成有规则的数据。
为什么Mapreduce计算模型需要shuffle过程?
因为Mapreduce一般包括两个重要的阶段:Map是映射,负责数据的过滤分发,
Reduce是归约,负责数据的计算归并,Map的输出即是Reduce的输入。Reduce需要shuffle来获取数据,保证接收到数据是完整有序的,在分布式系统中,map和Reduce基本分布在不同的节点,需要shuffle来协调数据的传输,shuffle会合理合并数据以减少网络IO,提高计算效率。
Shuffle流程解析
Shuffle在Mapreduce中是一个贯穿map端和reduce端的一个过程,总体分为两个阶段:Map端和Reduce端,我画了一张容易理解的流程图。
Map:
Map端包括以下四个步骤:
1、split过程:
首先对输入文件进行切分,当前版本默认切分规则是一个split切片对应hdfs中的块大小,一个maptask处理一个切片,经过重写过的map方法之后进入下一个阶段,关于切分规则看我另外一篇博客。