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,,endkey

a,startkey,endkey

a,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博客🙉

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows hook介绍与代码演示

Windows Hook 是一种机制,允许应用程序监视系统或处理特定事件。它可以拦截和更改消息,甚至可以插入到其他应用程序的消息处理机制中。Windows 提供了多种挂钩类型,例如键盘挂钩、鼠标挂钩、消息挂钩等。 hook代码实现 下面是一个使用 Wind…

总结 HTTP 协议的基本格式

一、HTTP 是什么 HTTP ( 全称为 " 超文本传输协议 ") 是一种应用非常广泛的 应用层协议 . HTTP 诞生与 1991 年 . 目前已经发展为最主流使用的一种应用层协议 . HTTP 协议目前有三个大版本: HTTP / 1 和 HTTP / 2 都是基于TCP 传输控制协议传输数据。最新版本的…

python PyQt5 数字时钟程序

效果图: 概述 本文档将指导您如何使用Python的PyQt5库创建一个简单的时钟程序。该程序将显示当前时间,并具有以下特性: 始终在最前台显示。窗口可拖动。鼠标右键点击窗口可弹出退出菜单。时间标签具有红色渐变效果。窗口初始化时出现在屏幕…

央视网视频下载和花屏问题处理

央视网(www.cctv.com)视频下载往往是花屏的,如何处理呢? 如果您是IT技术开发者,那么您可以通过下面步骤自己实现。 用chrome浏览器,F2打开开发者工具,找到当前页面的network 然后找一个接口:https://vdn.a…

php TP8 阿里云短信服务SDKV 2.0(跳大坑)

安装:composer require alibabacloud/dysmsapi-20170525 2.0.24 官方文档:短信服务_SDK中心-阿里云OpenAPI开发者门户 (aliyun.com) 特别注意:传入参数获得值形式 这样也不行 $sendSmsRequest new SendSmsRequest($addData); 还有一个大坑…

工作纪实50-Idea下载项目乱码

下载了公司的一份项目代码,发现是gbk格式的,但是我的日常习惯又是utf-8,下载项目以后全是乱码,一脸懵 借用网友的一张图,如果是一个一个文件这么搞,真的是费劲,好几百个文件! 步骤…

redis 主从复制薪火相传 哨兵sentinel配置以及底层原理

薪火相传 我们知道redis的主从复制还有一个常见的架构 ---薪火相传 使用这种结构可以有效减轻master节点的复制数据同步压力 注意这里的6380节点仍然是slave节点 可以理解为一个中间节点,仍然是不可以写只可以读取的 我们只需要使用 slaveof ip port 这里可能访问节点的时候出…

【Real】[Flask]SSTI

文章目录 前言一、题目解读二、解题过程三、知识点Flask是什么SSTI是什么SSTI是如何形成的易于利用的类payload是什么 探索类型和类层次结构和方法 前言 温馨提示:看到哪里不懂直接跳到知识点部分,理解完再回到解题过程。 一、题目解读 题目是[Flask]S…

Android 项目Gradle文件讲解(Groovy和Kotlin)

Android 项目Gradle文件讲解(Groovy和Kotlin) 前言正文一、Gradle的作用二、Gradle的种类① 工程build.gradle② 项目build.gradle③ settings.gradle④ gradle.properties⑤ gradle-wrapper.properties⑥ local.properties 三、Groovy和Kotlin的语言对比…

专业的Java工程管理软件源码:详尽的项目模块及其功能点清单

在工程项目管理软件领域,我们致力于提供全过程、全方位的综合管理解决方案。该软件覆盖了建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营的各个环节,确保项目管理的全面性和高效性。 工程项目管理软件包含…

一个 Python 的轻量级搜索工具 -- Whose

本文将简单介绍 Python 中的一个轻量级搜索工具 Whoosh,并给出相应的使用示例代码。 # Whoosh 简介 Whoosh 由 Matt Chaput 创建,它一开始是一个为 Houdini 3D 动画软件包的在线文档提供简单、快速的搜索服务工具,之后便慢慢成为一个成熟的…

NiuCloud-Admin-SAAS:引领前端技术革新与SaaS应用快速开发的未来

一、引言 在数字化快速发展的今天,企业对于快速搭建、高效运营的SaaS(Software-as-a-Service)系统的需求日益增长。为满足这一需求,NiuCloud-Admin-SAAS作为一款快速开发SaaS通用管理系统后台框架,凭借其先进的技术栈…

景源畅信:抖音小店新手小白如何做好运营?

在数字时代的浪潮中,抖音小店成为了众多创业者和商家的新宠。但面对激烈的市场竞争和不断变化的平台规则,新手小白如何才能在抖音小店的海洋里稳健航行,捕捉到属于自己的商机呢?接下来的内容将为你揭晓答案。 一、精准定位,明确目…

Dropzone 4 for Mac:一拖即达,文件处理更高效!

在繁忙的工作中,你是否曾因频繁切换应用程序和文件夹而烦恼?Dropzone 4 for Mac,这款强大的文件拖拽操作工具,将彻底改变你的工作方式! 只需简单地将文件、文本或图片拖放到Dropzone图标上,即可快速执行各种…

【SQL学习进阶】从入门到高级应用(二)

文章目录 简单查询查一个字段查多个字段查所有字段查询时字段可参与数学运算查询时字段可起别名as关键字省略as关键字别名中有空格别名中有中文 🌈你好呀!我是 山顶风景独好 💝欢迎来到我的博客,很高兴能够在这里和您见面&#xf…

[9] CUDA性能测量与错误处理

CUDA性能测量与错误处理 讨论如何通过CUDA事件来测量它的性能如何通过CUDA代码进行调试 1.测量CUDA程序的性能 1.1 CUDA事件 CPU端的计时器可能无法给出正确的内核执行时间CUDA事件等于是在你的CUDA应用运行的特定时刻被记录的时间戳,通过使用CUDA事件API&#…

总结常见漏洞的代码审计方法

前言 这篇文章主要是总结一下在安全工作中常见漏洞的代码审计方法,以及修复方案,希望能对初学代码审计小伙伴们有所帮助,笔芯♥️ 代码审计的思路 通常做代码审计都是检查敏感函数的参数,然后回溯变量,判断变量是否可…

【Linux】权限的理解之权限掩码(umask)

目录 前言 一、利用八进制数值表示文件或目录的权限属性 二、系统默认的权限掩码和权限掩码的作用原理 三、分析权限掩码改变文件或目录的权限属性 前言 权限掩码是由4个数字组合而成的,默认的第一位数字是0;后三位数字分别由八进制位数字组成。权限…

贪心算法[1]

首先用最最最经典的部分背包问题来引入贪心的思想。 由题意可知我们需要挑选出价值最大的物品放入背包&#xff0c;价值即单位价值。 我们需要计算出每一堆金币中单位价值。金币的属性涉及两个特征&#xff0c;重量和价值。 所以我们使用结构体。 上代码。 #include <i…

安全术语 | 软件包purl详解:跨工具、数据库、API和语言之间可靠地识别和定位软件包

软件包URL&#xff08;purl&#xff0c;Package URL&#xff09;是一个URL字符串&#xff0c;用于在编程语言、包管理器、包约定、工具、API和数据库中以最通用和统一的方式识别和定位软件包。purl是对现有方法进行标准化的尝试&#xff0c;以可靠地识别和定位软件包。 有望取代…