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

HBase分布式数据库入门到精通

文章目录

HBase分布式数据库入门到精通

一、简单介绍

二、HBase数据模型

三、HBase的架构

四、HBase写操作流程

五、HBase读操作流程

六、HBase minor小合并和major大合并

七、HBase目标表meta表

八、HBase特点

九、HBase的使用场景


HBase分布式数据库入门到精通

一、简单介绍

HBase是一个高可靠性、高性能、面向列、可伸缩、实时读写的分布式 NOSQL 数据库。

当你需要随机、实时读/写访问大数据时,请使用 Apache HBase。

作用:主要用来存储非结构化、半结构化和结构化的松散数据(列式存储的 NoSQL 数据库)

名称解释:

  • NameSpace 命名空间,相当于关系型数据库中的 database,每个命名空间下有多个表。Hbase 默认自带的命名空间 hbase 和 default;hbase 中存放的是 HBase 内置的表,default 是用户默认使用的命名空间。

  • Region 类似关系型数据库的表,不同之处在于 HBase 定义表示只需要声明列族,不需要声明具体的列。列可以动态的按需要指定;HBase 更加适合字段经常变更的场景。开始创建表是一个表对应一个 region,当表增大到一定值是会被拆分为两个 region。

  • Row HBase 表中的每行数据被称为 Row,由一个 RowKey 和多个 Column 组成,数据是按照 RowKey 的字典顺序存储的,并且查询是只能根据 RowKey 进行检索,所以 RowKey 的设计很关键。

  • Column 列是由列族(Column Family)和列限定符(Column Qualifier)进行限定,例如: base:name,base:sex。建表示只需定义列族,而列限定符无需预先定义。

  • Cell 某行中的某一列被称为 Cell(单元格),由{rowkey,column family:columnqualifier,timestamp}确定单元。Cell 中没有具体的类型,全部是字节码的形式(字节数组)存储。

  • TimeStamp 用于标识数据的不同版本(version),每条数据写入时,如果不指定时间戳,系统会自动为其加上该字段,值为写入 HBase 的时间。

 

二、HBase数据模型

逻辑上,HBase 的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列。但从底层物理存储结构(Key-Value)来看,HBase 更像一个 Map。

HBase的逻辑结构如下:

HBase的物理存储结构

 

三、HBase的架构

  • client

1)包含访问HBase的接口,对HBase进行访问

2)客户端通过查询zookeeper中信息获取HBase集群信息。

  • zookeeper

1)保证任何时候,集群中只有一个master

2)存贮所有Region的寻址入口。

3)实时监控RegionServer的上线和下线信息,并实时通知HMaster。

4)存储HBase的Schema和table元数据

  • Master

1)为RegionServer分配Region

2)负责RegionServer的负载均衡

3)发现失效的RegionServer并重新分配其上的region

4)管理用户对table的增删改操作

  • RegionServer

1)RegionServer维护region,处理对这些Region的IO请求

2)RegionServer负责切分在运行过程中变得过大的Region 

  • HLog(WAL Log)

1)HLog文件就是一个普通的Hadoop Sequence File,Sequence File的Key是HLogKey对象,HLogKey中记录了写入数据的归属信息,除了table和region名字外,同时还包括sequence number和timestamp,timestamp是"写入时间",sequence number的起始值为0,或者是最近一次存入文件系 统中sequence number。

2)HLog SequeceFile的Value是HBase的KeyValue对象,即对应HFile中的KeyValue。

  • Region

1) HBase自动把表水平划分成多个区域(region),每个region会保存一个表里面某段连续的数据;每个表一开始只有一个region,随着数据不断插入表,Region不断增大,当增大到一个阀值的时候,Region就会等分会两个新的Region(裂变)。

2) 当table中的行不断增多,就会有越来越多的Region。这样一张完整的表被保存在多个Regionserver上。

  • Memstore&StoreFile

1)一个region由多个store组成,一个store对应一个CF(列族)

2)Store包括位于内存中的memstore和位于磁盘的storefile。写操作先写入Memstore,当Memstore中的数据达到某个阈值,HRegionserver会启动flashcache进程写入storefile,每次写入形成单独的一个storefile

3)StoreFile是只读的,一旦创建后就不可以再修改。因此Hbase的更新其实是不断追加的操作。当一个Store中storefile文件的数量增长到一定阈值后,系统会进行合并(minor、 major compaction),在合并过程中会进行版本合并和删除工作(majar),将对同一个key的修改合并到一起,形成更大的storefile。

