当前位置: 首页 > news >正文

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上。 
http://www.lryc.cn/news/336558.html

相关文章:

  • 速看!这8道嵌入式面试题你都会吗?
  • 基于SSM的电影网站(有报告)。Javaee项目。ssm项目。
  • SOCKS代理是如何提高网络性能和兼容性的?
  • 好菜每回味道不同--建造者模式
  • RuoYi-Cloud下载与运行
  • Vue2.x计算属性
  • Vue中使用require.context()自动引入组件和自动生成路由的方法介绍
  • 【炒股Zero To Hero】MACD金叉死叉到底是否有效,加上这个指标回报率增加197倍
  • Linux网络名称空间和虚拟机有何区别
  • 【UE Niagara】蓝图获取粒子数据
  • 更改el-cascade默认的value和label的键值
  • 2024邮件工单系统排行揭晓:出海必备新宠
  • java题目17:以m行n列二维数组为参数进行方法调用,分别计算二维数组各列元素之和,返回并输出计算结果(MethodCalls17)
  • Python中Python-docx 包的run介绍
  • vue2升级到vue3的一些使用注意事项记录(三)
  • SwiftUI Swift 显示隐藏系统顶部状态栏
  • PowerJob 分布式任务调度简介
  • Java——数组练习
  • 波士顿房价预测案例(python scikit-learn)---多元线性回归(多角度实验分析)
  • 在 Queue 中 poll()和 remove()有什么区别?
  • 实现鼠标在页面点击出现焦点及大十字星
  • 如何在 7 天内掌握C++?
  • FineBI概述
  • 百度Create AI开发者大会剧透丨用好三大AI神器 ,人人都是开发者
  • 外包干了17天,技术倒退明显
  • Unity类银河恶魔城学习记录12-8 p130 Skill Tree UI源代码
  • priority_queue的使用以及模拟实现
  • 主机有被植入挖矿病毒篡改系统库文件
  • Python 推导式介绍
  • VUE3和SpringBoot实现ChatGPT页面打字效果SSE流式数据展示