大数据之MapReduce


前言

  本文简单介绍大数据框架中的MapReduce,从MapTask工作机制、ReduceTask工作机制、Shuffle机制、MapReduce中的排序以及Combiner五方面进行阐述。


MapReduce主要分为三个阶段:Map阶段、Shuffle阶段以及Reduce阶段;

一、MapTask工作机制

MapTask分为五个阶段,分别是:Read阶段、Map阶段、Collect阶段、溢写阶段以及Combine阶段

1.1 MapTask处理流程

在这里插入图片描述
MapTask具体的处理流程如下:

1、 客户端会有待处理的文本;

2、 根据文本大小形成切片信息,默认一个切片大小是128M;

3、 客户端提交切片、jar包、xml信息给Yarn集群

4、 集群启动相应的MrAppMaster,然后就开启相应的MapTask;

5、 用TextInputFormat按行读取数据(Read阶段);

6、 读完数据返回相应的<K,V>数据并将数据写到mapper中(Map阶段);

7、 Mapper将数据写入到环形缓冲区中,写入之前要判断数据的分区和分区内排序(快速排序)(Collect阶段

8、 环形缓冲区数据存储超过80%,往磁盘上进行溢写(多次溢写)(溢写阶段
注意:如果处理的任务不是求平均值,可以对每一次溢写文件进行Combiner,减少后续数据的传输量,此过程在shuffle阶段会详细介绍;

9、 溢写完的数据再进行合并Combine阶段

10、将合并后的数据写入本地磁盘

二、ReduceTask 工作机制

  前一级的MapTask全部处理完之后才会进行ReduceTask;

  ReduceTask分为四个阶段Copy阶段、Merge阶段、Sort阶段以及Reduce阶段;

2.1 ReduceTask处理流程

在这里插入图片描述
ReduceTask的具体处理流程如下:

1、 所有的MapTask都结束了之后,将对应分区下的数据统统Copy到Reduce中去(Reduce主动拉取数据);(Copy阶段

2、 先将数据放在内存中,如果存不下了就溢写到磁盘;不论是在磁盘还是内存,都会将多个文件合并成一个大的有序的文件;(Merge + Sort 阶段

3、 分组排序则是用于人为控制key值是否相同,比如key中有多个属性,我们想要某几个属性相同就认为key是相同的(只要价格相同就认为key相同),就要用到分组排序来控制进入Reduce中的数据;

4、 将相同key的数据Copy到Reduce方法中去进行业务处理(Reduce阶段

2.2 ReduceTask注意事项

1、 ReduceTask数目为0,表示没有ReduceTask阶段,输出文件个数和Map个数一致;

2、ReduceTask个数默认值是1

3、如果分区数不是1,但是ReduceTask为1,是否执行分区过程。答案是:不执行分区过程。因为在MapTask的源码中,执行分区的前提是先判断ReduceNum个数是否大于1,不大于1肯定不执行。

三、Shuffle机制

3.1 Shuffle阶段的位置

  Map方法之后Reduce方法之前,注意是方法而不是MapTask,ReduceTask;

3.2 Shuffle处理流程

在这里插入图片描述
Shuffle机制的处理流程如下:

(1) map方法之后,出来的数据先进入环形缓冲区(左侧写索引右侧写数据);

(2) 写数据的过程中,先对数据进行分区,在溢写之前,要对缓冲区中80%的所有数据进行排序,排序也是按照分区进行排序

(3) 溢写到磁盘上(如果是汇总操作可以用Combiner进行初步汇总,减少数据传输,如果是求均值不能用combiner),溢写的文件是spill.out , spill.index;

(4) 以分区为单位进行归并排序,排完序之后可以再进行Combiner,因为不同的溢写文件可能会有重复的key;将数据进行压缩后,写入到磁盘中;

(5) 把map阶段产生的所有数据Copy到Reduce的内存中,如果文件过大溢写到磁盘中;对内存以及磁盘中的数据进行归并排序,将相同key的数据放入Reduce方法执行业务逻辑;

四、MapReduce中的排序

4.1 MapTask中的排序

  对于MapTask,它会将处理的结果暂时放到环形缓冲区中,当环形缓冲区使用率达到一定阈值后,再对缓冲区中的数据进行一次快速排序,并将这些有序数据溢写到磁盘上,而当数据处理完毕后,它会对磁盘上所有文件进行归并排序

4.2 ReduceTask中的排序

  对于ReduceTask,它从每个MapTask上远程拷贝相应的数据文件,如果文件大小超过一定阈值,则溢写磁盘上,否则存储在内存中。如果磁盘上文件数目达到一定阈值,则进行一次归并排序以生成一个更大文件;如果内存中文件大小或者数目超过一定阈值,则进行一次合并后将数据溢写到磁盘上。当所有数据拷贝完毕后,ReduceTask统一对内存和磁盘上的所有数据进行一次归并排序

五、 Combiner

  MR的一种优化之一

  Combiner的父类是Reducer,Combiner 和 Reducer的区别就是运行的位置不同,Combiner是在每一个MapTask节点上运行,对每一个MapTask的输出进行局部汇总以减少网络传输量,而Reducer是接收全局所有的Mapper输出结果;

  注意:Combiner不适合求平均值的场景。


总结

  本文简单介绍大数据框架中的MapReduce,从MapTask工作机制、ReduceTask工作机制、Shuffle机制、MapReduce中的排序以及Combiner五方面进行了阐述,如果有不足之处或者表述不当的地方欢迎大家指正;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值