4)当一个region所有storefile的大小和超过一定阈值后,会把当前的region分割为两个,并由hmaster分配到相应的regionserver服务器,实现负载均衡。

5)客户端检索数据,先在memstore找,找不到再找storefile。

6) HRegion是HBase中分布式存储和负载均衡的最小单元。最小单元就表示不同的HRegion可以分布在不同的HRegionServer上。

7)HRegion由一个或者多个Store组成,每个store保存一个columns family。

8)每个Strore又由一个memStore和0至多个StoreFile组成。

四、HBase写操作流程

1、Client发送请求从Zookeeper中获取HMaster的地址及meta表所在的RegionServer地址,向HRegionServer发出写数据请求。

2、数据被写入HRegion的MemStore,同时写入到HLog中。

3、MemStore中的数据被Flush成一个StoreFile

4、当MemStore达到阈值后把数据刷成一个storefile文件,当多个StoreFile文件达到一定的大小后,会触发Compact合并操作,当compact后,逐渐形成越来越大的storefile。

5、StoreFile大小超过一定阈值后,触发Split操作,把当前HRegion Split成2个新的HRegion,父HRegion会下线,新Split出的2个子HRegion会被HMaster分配到相应的HRegionServer上,使得原先1个HRegion的压力得以分流到2个HRegion上。

6、若MemStore中的数据有丢失,则可以从HLog上恢复。

五、HBase读操作流程

1、client首先从zookeeper找到meta表的region的位置,然后读取meta表中的数据。而meta中又存储了用户表的region信息。

2、根据namespace、表名和rowkey根据meta表中的数据找到写入数据对于的region信息

3、找到对应的RegionServer,查找对应的Region,先从Memstore中找数据,如果没有再从StoreFile中读取数据。

六、HBase minor小合并和major大合并

当客户端向HBase中写入数据时,首先写入HLog和Memstore中,在一个Store中,当Memstore内存占满后,数据会写入磁盘形成一个新的数据存储文件(StoreFile),随着 memstore 的刷写会生成很多StoreFile,当一个store中的storefile达到一定的阈值后,就会进行一次合并,将对同一个key的修改合并到一起,形成一个大的storefile,当storefile的大小达到一定阈值后,又会对storefile进行split,划分为两个storefile。

由于对表的更新是不断追加的,合并时,需要访问store中全部的storefile和memstore,将它们按row key进行合并,由于storefile和memstore都是经过排序的,并且storefile带有内存中索引,合并的过程还是比较快的。

因为存储文件不可修改,HBase是无法通过移除某个键/值来简单的删除数据,而是对删除的数据做个删除标记,表明该数据已被删除,检索过程中,删除标记掩盖该数据,客户端读取不到该数据。

随着memstore中数据不断刷写到磁盘中,会产生越来越多的storeFile小文件,HBase内部通过将多个文件合并成一个较大的文件解决这一小文件问题,以上过程涉及两种合并,如下:

minor小合并

minor 合并负责合并Store中的多个storeFile文件,当StoreFile文件数量达到hbase.hstore.compaction.min 值(默认值为3)时,将会合并成一个StoreFile大文件。这种合并主要是将多个小文件重写为数量较少的大文件,减少存储文件数量,因为StoreFile的每个文件都是经过归类的,所以合并速度很快,主要受磁盘IO性能影响。

major大合并

将一个region中的一个列簇(对应一个Store)的若干个经过minor合并后的大的StoreFile重写为一个新的StoreFile。而且major合并能扫描所有的键/值对,顺序重写全部数据,重写过程中会略过做了删除标记的数据。

七、HBase目标表meta表

目录表 hbase:meta 作为HBase表存在,并从 hbase shell 的 list(类似 show tables)命令中过滤掉,但实际上是一个表,就像任何其他表一样。

hbase:meta 表(以前称为.META.),保有系统中所有 region 的列表。hbase:meta位置信息存储在 zookeeper 中,hbase:meta 表示所有查询的入口。

表结构如下:

key:region的key,结构为:[table],[region start key,end key],[region id]
values:info:regioninfo(当前region序列化的HRegionInfo实例)info:server(包含当前region的RegionServer的server:port)info:serverstartcode(包含当前region的RegionServer进程的开始时间)

当表正在拆分时,将创建另外两列,称为 info:splitA 和 info:splitB,这些列代表两个子 region, 这些列的值也是序列化的 HRegionInfo 实例。区域分割后,将删除此行。

a,,endkeya,startkey,endkeya,startkey,

