【HBase-读写流程】HBase的读写流程与内部执行机制

news2025/2/27 4:34:56

【HBase-读写流程】HBase的读写流程与内部执行机制

  • 1)HBase 读取数据流程
    • 1.1.文字描述
    • 1.2.流程图
  • 2)HBase 写入数据流程
    • 2.1.文字描述
    • 2.2.流程图
  • 3)flush 机制与 compact 机制的原理
    • 3.1.文字描述
    • 3.2.流程图

1)HBase 读取数据流程

1.1.文字描述

1、客户端发起读取数据的请求,然后首先要连接 zookeeper,通过 zookeeper 去找到 HBase 中的 meta 文件对应 region 所对应的 regionserver 的地址。

此时注意

  • 如果是用 scan 发起的全局扫描,那么就会在 meta 文件中找到表中所有数据对应的所有的 region,并且返回所有 region 对应的所有的 regionserver 的地址。

  • 如果是用 get 发起的局部扫描,那么就会在 meta 文件中找到要搜索数据的 rowkey 对应的 region 所对应的 regionserver 的地址。

2、此时开始并发连接 regionserver,首先要读取 memstore 中的数据,然后读取块缓存中的数据,其次读取小的 storefile 中的数据,最后读取大的 HFile 中的数据。

3、客户端读取完数据后,将读取的数据进行排序,展示给用户。

注意

如果在读取数据的时候,有过滤的信息,那么这些过滤条件会被分发到对应的region上,由各个region进行相关的过滤

1.2.流程图

在这里插入图片描述

2)HBase 写入数据流程

2.1.文字描述

(1)客户端:

1、客户端发起写入数据的请求,然后首先要连接 zookeeper,通过 zookeeper 去找到 HBase 中的 meta 文件对应的 region 所对应的 regionserver 的地址,连接 meta 文件所在的 regionserver,通过要写入数据的 rowkey,找到 rowkey 对应的 region(底层是根据 region 的范围去寻找的),然后找到 region 对应的 regionserver 的地址。

2、客户端开始连接 regionserver,首先要把数据写入到 regionserver 中的 HLog 目录中,当数据在 HLog 目录中写完之后,开始写入到 region 下的 memstore 中,当写入完成后,此时客户端的写入工作就成功了。

(2)服务端:

3、不断的写入数据,当 memstore 内存中的数据达到一定的阈值之后(默认是128M),就会开启 flush 机制,把 memstore 中的数据刷新到磁盘上,形成一个 storeFile 文件,不断的写入,在磁盘上就会形成多个 storeFile 文件,当 storeFile 文件达到一定的阈值之后(默认是三个),就会开始 compact 机制,把 storeFile 文件合并成为一个大的 HFile 文件,不断地合并,当这个 HFile 文件达到一定的阈值之后(10G),就会开启一个 split 机制,将这个 HFile 文件进行切割,形成两个 HFile 文件。

注意

HFile 对应的 region,也会一分为二,起初这两个 region 可能会被同一个 regionserver 所管理,但是随着时间的推移可能会被不同的 regionserver 所管理。

2.2.流程图

在这里插入图片描述

3)flush 机制与 compact 机制的原理

3.1.文字描述

(1)flush机制:

1、数据不断的写入,当 memstore 达到一定的阈值之后,就会将当前这个 memstore 关闭,然后开启一个新的memstore继续写入数据。

2、这个关闭的 memsotre 会被放置到一个 pipeline 管道中,也就是一个队列管道,管道中的 memstore 并不会直接进行 flush 刷新机制,而是会先等待,在等待的过程中,可能还会有 memstore 被放置在 pipeline 管道中,当达到一定的阈值后(这个阈值和服务器的内存有关),就会开启 flush 机制。

3、开启flush机制,将管道中的所有 memstore 进行一个 in-memory-compact,合并成为一个 storeFile 文件,放置到 HDFS 磁盘上。

注意

