MapReduce快速入门系列(5) | MapReduce任务流程和shuffle机制的简单解析

网友投稿 777 2022-05-28

Hello,大家好,在本系列的第一篇博文中,博主已经为大家介绍了MapReduce的相关概念。其中谈到了MapReduce主要由Map和Reduce两个过程组成!事实上,为了让Reduce可以并行处理Map的结果,需要对Map的输出进行一定的分区(Partition),排序(Sort),合并(Combine),分组(Group)等操作,得到形式的中间结果,再交给对应的Reduce 进行处理,这个过程也就是小菌需要为大家介绍的,叫做Shuffle(混洗)。

目录

1. Shuffle机制

2. Shuffle阶段的四个操作

3. MapReduce工作流程

3.1 MapReduce的整个任务执行过程

3.2 MapReduce工作流程图(全)

3.3 注意

1. Shuffle机制

Shuffle机制如下:

是不是发现可能看不懂!没关系下面开始细化详解一下。

2. Shuffle阶段的四个操作

下图为Shuffle阶段的四个操作的具体功能演示:

如果对上图的一脸懵逼,不要慌!下面即为详细解答:

第5步:对输出的key,value对进行分区。相同key的数据发送到同一个reduce里面去,相同key合并,value形成一个集合

第6步:对不同分区的数据按照相同的key进行排序

第7步:对分组后的数据进行规约(combine操作),降低数据的网络拷贝(可选步骤)

第8步:对排序后的额数据进行分组,分组的过程中,将相同key的value放到一个集合当中

3. MapReduce工作流程

3.1 MapReduce的整个任务执行过程

由于空间有限,2,3步骤过程较为抽象,只做文字说明

具体每步的详细流程如下:

第1步:InputFormat InputFormat 到hdfs上读取数据 将数据传给Split 第2步:Split Split将数据进行逻辑切分, 将数据传给RR 第3步:RR(RecordReader) RR:将传入的数据转换成一行一行的数据,输出行首字母偏移量和偏移量对应的数据 将数据传给MAP 第4步:MAP MAP:根据业务需求实现自定义代码 将数据传给Shuffle的partition 第5步:partition partition:按照一定的分区规则,将key value的list进行分区。 将数据传给Shuffle的Sort 第6步:Sort Sort:对分区内的数据进行排序 将数据传给Shuffle的combiner 第7步:combiner combiner:对数据进行局部聚合。 将数据传给Shuffle的Group 第8步:Group Group:将相同key的key提取出来作为唯一的key, 将相同key对应的value获取出来作为value的list 将数据传给Reduce 第9步:Reduce Reduce:根据业务需求进行最终的合并汇总。 将数据传给outputFormat 第10步:outputFormat outputFormat:将数据写入HDFS

1

2

3

4

5

6

7

8

9

10

MapReduce快速入门系列(5) | MapReduce任务流程和shuffle机制的简单解析

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

3.2 MapReduce工作流程图(全)

1. MapReduce详细工作流程(一)

2. MapReduce详细工作流程(二)

3. 详细流程解析

上面的流程是整个MapReduce最全工作流程,但是

Shuffle过程

只是从第7步开始到第16步结束,具体Shuffle过程详解,如下:

① MapTask收集我们的map()方法输出的kv对,放到内存缓冲区中

② 从内存缓冲区不断溢出本地磁盘文件,可能会溢出多个文件

③ 多个溢出文件会被合并成大的溢出文件

④ 在溢出过程及合并的过程中,都要调用Partitioner进行分区和针对key进行排序

⑤ ReduceTask根据自己的分区号,去各个MapTask机器上取相应的结果分区数据

⑥ ReduceTask会取到同一个分区的来自不同MapTask的结果文件,ReduceTask会将这些文件再进行合并(归并排序)

⑦ 合并成大文件后,Shuffle的过程也就结束了,后面进入ReduceTask的逻辑运算过程(从文件中取出一个一个的键值对Group,调用用户自定义的reduce()方法)

3.3 注意

Shuffle中的缓冲区大小会影响到MapReduce程序的执行效率,原则上说,缓冲区越大,磁盘io的次数越少,执行速度就越快。

缓冲区的大小可以通过参数调整,参数:io.sort.mb默认100M

本次关于MapReduce任务流程和shuffle机制的简单解析就到这里了,关于流程中shuffle阶段的Partition分区算法以及split的逻辑切分规律,博主会在后续的博客中为大家解答,感兴趣的小伙伴们记得关注博主呀!

MapReduce

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【精选单品】华为IdeaHub Enterprise智能协作平板 | 智慧办公,一站到位
下一篇:php配置mongodb扩展、安装mongodb服务教程
相关文章