MapReduce过程解析

一、Map过程解析

  1. Read阶段:MapTask通过用户编写的RecordReader,从输入的InputSplit中解析出一个个key/value。
  2. Map阶段:将解析出的key/value交给用户编写的Map()函数处理,并产生一系列的key/value。
  3. Collect阶段:在用户编写的map()函数中,数据处理完成后,一般会调用outputCollector.collect()输出结果,在该函数内部,它会将生成的key/value分片(通过调用partitioner),并写入一个环形缓冲区(该环形缓冲区的大小为100M)
  4. Spill阶段:即"溢写",当缓冲区快要溢出时(默认达到缓冲区大小的80%),会在本地文件系统创建一个溢写文件,将该缓冲区的数据写入到这个文件。
  5. Combine阶段:当所有的数据处理完成以后,MapTask会对所有临时文件进行一次合并,以确保最终只会生成一个数据文件。

将数据写入本地磁盘前,先要对数据进行一次本地排序,并在必要时对数据进行合并、压缩等操作。

写入磁盘之前,线程会根据 ReduceTask 的数量,将数据分区,一个 Reduce 任务对应一个分区的数据。

这样做的目的是为了避免有些 Reduce 任务分配到大量数据,而有些 Reduce 任务分到很少的数据,甚至没有分到数据的尴尬局面。

如果此时设置了 Combiner ,将排序后的结果进行 Combine 操作,这样做的目的是尽可能少地执行数据写入磁盘的操作。

二、ReduceTask

  1. Copy阶段:Reduce会从各个MapTask上远程复制一片数据(每个MapTask传来的数据都是有序的),并针对某一片数据,如果其大小超过一定阈值,则写到磁盘上,否则直接放到内存中;
  2. Merge阶段:在远程复制数据的同时,ReduceTask会启动两个后台进程,分别对内存和磁盘上的文件进行合并,以防止内存使用过多或者磁盘文件过多;
  3. Sort阶段:用户编写reduce()方法,输入数据是按key进行聚集的一组数据
  4. Reduce阶段:对排序后的键值对调用reduce()方法,键相等的键值对调用一次reduce()方法,每次调用会长生零个或者多个键值对,最后把这些输出的键值对亵渎到hdfs上;
  5. Write阶段:reduce()函数将计算结果写到HDFS上。
相关推荐
TDengine (老段)1 小时前
TDengine Python 连接器入门指南
大数据·数据库·python·物联网·时序数据库·tdengine·涛思数据
亚古数据1 小时前
亚古数据:查询斯里兰卡公司可以获取什么文件和信息?
大数据·亚古数据·斯里兰卡公司查询
WLJT1231231232 小时前
守护自然与滋养民生的绿色之路
大数据·安全
min1811234562 小时前
PC端零基础跨职能流程图制作教程
大数据·人工智能·信息可视化·架构·流程图
静听松涛1332 小时前
中文PC端多人协作泳道图制作平台
大数据·论文阅读·人工智能·搜索引擎·架构·流程图·软件工程
黄焖鸡能干四碗3 小时前
智能制造工业大数据应用及探索方案(PPT文件)
大数据·运维·人工智能·制造·需求分析
世岩清上3 小时前
乡村振兴主题展厅本土化材料运用与地域文化施工表达
大数据·人工智能·乡村振兴·展厅
说私域3 小时前
短视频私域流量池的变现路径创新:基于AI智能名片链动2+1模式S2B2C商城小程序的实践研究
大数据·人工智能·小程序
MM_MS4 小时前
Halcon图像锐化和图像增强、窗口的相关算子
大数据·图像处理·人工智能·opencv·算法·计算机视觉·视觉检测
焦耳热科技前沿4 小时前
中科大EMA:3秒焦耳热一步合成双功能催化剂用于甲醇氧化协同高效制氢
大数据·人工智能·自动化·能源·材料工程