这种 flush 的好处是,减少 flush 的次数,从而减少大量的磁盘 I/O 次数,并且让更多的数据存储在内存中,加快查询数据的效率。

(2)compact机制:

4、数据不断的写入形成多个 storeFile 文件,当达到一定的阈值之后(默认是3个),就会开启 compact 机制。

此时 compact 的机制会被分为两个部分:

① minor:

这个部分就是将多个 storeFile 文件合并成为一个较大的 HFile 文件的过程。

每小时都会对 storeFile 进行一个合并的操作,但是这个合并过程中只对数据进行一个排序,如果 storeFile 中有数据被删除,或者无效了,并不会在这个阶段进行处理,采用边读取 storeFile 文件边向 HFile 文件追加的方式,将数据合并起来(第一次执行的时候,这个 HFile 就是后面所提到的大的 HFile)

注意

此过程中因为不做任何处理,所以这个过程的效率还是比较高的。

② major:

这个部分就是将这个较大的 HFile 和大的 HFile 进行合并,形成一个更大的 HFile 的过程,在合并的过程中,如果有的数据被删除了,或者被无效了,都要在这个阶段进行处理,合并成为一个最终的结果文件。

默认是七天执行一次此操作,但是在生产的过程中,一般把此操作的自动执行关闭,都是采用手动执行(选择服务器不繁忙的时候,例如凌晨)

注意:

此阶段对资源的消耗比较高,所以在执行的过程中,整个表不允许进行任何的读写操作。

3.2.流程图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/412888.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

游戏开发之Unity2021URP项目场景的构建

地面的修改和编辑:地面插件的使用 打开包管理器,在左边的包那里选择“Unity注册表”,在右边进行搜索“Polybrush”,之后选择右下角的安装 安装完之后要选择样本中的URP进行导入,因为我们的项目是URP渲染管线的&#x…

IronOCR for .NET crack,IronOCR的独特功能

IronOCR for .NET crack,IronOCR的独特功能  在IronTesseract上添加了新的“ReadPdfAndOverlayText”方法,该方法允许您添加文本并保留原始PDF书签/注释。 添加了对存储在应用程序子文件夹中的.config和.json文件中的许可证密钥的支持。 将IronSoftware.System.Dra…

shell 函数和数组作业

1、编写函数,实现打印绿色OK和红色FAILED,判断是否有参数,存在为Ok,不存在为FAILED 2、编写函数,实现判断是否无位置参数,如无参数,提示错误 3、编写函数实现两个数字做为参数,返回最大值 4、…

Minecraft 1.12.2模组开发(五十六) 网络(Networking)

我们本次在模组中实现客户端向服务器发送数据的功能。 演示效果演示效果演示效果 1.新建packet包,包中新建PacketHandler类: PacketHandler.java package com.joy187.mcjoygun.packet;import com.joy187.mcjoygun.Main; import com.joy187.mcjoygun.u…

Huggingface微调BART的代码示例:WMT16数据集训练新的标记进行翻译

BART模型是用来预训练seq-to-seq模型的降噪自动编码器(autoencoder)。它是一个序列到序列的模型,具有对损坏文本的双向编码器和一个从左到右的自回归解码器,所以它可以完美的执行翻译任务。 如果你想在翻译任务上测试一个新的体系…

Java Stream API 操作完全攻略:让你的代码更加出色 (四)

前言 Java Stream 是一种强大的数据处理工具,可以帮助开发人员快速高效地处理和转换数据流。使用 Stream 操作可以大大简化代码,使其更具可读性和可维护性,从而提高开发效率。本文将为您介绍 Java Stream 操作的所有方面,包括 ran…

交友项目【通用设置】三个功能实现

目录 1:交友项目【通用设置】 1.1:查询通用设置 1.1.1:接口地址 1.1.2:流程分析 1.1.3:代码实现 1.2:设置陌生人问题 1.2.1:接口地址 1.2.2:流程分析 1.2.3:代码…

Python 小型项目大全 51~55