空键用于表示表开始和表结束。具有空开始键的 region 是表中的第一个 region。如果某个 region 同时具有空开始和空结束键,则它是表中唯一的 region。

八、HBase特点

  1. 强的一致性读/写HBase,不是“最终一致”的 数据库(DataStore)。它非常适合高速计数器聚合等任务。

  2. 自动分片:HBase 表通过 region 分布在群集上,并且随着数据的增长,region 会自动分割和重新分配。自动的 RegionServer 故障转移。

  3. Hadoop/HDFS 集成:HBase 支持 HDFS 作为其分布式文件系统。

  4. MapReduce:HBase 支持通过 MapReduce 进行大规模并行处理,将 HBase 当做数据来源和保存数据存储的数据库。

  5. Java 客户端 API:HBase 支持易于使用的 Java API 以进行编程访问。

  6. Thrift/REST API:HBase 还支持非 Java 前端的 Thrift 和 REST。

  7. 块缓存和布隆过滤器:HBase 支持块缓存和布隆过滤器,以实现大容量查询优化。

  8. 运维管理:HBase 提供内置网页,用于运维监控和 JMX 指标。

  9. HBase 不支持行间事务。

九、HBase的使用场景

HBase适用于需要处理海量数据、需要高可靠性和高性能的场景。例如:

  • 对象存储:如新闻、网页、图片等数据的存储。

  • 用户画像:特别是用户的画像,是一个比较大的稀疏矩阵。

  • 消息/订单存储:在电信领域、银行领域,不少的订单查询底层的存储以及通信、消息同步的应用都可以构建在HBase之上。

总的来说,HBase是一个高性能、高可靠性、可扩展的分布式数据库,适用于处理海量非结构化或结构化数据,并能够满足近实时的读写管理需求。


  • 📢博客主页:https://lansonli.blog.csdn.net

  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉

  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

相关文章:

HBase分布式数据库入门到精通

文章目录 HBase分布式数据库入门到精通 一、简单介绍 二、HBase数据模型 三、HBase的架构 四、HBase写操作流程 五、HBase读操作流程 六、HBase minor小合并和major大合并 七、HBase目标表meta表 八、HBase特点 九、HBase的使用场景 HBase分布式数据库入门到精通 一、…...

Java程序员必备技能之MySQL数据库 图解整理/快速入门

恭喜大家来到全新的篇章——MySQL数据库,这一篇我们将学会MySQL数据库的原理、使用sql对数据库的增删改查操作、以及对MySQL数据库的权限管理和用户管理等内容。请大家耐心看下去,相信大家在看完这篇文章后,一定可以学会MySQL数据库(不会Java也可以学会!)。 ps:想要补充…...

效果炸裂!使用 GPT-4o 快速实现LLM OS

使用 GPT-4o 快速实现LLM OS 什么是 LLM OS?LLM OS 主要有以下5个部分组成: LLM OS 开源实现运行 LLM OS 开源实现 什么是 LLM OS? 关于 LLM OS 的最初构想源自karpathy 在2023年11月11日发布的一条Twitter 动态,这是 LLM OS 概念…...

杀死那个进程

一、场景 eclipse在启动tomcat时,出现端口被占用的情况。我寻思着“任务管理器”没出现相应程序在跑啊。 1.1问题:端口和进程的关系 端口和进程之间存在着一种关系,端口是一个逻辑概念,它用于标识网络通信中的一个终点&#xff0…...

【vue与iframe通讯】

vue 与 iframe 通讯 发送数据vue 向 iframe 发送数据iframe 向 vue 发送数据接收信息( vue & iframe 通用) 实现相互通讯通讯流程图实现代码vue 页面iframe页面iframe 内部重定向访问地址,更新 vue 路由 访问跨域代码下载 前言:vue嵌套iframe实现步骤 发送数据…...

【Python-openslide】openslide.open_slide()

作用: 打开图片 wsi openslide.open_slide(path)注: path: 图片所在路径,需要具体到图片名称(包含扩展名) 我的实验中采用的是svs格式的图像...

推荐系统学习笔记(三)

swing召回通道 Q:假如重合的用户是一个小圈子:在一个群里,毫无关联的笔记也会被同时交互 solve:降低小圈子权重--------------swing的主要目的------------给用户加权 相似度: a是人工参数,overlap降低小…...

521源码-免费游戏源码下载-闯梦江湖Q萌复古全网通手游服务端H5全攻略

