当前位置: 首页 > 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架构设计与实现原理 》

相关文章:

MR的环形缓冲区(底层)

MapReduce的大致流程: 1、HDFS读取数据; 2、按照规则进行分片,形成若干个spilt; 3、进行Map 4、打上分区标签(patition) 5、数据入环形缓冲区(KVbuffer) 6、原地排序&#xff…...

下载Hugging Face模型的几种方式

1.网页下载 直接访问Hugging Face模型页面,点击“File and versions”选项卡,选择所需的文件进行下载。 2.使用huggingface-cli 首先,安装huggingface_hub: pip install huggingface_hub 然后,使用以下命令下载模型&#xff1…...

Java 第十一章 GUI编程(2)

目录 GUI 事件处理 基本思路 添加事件监听器 对话框 实例 GUI 事件处理 对于采用了图形用户界面的程序来说,事件控制是非常重要的;到目前为止, 我们编写的图形用户界面程序都仅仅只是完成了界面,而没有任何实际的功能&…...

Redis数据结构深度解析:从String到Stream的奇幻之旅(一)

Redis系列文章 《半小时掌握Redis核心操作:从零开始的实战指南》-CSDN博客 Redis数据结构深度解析:从String到Stream的奇幻之旅(一)-CSDN博客 Redis数据结构深度解析:从String到Stream的奇幻之旅(二&…...

7V 至 30V 的超宽 VIN 输入范围,转换效率高达 96%的WD5030

WD5030 具备 7V 至 30V 的超宽 VIN 输入范围,这一特性使其能够适应多种不同电压等级的供电环境,无论是在工业设备中常见的较高电压输入,还是在一些便携式设备经过初步升压后的电压,WD5030 都能轻松应对,极大地拓展了应…...

【Git原理与使用一】Git概念与基本操作

文章目录 1. Git 的概念2. Git 的安装3. Git 的认识3.1 创建本地仓库3.2 配置Git3.3 认识工作区、暂存区、版本库 4. Git 的基本操作4.1、认识几个指令1)git add 添加命令2)git commit 提交命令3)git log 查看日志命令4)git cat-f…...

kettle工具使用从入门到精通(一)

安装 可以从链接: 官网(下载链接在Pentaho.pdf文件里)或者网络上查找对应的版本安装 Kettle (PDI) 版本与 JDK 版本对应关系 Kettle (PDI) 版本支持的 JDK 版本备注PDI 9.x 及以上JDK 11 或更高版本推荐使用 OpenJDK 或 Oracle JDK 11。PDI 8.xJDK 8 …...

Java 实现 Oracle 的 MONTHS_BETWEEN 函数

介绍 因为系统迁移, 有一些函数要转成 Java 版本, Oracle 的 官方介绍 - MONTHS_BETWEEN MONTHS_BETWEEN returns number of months between dates date1 and date2. The month and the last day of the month are defined by the parameter NLS_CALENDAR. If date1 is late…...

windows下使用msys2编译ffmpeg

三种方法: 1、在msys2中使用gcc编译 2、在msys2中使用visual studio编译(有环境变量) 3、在msys2中使用visual studio编译(无环境变量) 我的环境: 1、msys2-x86_64-20250221 2、vs2015 3、ffmpeg-7.1…...

Vivado常用的时序约束方法

