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

MR的环形缓冲区(底层)

MapReduce的大致流程:

1、HDFS读取数据;

2、按照规则进行分片,形成若干个spilt;

3、进行Map

4、打上分区标签(patition)

5、数据入环形缓冲区(KVbuffer)

6、原地排序,并溢写(sort+spill)

7、combiner+merge,落地到磁盘

8、shuffle到reduce缓存

9、继续归并排序(mergesotr)

10、reduce

11、输出到HDFS

解剖环形缓冲区:

环形缓冲区解释:环形缓冲区分为三块,空闲区、数据区、索引区。初始位置取名叫做“赤道”,就是圆环上的白线那个位置。初始状态的时候,数据和索引都为0,所有空间都是空闲状态。

tips:这里有一个调优参数,可以设置环形缓冲区的大小:

mapreduce.task.io.sort.mb,默认100M,可以稍微设置大一些,但不要太大,因为每个spilt就128M。

个人理解:因为环形缓冲区底层是一个数组

1、首先发生溢出时,Map溢出的数据会转成byte字节,从两侧开始向中间写入,一侧写入数据,一侧写入记录的索引信息。

2、当溢出的数据量达到mapreduce.map.sort.spill.percent参数设置的比例时(默认80%,这个是调优的参数)之后,会从剩余的20%空间中选出一个新的“赤道”,后续Map的溢出数据,将从新的赤道向两侧写入,一侧写入数据,一侧写入记录的索引信息。

3、第二次写入剩余的20%同时,会将第一次写入的数据进行刷写到磁盘中,由此过程循环往复,同时完成溢入-写出的过程,且在主线程mr执行过程中,会产生多次溢写操作,每次溢写都会产生溢写文件,整个操作都在内存,形状像一个环,所以才叫环形缓冲区。

4、完整实现图

为什么要有环形缓冲区?

我们读取到文件,直接排序,然后写到HDFS里不就好了吗?为啥还要整一个环形缓冲区呢?

那从架构的角度看环形缓冲区,他这么设计有什么用呢?解决什么问题呢?

思路广的朋友应该已经反应过来了。环形缓冲区不需要重新申请新的内存,始终用的都是这个内存空间。大家知道MR是用java写的,而Java有一个最讨厌的机制就是Full GC。Full GC总是会出来捣乱,这个bug也非常隐蔽,发现了也不好处理。环形缓冲区从头到尾都在用那一个内存,不断重复利用,因此完美的规避了Full GC导致的各种问题,同时也规避了频繁申请内存引发的其他问题。

另外呢,环形缓冲区同时做了两件事情:1、排序;2、索引。在这里一次排序,将无序的数据变为有序,写磁盘的时候顺序写,读数据的时候顺序读,效率高非常多!

在这里设置索引区也是为了能够持续的处理任务。每读取一段数据,就往索引文件里也写一段,这样在排序的时候能加快速度。

更多的详细信息你可以参考《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理 》

相关文章:

  • MyBatis-Plus开发流程:Spring Boot + MyBatis-Plus 实现对 book_tab 表的增删改查及Redis缓存
  • 在线量化工具总结与实战(mqbench) -- 学习记录
  • Vue 的 render 函数如何与 JSX 结合使用
  • 数据库防火墙 架构设计
  • 怎么做数据冷热分离?怎么做分库分表?为什么要用ES?
  • Seurat - Guided Clustering Tutorial官方文档学习及复现
  • 破解透明物体抓取难题,地瓜机器人CASIA 推出几何和语义融合的单目抓取方案|ICRA 2025
  • 图表解析技术:逆向提取图表数据,需要哪几步?
  • 基于Hadoop平台的电信客服数据的处理与分析
  • Ubuntu 合上屏幕 不待机 设置
  • 【Winform】WinForms中进行复杂UI开发时的优化
  • 【leetcode hot 100 48】旋转图像
  • C++ 单词识别_牛客题霸_牛客网
  • 【pyqt】(十一)单选框
  • IDEA 2024.1.7 Java EE 无框架配置servlet
  • C# 简介以及与C、C++的区别
  • 前缀和的利用 前缀和的扩展问题
  • Figma 对图片进行模糊处理
  • 【记录】Python3|Linux下安装Virtualenv和virtualenvwrapper用于处理虚拟环境
  • nodejs去除本地文件html字符
  • 一图看懂|印巴交火后,双方基地受损多少?
  • “三个集中”之后:图说浦东新区28次撤乡并镇
  • 押井守在30年前创造的虚拟世界何以比当下更超前?
  • 为什么越来越多景区,把C位留给了书店?
  • 联合国第二届运动会闭幕,刘国梁受邀成为“联合国运动会大使”
  • 今天北京白天气温超30℃,晚间为何下冰雹?