闯梦江湖H5:Q萌复古全网通手游服务端全攻略 一、概述 闯梦江湖H5 是一款结合Q萌画风与复古情怀的全网通H5手游。我们为您提供了最新打包的Windows服务端,并附带了通用视频架设教程和GM网页授权后台工具,让您轻松搭建并管理自己的游戏世界。 …...

【Zotero】【MacOS】Zotero6常用插件总结

因为目前MacOS只支持Zotero6,所以我将网上找到的教程以及自己找到适应Zotero6版本的插件做了个整合 教程地址:Zotero6安装/插件安装教程 插件地址:Zotero6_Plugs...

具有固定宽度的盒子:\makebox, \parbox

makebox \makebox 是 LaTeX 中的一个命令&#xff0c;用于创建一个具有固定宽度的盒子&#xff0c;并在该盒子内放置内容。这个命令可以用于控制文本或对象的位置和对齐。 语法如下&#xff1a; \makebox[<width>][<alignment>]{<content>}其中&#xff1…...

中央网信办等四部门发布《互联网政务应用安全管理规定》

互联网政务应用安全管理规定 &#xff08;2024年2月19日中央网络安全和信息化委员会办公室、中央机构编制委员会办公室、工业和信息化部、公安部制定 2024年5月15日发布&#xff09; 第一章 总则 第一条 为保障互联网政务应用安全&#xff0c;根据《中华人民共和国网络安全法…...

国产性能怪兽——香橙派AI Pro(8T)上手体验报告以及性能评测

目录 1、引言2、性能参数3、开箱体验4、实际使用5、性能比较总结参考文章 1、引言 第一次接触香橙派的开发板&#xff0c;之前使用过Arduino、树莓派3B、树莓派4B&#xff0c;STM32&#xff0c;51单片机&#xff0c;没有想到国产品牌性能一样强劲&#xff0c;使用起来也是很方便…...

适用于 Windows 7/8/10/11 的 6 款最佳免费分区软件

分区软件程序旨在帮助您创建、缩小、删除、扩展、合并或拆分硬盘和其他存储设备的分区。虽然可以在 Windows 中对硬盘进行分区而无需使用其他软件&#xff0c;但您可以执行的活动范围有限。例如&#xff0c;如果没有外部工具&#xff0c;您无法调整分区大小或合并分区。在这篇文…...

蓝桥杯备赛——DP续【python】

一、小明的背包2 试题链接&#xff1a;https://www.lanqiao.cn/problems/1175/learning/ 输入示例 5 20 1 6 2 5 3 8 5 15 3 3 输出示例 120 问题分析 这题是完全背包&#xff0c;每个物品有无数个&#xff0c;所以对于任意dp[i][j]&#xff08;其表示的意思为选到第i个…...

区块链系统开发测试----链码部署开发、系统开发验证

一.检查配置环境 检查虚拟机环境&#xff0c;确保有正在运行的Hyperledger Fabric区块链&#xff0c;并且其中chaincode_basic、credit_chaincode链码可以正常调用 查看chaincode_basic、credit_chaincode链码调用 二.开发征信链码代码 基于现有征信链码&#xff0c;开发征信…...

ResNet 学习

一. 残差块与残差层 简单来说&#xff0c;残差块是构成残差层的基本单元&#xff0c;而残差层则是由多个残差块组成的。在ResNet中&#xff0c;通常会堆叠多个残差层来构建深度模型。 (一).残差块&#xff08;Residual Block&#xff09; 这是ResNet的基本构建单元。一个残差块…...

前端React老项目打包caniuse-lite报错解决思路

1、下载项目&#xff0c;先更新.npmrc文件&#xff1a; registryhttp://registry.npmmirror.com 2、安装依赖&#xff0c;本地启动&#xff0c;运行正常&#xff0c;但直接提交代码线上打包时会报错&#xff1a; “ 未找到相关的合并请求。” 打开日志页面&#xff0c;报错信息…...

【全开源】优校管理系统支持微信小程序+微信公众号+H5

概述 优校管理系统(简称优校管)是基于FastAdmin和ThinkPHP进行开发的中小学信息化管理系统&#xff0c;拥有PC版、UniAPP版(高级授权)。支持微信小程序、H5等多平台&#xff0c;主要用于信息管理、教学管理、素养评价&#xff0c;支持多个学校(标准授权限5个&#xff0c;高级授…...

Python条件分支与循环

大家好&#xff0c;当涉及到编写高效和灵活的程序时&#xff0c;条件分支和循环是 Python 中至关重要的概念。它们允许我们根据不同的条件执行不同的代码块&#xff0c;或者重复执行一组语句。条件分支和循环是测试开发工程师在日常工作中经常使用的工具&#xff0c;无论是编写…...