1,create_clock :创建时钟约束 create_clock -period 20.000 -name sys_clk [get_ports sys_clk 该约束含义是创建一个时钟周期20ns的时钟,时钟名字为sys_clk。注意:如果是差分时钟,只需要约束差分时钟的P端,N端不用约束。 2,set_clock_uncertainty:设置时钟不确定性 s…...

力扣HOT100之哈希:1. 两数之和

这道题之前刷代码随想录的时候已经刷过好几遍了&#xff0c;看到就直接秒了。这道题主要是通过unordered_map<int, int>来建立哈希表&#xff0c;其中键用来保存向量中的元素&#xff0c;而对应的值则为元素的下标。遍历整个向量&#xff0c;当遍历到nums[i]时&#xff0…...

如何在rust中解析 windows 的 lnk文件(快捷方式)

一、从标题二开始看&#x1f601; 这些天在使用rust写一个pc端应用程序&#xff0c;需要解析lnk文件获取lnk的图标以及原程序地址&#xff0c;之前并没有过pc端应用程序开发的经验&#xff0c; 所以在广大的互联网上游荡了两天。额&#x1f97a; 今天找到了这个库 lnk_parse很…...

豆包大模型 MarsCode AI 刷题专栏 001

001.找单独的数 难度&#xff1a;易 问题描述 在一个班级中&#xff0c;每位同学都拿到了一张卡片&#xff0c;上面有一个整数。有趣的是&#xff0c;除了一个数字之外&#xff0c;所有的数字都恰好出现了两次。现在需要你帮助班长小C快速找到那个拿了独特数字卡片的同学手上…...

python语言总结(持续更新)

本文主要是总结各函数&#xff0c;简单的函数不会给予示例&#xff0c;如果在平日遇到一些新类型将会添加 基础知识 输入与输出 print([要输出的内容])输出函数 input([提示内容]如果输入提示内容会在交互界面显示&#xff0c;用以提示用户)输入函数 注释 # 单行注释符&…...

leetcode15 三数之和

1.哈希法 为了避免重复 class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {set<vector<int>> temple;//使用 set 来存储符合条件的三元组&#xff0c;避免重复vector<vector<int>> out;//存放最终输…...

深入探讨AI-Ops架构 第一讲 - 运维的进化历程以及未来发展趋势

首先&#xff0c;让我们一起回顾运维的进化之路&#xff0c;然后再深入探讨AI-Ops架构的细节。 运维的进化历程 1. AI 大范围普及前的运维状态 (传统运维) 在AI技术尚未广泛渗透到运维领域之前&#xff0c;我们称之为传统运维&#xff0c;其主要特点是&#xff1a; 人工驱动…...

Android Native 之 文件系统挂载

一、文件系统挂载流程概述 二、文件系统挂载流程细节 1、Init启动阶段 众所周知&#xff0c;init进程为android系统的第一个进程&#xff0c;也是native世界的开端&#xff0c;要想让整个android世界能够稳定的运行&#xff0c;文件系统的创建和初始化是必不可少的&#xff…...

常用word python matlab快捷键

这里写自定义目录标题 WordMatlabpythonlinuxWord Matlab 1 结构体 字符串成员做索引,必须()类似python* 解包作用,转化字符串到属性类型 如果属性名存入列表 a = [“para1”] 比如stru1.para1 = [‘c’,‘d’]; 那么若要用a中para1来索引,必须要加圆括号; ==》 X Strut…...

MySQL------存储引擎和用户和授权

9.存储引擎 1.两种引擎 MyISAM和InnoDB 2.两种区别 1.事务&#xff1a; MyISAM不支持事务 2.存储文件: innodb : frm、ibd MyISAM: frm、MYD、MYI 3.数据行锁定: MyISAM不支持 4.全文索引: INNODB不支持&#xff0c;所以MYISAM做select操作速度很快 5.外键约束: MyISAM…...

react拖曳组件react-dnd的简单封装使用

分享原因 由于项目中需要使用拖曳组件(需求:全局&#xff0c;跨组件&#xff0c;跨数据)&#xff0c;我选择了react-dnd 概念 React DnD 是一组 React 高阶组件&#xff0c;我们在使用的时候只需要将目标元素进行包裹&#xff0c;就可以实现目标元素具有拖动或接受拖动的功能。…...

SPIRAN ART SUMMONER对比评测:与传统图像生成算法的效果差异

SPIRAN ART SUMMONER对比评测&#xff1a;与传统图像生成算法的效果差异 本文通过实际测试对比&#xff0c;展示SPIRAN ART SUMMONER与传统图像生成算法在效果、速度、易用性等方面的真实差异&#xff0c;用数据和案例说话。 1. 评测背景与方法 图像生成技术近年来发展迅猛&am…...

互联网应用架构:LiuJuan20260223Zimage高并发服务设计

互联网应用架构&#xff1a;LiuJuan20260223Zimage高并发服务设计 1. 引言 想象一下这样的场景&#xff1a;你的图片服务突然火了&#xff0c;每秒有几十万用户同时上传和查看图片&#xff0c;服务器开始报警&#xff0c;响应速度越来越慢&#xff0c;用户体验直线下降。这不…...

无刷电机S型与梯形加减速曲线实战:从算法到代码的平滑运动实现

1. 无刷电机加减速控制的核心价值 第一次调试无刷电机时&#xff0c;我盯着那个疯狂抖动的机械臂陷入了沉思——原来不加控制的电机就像脱缰的野马&#xff0c;根本没法用在精密设备上。后来才明白&#xff0c;加减速曲线就是驯服这匹野马的缰绳。无论是工厂里的机械臂&#x…...

i.MX6ULL镜像制作避坑指南:为什么你的SD卡启动失败?从分区表到文件系统的深度解析

i.MX6ULL镜像制作避坑指南&#xff1a;为什么你的SD卡启动失败&#xff1f;从分区表到文件系统的深度解析 当你在深夜调试i.MX6ULL开发板&#xff0c;反复确认每个步骤都按教程操作&#xff0c;却依然遭遇SD卡启动失败时&#xff0c;那种挫败感每个嵌入式开发者都深有体会。本文…...

fluent_edem流固耦合方面的教学或者代做或者代码二次开发,气液固三相耦合。 接口优化...

fluent_edem流固耦合方面的教学或者代做或者代码二次开发&#xff0c;气液固三相耦合。 接口优化&#xff0c;计算速率大大提升。 模拟散体和颗粒材料的离散元法多用途仿真软件&#xff0c;支持GPU加速&#xff0c;与颗粒流软件PFC相比&#xff0c;具有友好的图形用户界面、更快…...

Fish Speech 1.5在医疗健康领域的语音辅助应用

Fish Speech 1.5在医疗健康领域的语音辅助应用 1. 引言 在医疗健康领域&#xff0c;清晰准确的语音交流至关重要。医生需要向患者解释病情&#xff0c;护士要按时提醒用药&#xff0c;患者可能因为视力问题无法阅读病历资料。传统的文字信息在这些场景中往往显得不够直观和便…...

GIS小白也能搞定!用QGIS加载2023版全国自然保护区SHP数据的保姆级教程

GIS小白也能搞定&#xff01;用QGIS加载2023版全国自然保护区SHP数据的保姆级教程 第一次接触GIS软件时&#xff0c;看着满屏的专业术语和复杂界面&#xff0c;很多人都会感到无从下手。但别担心&#xff0c;今天我们就用最通俗易懂的方式&#xff0c;带你一步步完成全国自然保…...

SeqGPT-560M代码补全能力展示:Python开发效率提升50%

SeqGPT-560M代码补全能力展示&#xff1a;Python开发效率提升50% 1. 引言 作为一名长期与代码打交道的开发者&#xff0c;我深知代码补全工具的重要性。好的补全工具不仅能减少敲击键盘的次数&#xff0c;更能帮助我们避免低级错误、保持编码思路的连贯性。最近体验了SeqGPT-…...

如何在1小时内掌握TinySAM:从零开始构建高效图像分割模型

如何在1小时内掌握TinySAM&#xff1a;从零开始构建高效图像分割模型 【免费下载链接】TinySAM 项目地址: https://gitcode.com/gh_mirrors/ti/TinySAM 想象一下&#xff0c;你需要在移动设备上实时分割图像中的任意物体&#xff0c;但传统模型动辄几百兆&#xff0c;运…...

搞懂 SAP Fiori 中的 RFC 连接:把后端系统、系统别名与 Launchpad 运行链路一次讲透

在很多 SAP Fiori 项目里,团队把注意力都放在 SAPUI5、OData、Fiori Elements、语义对象导航这些能力上,却常常在集成经典应用时踩坑。真正到了项目上线阶段,用户不会关心应用是 SAPUI5、Web Dynpro ABAP,还是 SAP GUI for HTML 实现的,他们只会问一句:为什么在 SAP Fior…...