MapReduce流程详解

在这里插入图片描述

MapReduce 流程详解

客户端阶段:
我们在hdfs上有一个需要分析的文件a.txt
在客户端在提交处理之前,客户端先获取文件,然后程序进行一个参数配置,对文件进行切片,
切片程序:首先计算切片的最大最小值, 从而确定切片大小,一般为128m,也可以根据自身的需要调整大小, 计算切片大小的逻辑:Math.max(minSize, Math.min(maxSize, blockSize)).之后检查文件是否可分,如果是压缩文件则不可分,之后是开始切片,切片的方法是计算剩余文件是否是切片大小的1.1倍,如果大于1.1倍则继续切,如果小于1.1倍,则停止,直接将最后的内容切成一片.结束后计算切片数量.

Map阶段:
1.mapper阶段:
客户端向yarn提交切片信息,jar包,配置信息等,yarn的resourcemanager会生成mapreduceappmanager,mrappmanager会根据切片数量生成相应数量的maptask,maptask接收到任务后,启动inputformat,inputformat生成的RecordReader读取切片信息,按照行对信息生成key,value值.生成kv值交给mapper进行逻辑运算,
2.mapshuffle阶段:
之后outputcollector将map函数处理过的新kv值送到内存上的圆形缓冲区,该缓冲区默认为100m,上面一半记录了数据的索引等信息,一部分记录了数据的kv值.在此环形缓冲区数据达到百分之八十时就会溢出到hdfs上保存与此同时,会对新的kv值进行,根据key的哈希函数分区,根据key进行全排序
.形成一个不同分区且分区内有序的文件.
之后将一个maptask中的几个分区且区内有序的文件使用分区归并的方法对分区进行合并和排序,形成一个拥有几个分区的区内有序文件.
Reduce阶段:
Reducer是通过HTTP的方式得到输出文件的分区
Reducetask将map阶段的分区且区内有序的文件进行收集,一个reducetask对应一个分区,不同的map阶段生成的文件会分别进入不同的reducetask,如果数据量小则在内存中直接进行合并,如果数据量大则进入hdfs中进行合并,最终将不同reducetask中的文件进行归并成我们想要的文件.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章