MapReduce全流程剖析

MapReduce全流程之Map阶段

在这里插入图片描述

结合上图所绘,理解下列描述。

1、数据准备:包含 a至z字母的200MB文本文件(ss.txt)。

2、客户端进行submint()操作,将任务进行提交,并且为两个块文件,向Yarn平台申请资源分配

3、通过取得资源,计算出所处理的数据块的分片数个,从而得知maptask的数量

4、Maptask通过LineInputFormat中的LineRecorderReader组件对分片中的数据进行行读取,然后通过inputformat组件将数据读取到maptask中进行mapper过程。

5、Mapper过程处理后的数据通过context.write方法写出到outputCollector(输出收集器)中。

6、输出收集器将收集的数据导入环形缓冲区中,并且为不间断导入(缓冲区默认100m)

7、环形缓冲区一直在接收数据,当收集的数据占据缓冲区设置容量的80%(环形缓冲区的大小可设置),就进行溢出操作(溢出阈值也可设置)。在溢出操作的同时,outputCollector也在不断写入。此处可能因为写入过快,而导致写入操作等待,但概率很小。

8、在溢出时,会对本次溢出的数据进行分区(默认HashPartitioner)、排序(CompareTo)、合并(Combiner)等操作,其中可根据业务需求选择是否进行合并操作。

9、溢出后的数据会溢出到文件中(分区且有序的,且因为内存空间不足,会暂时写到磁盘中),是一个等于或者小于缓冲区大小80%的溢出文件,这时可根据业务设置,每当有一定数量的文件溢出时,就可以对这些数量的溢出文件进行归并排序操作,将几个溢出文件中的同分区中的数据进行合并在一起,并且排序。

MapReduce全流程之Reduce阶段

在这里插入图片描述
结合上图所绘,理解下列描述。

11、在有maptask完成作业时,所有的reducetask就会去maptsak生成的溢出文件对应的分区中取得数据。

12、当所有的maptask完成时,reducetask也会从溢出文件中读取完数据,所有的reducetask同时开始。

13、reducetask会对各个溢出文件取出的数据进行合并、归并排序操作,生成<key,values>的组数据,一个key对应一组数据。这时,我们也可以通过GroupingComparator()分组组件,将同一个key的数据,分为多个组(一般不进行此操作),

14、Reducer方法,从处理后的文件中一次读取一组数据,然后由一个reduce方法处理一组中的数据,将处理后的数据通过outputformat组件进行输出,写到指定文件中,一个reducetask生成一个文本文件。

15、当整个mapreduce过程结束后,ApplicationMaster进行收尾工作,删除掉生成在磁盘上的溢出文件,删除其他垃圾文件,最后自我了断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值