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、原地排序ÿ…...
RMAN备份bug-审计日志暴涨(select action from gv$session)
问题概述 /oracle 文件系统使用率过大,经过检查是审计日志过大,/oracle 目录 197G 审计日志占用70G,每6个小时产生大量审计日志,日志内容全是select action from gv$session ,猜测可能跟备份有关, $>df -h /oracle…...
30秒从零搭建机器人管理系统(Trae)
1. 安装 [Trae官网】(https://www.trae.com.cn/) 2. 提示词 创建一个BS架构的机器人远程操控系统,具备机器人状态及位置实时更新,可以实现机器人远程遥控,可以对机器人工作日志进行统计分析,以及其它管理系统的常用功能3. 模型…...
OpenFeign 学习笔记
OpenFeign 学习笔记 一、基础入门 1.1 简介 OpenFeign 是基于声明式的 REST 客户端,用于简化服务间远程调用。(编程式 REST 客户端(RestTemplate)) 通过接口注解方式定义 HTTP 请求,自动实现服务调用。 …...
单例模式(线程案例)
单例模式可以分为两种:1.饿汉模式 2.懒汉模式 一.饿汉模式 //饿汉模式👇 class MySingleTon{//因为这是一个静态成员变量,在类加载的时候,就创建了private static MySingleTon mySingleTon new MySingleTon();//创建一个静…...
HttpServletRequest 和 HttpServletResponse 不同JDK版本的引入
java中,可能会用到JWT令牌校验, 这时,大概率会用到 HttpServletRequest,和 HttpServletResponse。 若为 JDK8,SpringBoot 2.7.3 的版本则引入: import javax.servlet.http.HttpServletRequest; import ja…...
数据安全VS创作自由:ChatGPT与国产AI工具隐私管理对比——论文党程序员必看的避坑指南
文章目录 数据安全VS创作自由:ChatGPT与国产AI工具隐私管理对比——论文党程序员必看的避坑指南ChatGPTKimi腾讯元宝DeepSeek 数据安全VS创作自由:ChatGPT与国产AI工具隐私管理对比——论文党程序员必看的避坑指南 产品隐私设置操作路径隐私协议ChatGPT…...
【JavaEE】SpringMVC简单练习
目录 一、计算器1.1 接口定义1.2 前端代码1.3 后端代码1.4 运行结果 二、⽤⼾登录2.1 需求2.2 接口定义2.3 前端页面2.4 后端代码2.5 结果 三、留⾔板3.1 需求:3.2 接口3.3 前端代码3.4 后端代码3.5 运行结果 四、图书管理系统4.1 需求4.2 接口定义4.3 后端代码 一、计算器 1.…...
文件上传漏洞:upload-labs靶场11-20
目录 pass-11 pass-12 pass-13 pass-14 pass-15 pass-16 pass-17 pass-18 pass-19 pass-20 pass-11 分析源代码 ,发现上传文件的存放路径可控 if(isset($_POST[submit])){$ext_arr array(jpg,png,gif);$file_ext substr($_FILES[upload_file][name],st…...
苹果Siri升级遇阻,国行iPhone或将引入阿里、百度AI自救
AI整合进展缓慢 苹果正加速将生成式AI技术整合至Siri,但内部消息称其底层技术研发落后于竞争对手,进展未达预期。 国行iPhone将引入双AI模型 苹果计划在2025年中期为国行iPhone引入AI功能,目前已敲定与 阿里巴巴、百度 合作,用户…...
立即释放 Mac 空间!Duplicate File Finder 8 重复文件高速清理工具
Duplicate File Finder 专业的 Mac 重复文件清理工具。查找并删除重复的文件、文件夹,甚至相似的照片。 不要让无用的文件占用磁盘上的宝贵空间。 整理你的 Mac。用最好的重复文件查找器来管理你的文件集合。 扫描任何磁盘或文件夹 主文件夹、照片/音乐库、外部磁…...
ES时序数据库的性能优化
本文主要是讲解了Elasticsearch数据库的优化,大家可以看一下。因为当时实操中涉及了6版本和7版本的一起优化,所以内容上大家自行区分一下。 一、基础设置 1. jvm.options参数详解 不同版本java配置会不一样 -Xms12g -Xmx12g 说明: 将 Xms…...
第3章:启动界面与主界面设计
第3章:启动界面与主界面设计 学习目标 掌握SwiftUI中的启动界面(Splash Screen)设计与实现学习主界面的布局与导航结构设计实现灵感笔记的列表与网格视图掌握SwiftUI中的动画与过渡效果学习如何使用环境对象共享数据理论知识讲解 启动界面设计原则 启动界面(Splash Scre…...
c++ 作用域解析操作符::
目录 什么是 ::? 基本语法 主要用途 1. 访问全局作用域 2. 访问类的静态成员 3. 访问命名空间中的内容 4. 区分嵌套作用域 5. 在类中定义成员函数 注意事项 什么是 ::? 在C中,:: 是作用域解析操作符(Scope Resolution O…...
JavaScript数据类型转换
在JavaScript编程中,由于其动态类型特性,经常需要在不同的数据类型之间进行转换。正确地执行类型转换不仅能够避免潜在的错误,还能提高代码的灵活性和可维护性。本文将探讨JavaScript中的常见数据类型转换方法,并提供一些实用的例…...
css错峰布局/瀑布流样式(类似于快手样式)
当样式一侧比较高的时候会自动换行,尽量保持高度大概一致, 例: 一侧元素为5,另一侧元素为6 当为5的一侧过于高的时候,可能会变为4/7分部dom节点 如果不需要这样的话删除样式 flex-flow:column wrap; 设置父级dom样…...
AI 技术 引入 RTK(实时动态定位)系统,可以实现智能化管理和自动化运行
将 AI 技术 引入 RTK(实时动态定位)系统,可以实现智能化管理和自动化运行,从而提高系统的精度、效率和可靠性。以下是 AI 技术在 RTK 系统中的应用实例: 一、AI 技术在 RTK 系统中的应用场景 1. 整周模糊度快速解算 问题:RTK 的核心是解算载波相位的整周模糊度,传统方法…...
【STM32F103ZET6——库函数】11.捕获红外信号
目录 红外原理 数据码 引导码 连发码 配置捕获引脚 使能引脚时钟 配置定时器 使能定时器时钟 配置输入捕获 中断优先级分组 配置定时器4中断 定时器中断使能 使能定时器 重写定时器中断服务函数 清空定时器中断标志位 例程 例程说明 main.h main.c HongWai…...
江科大51单片机笔记【9】DS1302实时时钟(上)
一、DS1302介绍 DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。RTC(Real Time Clock):实时时钟,是一种集成电路…...
在Spring Boot + MyBatis中优雅处理多表数据清洗:基于XML的配置化方案
问题背景 在实际业务中,我们常会遇到数据冗余问题。例如,一个公司表(sys_company)中存在多条相同公司名的记录,但只有一条有效(del_flag0),其余需要删除。删除前需将关联表…...
【计网】网络层
网络层 4.1 网络层提供的两种服务(一) 面向连接的虚电路服务(二) 无连接的数据报服务 4.2 IPv44.2.1 IPv4概述4.2.2 分类编址的IPv4地址4.2.3 划分子网的IPv4地址4.2.4 无分类编址的IPv4地址4.2.5 IPv4地址的应用规划(…...
稳定性保障-前端
前端稳定性保障是确保应用在各种环境下都能 高效、稳定、无错误 运行的策略和方法。可以从 监控、测试、容灾、优化 等方面进行保障。 📌 1. 监控 & 报警 实时监控 线上情况,及时发现问题。 ✅ 1.1 前端错误监控 • Sentry、Fundebug:…...
批量给 Word 中的所有图片添加水印
如果要给一个 Word 文档加水印,很多小伙伴都能轻松的完成,因为使用 Office 就能轻松的操作,并且也有很多第三方的工具可以帮我们实现。那假如需要给 Word 中的每一张图片都添加上水印,那有什么比较好的方法实现呢?今天…...
jQuery UI 简介
jQuery UI 简介 引言 随着互联网技术的飞速发展,前端开发已经成为网站和应用程序建设的重要组成部分。jQuery UI 是一个基于 jQuery 的用户界面库,它为开发者提供了丰富的交互组件和视觉效果,使得创建具有吸引力和互动性的网页变得更加简单。本文将为您详细介绍 jQuery UI…...
`label` 标签的 `for` 属性详解
一、基本概念 label 标签的 for 属性用于将标签与表单控件(如 input、select 等)绑定,其值需与目标元素的 id 完全匹配。这种关联允许用户点击标签时触发控件交互(如聚焦输入框或切换复选框),提升操作便捷…...
ArcGIS操作:10 投影坐标系转地理坐标系
应用情景:在计算shp面质心坐标的时,由于需要的坐标是经纬度,所以需要将投影坐标系转化为地理坐标系 1、打开工具箱 2、右侧:数据管理工具 → 投影和变换 → 要素 → 投影 3、选择投影的数据、输出路径、地理坐标系,点…...
【单片机通信技术】串口通信的几种方式与比较,详细解释SPI通信
一、介绍 串口通信是一种通过串行接口逐位传输数据的通信方式,广泛应用于嵌入式系统、工业控制、传感器网络等领域。 二、以下是几种常见的串口通信方式及其对比: 1.UART(Universal Asynchronous Receiver/Transmitter) 特点&am…...
DeepSeek开源Day5:3FSsmallpond技术详解
2 月 24 日,DeepSeek 启动 “开源周”,第四个开源的代码库为 3FS&smallpond(又是一下发布了两个)。 3FS(Fire-Flyer File System)是 DeepSeek 内部开发的一款高性能分布式文件系统,旨在为 A…...
常见的限流算法有哪些
计数器算法 原理:在固定的时间窗口内,对请求进行计数,当请求数量达到设定的阈值时,就开始限流,拒绝多余的请求。例如,设定 1 分钟的时间窗口内允许最多 100 个请求,那么在这 1 分钟内每来一个请…...
Android 低功率蓝牙之BluetoothGattCallback回调方法详解
BluetoothGattCallback 是 Android 中用于处理蓝牙低功耗(BLE)设备通信的核心回调类。它负责处理与 BLE 设备的连接、服务发现、数据读写等操作的结果。以下是对 BluetoothGattCallback 的详细解析: 1. onConnectionStateChange 触发时机&am…...
socket.io协议内容详解
Socket.IO 是一个基于事件的实时通信库,支持双向通信。它并非单一协议,而是结合了 Engine.IO 传输层和 Socket.IO 应用层协议的复合体系。以下是其协议核心内容的详细解析: 1. 协议分层 Engine.IO:负责底层传输(如 WebSocket、HTTP 长轮询),处理连接稳定性、心跳和断线重…...
在Oracle中编写雪花算法升学雪花ID
雪花算法的定义不详细说了哈,直接给出代码! --雪花配置 --DROP TABLE SNOWFLAKE_CONFIG; CREATE TABLE SNOWFLAKE_CONFIG ( DATA_CENTER_ID NUMBER(5) NOT NULL, WORKER_ID NUMBER(5) NOT NULL, LAST_TIMESTAMP NUMBER(20) NOT NULL, SEQUENCE NUMBE…...
我们来学nginx -- 优化下游响应速度
优化下游响应速度 题记启用 Gzip 压缩优化缓冲区设置设置超时时间 题记 专家给出的配置文件真是…,信息量有点大啊! nginx:我只想作为一个简单的代理专家爸爸:都是为了你好! 这样,先从有关响应速度的角度&…...
SELECT ... FOR UPDATE 加锁后,其他线程能读取数据吗
在执行 SELECT * FROM table WHERE ... FOR UPDATE 语句时,MySQL 会对查询结果集中的行加 排他锁(X锁)。这种锁的行为会影响其他事务对这些行的读写操作。以下是具体的影响: 1. 加锁后的效果 当前事务: 对查询结果集中…...
【论文阅读】多模态——LSeg
文献基本信息 标题:Language-Driven Semantic Segmentation作者:Boyi Li、Kilian Q. Weinberger、Serge Belongie、Vladlen Koltun、Ren Ranftl单位:Cornell University、University of Copenhagen、Apple、Intel Labs会议/期刊:…...
GBT32960 协议编解码器的设计与实现
GBT32960 协议编解码器的设计与实现 引言 在车联网领域,GBT32960 是一个重要的国家标准协议,用于新能源汽车与监控平台之间的数据交互。本文将详细介绍如何使用 Rust 实现一个高效可靠的 GBT32960 协议编解码器。 整体架构 编解码器的核心由三个主要组…...
Tomcat之 配置https协议即SSL证书
太难了,Tomcat7服务器配置Https协议的SSL证书,半天没搞定啊 切换,Tomcat8 分分钟 参考 https://blog.csdn.net/u014553029/article/details/86672342 https://blog.csdn.net/qq_37138756/article/details/103516627 https://blog.csdn.net/r…...
如何将飞书多维表格与DeepSeek R1结合使用:效率提升的完美搭档
将飞书的多维表格与DeepSeek R1结合使用,就像为你的数据管理和分析之旅装上一台涡轮增压器。两者的合作,不仅仅在速度上让人耳目一新,更是将智能化分析带入了日常的工作场景。以下是它们如何相辅相成并改变我们工作方式的一些分享。 --- 在…...
JPA编程,去重查询ES索引中的字段,对已有数据的去重过滤,而非全部字典数据
一、背景 课程管理界面,查询前,需要把查询元数据给出。 学科列表、学段列表和分类列表,我们把它定义为查询元数据。 一般的业务需求是: 系统维护好多个字典,比如学科、学段等等,相当于属性库。 但是&…...
Kubermetes 部署mysql pod
步骤 1: 创建 PersistentVolume 和 PersistentVolumeClaim 首先为 MySQL 创建一个 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 来确保数据的持久性。 mysql-pv.yaml: apiVersion: v1 kind: PersistentVolume metadata:name: mysql-pv-volume spec:cap…...
自定义wordpress三级导航菜单代码
首先,在你的主题functions.php文件中,添加以下代码以注册一个新的菜单位置: function mytheme_register_menus() {register_nav_menus(array(primary-menu > __(Primary Menu, mytheme))); } add_action(init, mytheme_register_menus); …...
剑指 Offer II 060. 出现频率最高的 k 个数字
comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20060.%20%E5%87%BA%E7%8E%B0%E9%A2%91%E7%8E%87%E6%9C%80%E9%AB%98%E7%9A%84%20k%20%E4%B8%AA%E6%95%B0%E5%AD%97/README.md 剑指 Offer II 060. 出现频率最高的…...
SQL Server数据库中用存储过程来取顺序号
SQL Server数据库中用存储过程来取顺序号 表sys_number,字段name字符,表示前缀,value数字,一个一个递增 存储过程代码: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER procedure [dbo].[usp_GetSysid]name varchar(5…...
JS—组成:2分钟掌握什么是ECMAScript操作,什么是DOM操作,什么是BOM操作
个人博客:haichenyi.com。感谢关注 1. 目录 1–目录2–组成3–内置对象 2. 组成 一直都在说JS,JS,到底啥是JS有了解过吗?JS由哪几部分组成的呢? 定义: JavaScript是一种轻量级、解释型或即时编译型的编程语…...
如何使用 Ollama 的 API 来生成聊天
如何使用 Ollama 的 API 来生成聊天 简介 生成聊天 生成聊天的示例 加载模型 卸载模型 简介 Ollama 提供了一个 RESTful API,允许开发者通过 HTTP 请求与 Ollama 服务进行交互。这个 API 覆盖了所有 Ollama 的核心功能,包括模型管理、运行和监控。本…...
Jenkins学习笔记
文章目录 一、Jenkins简介二、Jenkins的安装1. 安装前准备2. 安装Jenkins3. 启动Jenkins 三、Jenkins的配置1. 初始配置2. 全局工具配置3. 插件安装 四、Jenkins的使用1. 创建新任务2. 配置任务3. 触发构建4. 查看构建结果 五、Jenkins的高级功能1. 分布式构建2. 流水线&#x…...
公开笔记:自然语言处理(NLP)中文文本预处理主流方法
在自然语言处理(NLP)领域,将中文文本转化为数字的主流方法主要集中在预训练语言模型和子词编码技术上。这些方法能够更好地捕捉语义信息,并且在各种NLP任务中表现出色。以下是目前主流的文本编码方法: 1. 基于预训练语…...
第5章 使用OSSEC进行监控(网络安全防御实战--蓝军武器库)
网络安全防御实战--蓝军武器库是2020年出版的,已经过去3年时间了,最近利用闲暇时间,抓紧吸收,总的来说,第5章开始进入主机安全(HIDS)领域了,2022年的时候有幸做过终端安全一段时间&a…...
计算机毕业设计SpringBoot+Vue.js电商平台(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
【音视频】ffplay简单过滤器
一、ffplay简单过滤器 视频旋转:借助transpose滤镜 ffplay -i 1.mp4 -vf transpose1这里选择不同的数字是不同的方向: 视频翻转:借助hflip/vflip实现水平和垂直翻转: 水平翻转 ffplay 1.mp4 -vf hflip垂直翻转 ffplay 1.mp4 …...