五十一、九十九瓶的变体 原文:http://inventwithpython.com/bigbookpython/project51.html 在歌曲“九十九瓶”的这个版本中,该程序通过删除一个字母、交换一个字母的大小写、调换两个字母或重叠一个字母,在每个小节中引入了一些小的不完美。…

4月,我从外包公司离职了

先说一下自己的情况,大专生,18年通过校招进入湖南某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

python学习

1.安装 Download Python | Python.org 安装时,点击添加路径。 1.1 python的解释器 我们把代码写进.py结尾的文件里,然后 python 路径文件名就可以运行它了。 2.字面量 例如print("我们"),"我们",就是字符串字面量,…

简化你的代码,提高生产力:这10个Lambda表达式必须掌握

前言 Lambda表达式是一种在现代编程语言中越来越常见的特性,可以简化代码、提高生产力。这篇文章将介绍10个必须掌握的Lambda表达式,这些表达式涵盖了在实际编程中经常用到的常见场景,例如列表操作、函数组合、条件筛选等。通过学习这些Lambd…

JUC源码系列-CountDownLatch源码研读

前言 CountDownLatch是一个很有用的工具,latch是门闩的意思,该工具是为了解决某些操作只能在一组操作全部执行完成后才能执行的情景。例如,小组早上开会,只有等所有人到齐了才能开;再如,游乐园里的过山车&…

运行时内存数据区之堆(二)

Minor GC、Major GC、与Full GC JVM在进行GC时,并非每次都对上面三个内存(新生代、老年代:方法区)区域一起回收的,大部分时候回收的都是指新生代。 针对HotSpot VM的实现,它里面的GC按照回收区域又分为两…

浅谈 如果做微服务了 这个模块怎么去划分?

如果做微服务了 这个模块怎么去划分? 还是高内聚 低耦合的一个思想吧 ,单一职责的设计原则,也是一个封装的思想吧, 业务维度: ​ 按照业务的关联程度来决定,关联比较密切的业务适合拆分为一个微服务&…

C++语法(14)---- 模板进阶

C语法(13)---- 模拟实现priority_queue_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/130069707?spm1001.2014.3001.5501 目录 1.非类型模板参数 2.模板的特化 1.函数模板(仿函数) 2.类模板 1.全特化 2.半特化、偏…

INFINONE XC164单片机逆向记录(6)C语言学习

本人所写的博客都为开发之中遇到问题记录的随笔,主要是给自己积累些问题。免日后无印象,如有不当之处敬请指正(欢迎进扣群 24849632 探讨问题); 写在专栏前面https://blog.csdn.net/Junping1982/article/details/129955766 INFINONE XC164单片机逆向记录(1)资料准备

FusionCharts Suite XT v3.20.0 Crack

FusionCharts Suite XT v3.20.0 改进了仪表的径向条形图和调整大小功能。2023 年 4 月 11 日 - 9:37新版本特征 添加了一个新方法“_changeXAxisCoordinates”,它允许用户将 x 轴更改为在图例或数据交互时自动居中对齐。更新了 Angular 集成以支持 Angular 版本 14 …

【无功优化】基于多目标差分进化算法的含DG配电网无功优化模型【IEEE33节点】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

SAM - 分割一切图像【AI大模型】

如果你认为 AI 领域已经通过 ChatGPT、GPT4 和 Stable Diffusion 快速发展,那么请系好安全带,为 AI 的下一个突破性创新做好准备。 推荐:用 NSDT场景设计器 快速搭建3D场景。 Meta 的 FAIR 实验室刚刚发布了 Segment Anything Model (SAM)&am…

电脑软件:推荐一款Windows剪贴板增强软件——ClipX

目录 ClipX能做什么? 软件优点 软件不足之处 今天要介绍的剪切板神器——ClipX,拥有它可以作为弥补Windows 自带的剪贴板的短板的增强型工具软件。 ClipX能做什么? 1. 扩充剪贴板数量,数量可以自己设置 ClipX支持4到1024个剪…