首页 > 其他 > 详细

大数据 MapReduce流程

时间:2020-06-02 09:16:41      阅读:52      评论:0      收藏:0      [点我收藏+]

MapReduce的整个流程:

1)每个map任务对应一个split分片的数据,split分片的大小由设置的maxSplitSizeminSplitSizeblock的大小决定。

splitSize = max(minSplitSize,min(maxSplitSize,blockSize)))

默认情况下,splitSize的大小与blockSize大小相同,即每个block对应一个map任 务。

2)在进入map阶段之前,需要设置InputFormat类指定如何读取数据并把数据转成map 阶段需要的键值对。

3)map阶段将读取split分片获得的键值对(K1\V1),转成新的键值对(K2\V2),这个 过程是自定义的,需要按照需求来编写逻辑代码,编写一个类继承Mapper父类,然 后复写map方法。

4)进入shuffle阶段,该阶段可以分为map端的shuffle和reduce端的shuffle;

5)首先是分区,可以将键值对K2\V2按键进行分区,分区的逻辑代码需要定义一个类继承 Partitioner父类,复写getPartition方法(分区解释给键值对做一个标记,不同分区的 数据将进入不同的reduce)。

6)分完区之后数据会被写进一个环形缓冲区,默认该缓冲区的大小为100M,阈值为0.8, 当达到阈值(80M)时会溢出,将这80M的数据进行排序并写进一个临时文件中,还 会继续向环形缓冲区写数据,当再次溢出的时候,又会写进一个新的临时文件中。在 溢出写进临时文件的之前,采用的排序方法是快速排序,如果设置了规约Combiner (规约本 质上就是一次在map端的reduce,为了减少网络需要传输的数据量,在map 端先进行一次合并操作,这个是根据业务需要是否可以规约)。

7)然后将6)中产生的多个临时文件合并到一起写进一个临时文件,在这个合并过程中还 是会排序,采用的是归并排序(这个过程就将一个map端的所有数据写进一个临时文 件了)。

8)从3)-7)就是整个map阶段,3)MapTask阶段,4)-7)是Map端的shuffle阶段;

9)然后就进入reduce阶段了,一个reduce任务会开辟一个reduce缓冲区,然后从各个 map任务获得的临时文件中拉取某一个分区的数据,这个过程中也可能会存在溢出, 当发生溢出时也会键reduce缓冲区的数据写进一个临时文件,再次溢出,又会写进一 个新的临时文件。

10)然后将9)中的多个临时文件合并进一个文件中,在这个合并过程中会进行排序和分 组,分组是将相同key的value放入一个集合中。

11)然后就是对10)中获得的合并文件进行reduce处理,reduce的处理是将map阶段输 出的K2\V2,转成K3\V3,这过程需要定义一个类继承Reducer父类,复写map方法, 这个转换的逻辑在map方法中实现。

12)步骤9)-11)就是整个reduce阶段,步骤9)-10)是reduce端的shuffle阶段,11) 是reduceTask阶段

12)然后就是对K3\V3进行输出了,如何进行输出是通过设置OutputFormat实现的。

大数据 MapReduce流程

原文:https://www.cnblogs.com/wypzpz/p/13028877.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!