AI手语研究数据集;视频转视频翻译和风格化功能如黏土动画;AI检测猫咪行为;开放源码的AI驱动搜索引擎Perplexica

✨ 1: Prompt2Sign 多语言手语数据集&#xff0c;便捷高效用于手语研究。 Prompt2Sign 是一个全面的多语言手语数据集&#xff0c;旨在通过工具自动获取和处理网络上的手语视频。该数据集具有高效、轻量的特点&#xff0c;旨在减少先前手语数据集的不足之处。该数据集目前包含…...

四川景源畅信:新人做抖店的成本很高吗?

随着社交媒体的兴起&#xff0c;抖音成为了一个新兴的电商平台——抖店。不少创业者和商家看中了其庞大的用户基础&#xff0c;想要通过开设抖店来拓展销路。然而&#xff0c;对于刚入行的新手来说&#xff0c;成本问题总是让人犹豫不决。究竟新人做抖店的成本高不高?本文将围…...

ChatGPT原创指令大全(持续更新)

随着ChatGPT在互联网上的使用越来越多&#xff0c;但很多人在使用ChatGPT的过程中会觉得得到的答案并不是很精准。究其原因其实是你给它的命令不够准确、不够到位。实际现在网上已经很多关于ChatGPT的网站&#xff0c;可以快速生成带有快捷键的ChatGPT指令。但是对于不熟悉Chat…...

Java实现对PDF、纵向、横向页面添加自定义水印功能

Java实现对PDF、纵向、横向页面添加自定义水印 效果图 -- 纵向 页面PDF使用到JAR Maven依赖版本效果图 -- 横向页面PDF 效果图 – 纵向 页面PDF 代码如下&#xff1a; 使用到JAR Maven依赖版本 <dependency><groupId>org.apache.pdfbox</groupId><artifa…...

设计模式15——享元模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 享元模式&#xff08;Flyweigh…...

多模态中的模态有哪些

“多模态”这个名字中的“模态”&#xff08;modality&#xff09;&#xff0c;指的是不同的数据类型或信息源。在多模态大模型中&#xff0c;常见的模态包括&#xff1a; 文本模态&#xff1a; 包括自然语言文本、语音识别文本等。 图像模态&#xff1a; 指图像数据&#xff…...

Java练习题(八)

36.关于抽象类叙述正确的是&#xff1f; (B ) A.抽象类不能实现接口 B.抽象类必须有“abstract class”修饰 C.抽象类必须包含抽象方法 D.抽象类也有类的特性&#xff0c;可以被实例化 37.以下说法错误的是&#xff08;C&#xff09; A.数组是一个对象 B.数组不是一种原…...

Linux文本文件管理003

★排序、去重、统计★ 1&#xff09;排序 sort -n按照数值排序 -r降序排列 2&#xff09;去重 uniq 过滤相邻、重复的行 -c 对重复行计数 3&#xff09;统计 wc 统计文件中的字节数、单词数、行数 -l 显示行数 今天通过使用grep、awk、cut指令和上面几个选项提取文本文件…...

uniapp Androud 离线打包升级APK,覆盖安装不更新问题

Android 打包时在assets/data/dcloud_control.xml文件中&#xff0c;如果配置debug"true" syncDebug"true"&#xff0c;则consle打印有效&#xff0c;不然没有打印数据 <hbuilder debug"true" syncDebug"true"> <apps> …...

【算法实战】每日一题:设计一个算法,用最少数量的矩形覆盖一系列宽度为d、高度为w的矩形,且使用矩形不能超出边界

题目 设计一个算法&#xff0c;用最少数量的矩形覆盖一系列宽度为d、高度为w的矩形建筑物侧墙&#xff0c;且矩形不能超出边界。 核心思路 考虑这种结构 前面递增后面一个与前面的某个高度一致&#xff0c;这时候考虑最下面的覆盖&#xff08;即都是从最下面向上覆盖&#…...

外贸仓库管理软件:海外仓效率大幅度提升、避免劳动力积压

随着外贸业务的不断发展&#xff0c;如何高效管理外贸仓库&#xff0c;确保货物顺利流转&#xff0c;订单顺利处理&#xff0c;就变得非常重要。 现在通常的解决方案都是通过引入外贸仓库管理软件&#xff0c;也就是我们常说的海外仓WMS系统来解决。 今天我们就系统的探讨一下…...