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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML静态网页成品作业(HTML+CSS)—— 冶金工程专业展望与介绍介绍网页(2个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有2个页面。 二、作品演示 三、代…

【Python】如何使用 Python 自动发送每日电子邮件报告

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

安全风险 - 检测设备是否为模拟器

在很多安全机构的检测中,关于模拟器的运行环境一般也会做监听处理,有的可能允许执行但是会提示用户,有的可能直接禁止在模拟器上运行我方APP 如何判断当前 app 是运行在Android真机,还是运行在模拟器? 可能做 Framework 的朋友思…

输入输出安全防护指南

输入输出安全防护指南 在现代网络应用程序中,输入输出的安全性是至关重要的。未经验证的输入和未编码的输出可能导致严重的安全漏洞,如SQL注入、跨站脚本攻击(XSS)等。本文将详细讨论如何通过输入验证和输出编码来确保应用程序的…

数模混合芯片之可靠性设计

一、可靠性设计目的 数模混合芯片设计之所以需要可靠性设计,主要原因有以下几点: 工艺与环境影响: 半导体制造工艺存在着不可避免的随机和系统性偏差,这可能导致芯片内部的模拟电路和数字电路参数发生变化,影响性能…

出吉林大学计算机考研资料适用于计专966/计学941/软专967

本人是24上岸吉大计算机专硕的考生,先上成绩: 出专业课备考过程的相关笔记资料,也可以提供经验分享等: 吉林大学计算机数据结构基础算法ADL汇总,适用于计专966/计学941/软专967综合整理小绿书以及期末题上重难点算法…

MYSQL四大操作——查!查!查!

目录 简洁版: 详解版: SQL通用语法: 分类: 1. DDL —库 1.1 查询: 1.2 创建: 1.3 删除 1.4 使用库 2. DDL—表 2.1 查询 2.1.1 查询当前库的所有表: 2.1.2 查询表结构 : 2.1.…

Resilience4j结合微服务出现的异常

Resilience4j结合微服务出现的异常 1、retry未生效 由于支持aop&#xff0c;所以要引入aop的依赖。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>2、circ…

K8s(Kubernetes)常用命令

大家好&#xff0c;当谈及容器编排工具时&#xff0c;Kubernetes&#xff08;常简称为K8s&#xff09;无疑是当今最受欢迎和广泛使用的解决方案之一。作为一个开源的容器编排平台&#xff0c;Kubernetes 提供了丰富的功能&#xff0c;可以帮助开发人员和运维团队管理、部署和扩…

CS61C | lecture2

# CS61C | lecture2 C 语言是一种编译语言。C 编译器将 C 程序映射到特定与体系结构的机器代码(实际上是一串 0 和 1)。 而 Java 会通过 JVM(Java 虚拟机) 将代码转换为独立于架构的字节码。 Python 则会直接解释代码。C 不会直接解释代码&#xff0c;而是将其编译成机器代码之…

使用servlet与jdbc进行的小demo

文章目录 demo实例首先三层架构servlet层 也可以叫web层service层 ,用于处理业务逻辑 dao层 用于写sql语句,与数据库进行交互这三层一次调用 进行环境初始化utils的书写jdbcUtils先写web层,需要进行参数校验service书写dao层使用jdbc进行操作就可以 demo实例 使用三层架构进行查…

计算机毕业设计hadoop+spark知识图谱课程推荐系统 课程预测系统 课程大数据 课程数据分析 课程大屏 mooc慕课推荐系统 大数据毕业设计

本科毕业设计&#xff08;论文&#xff09; 题目&#xff1a;基于 Hadoop和Spark的课程推荐系统的设计与实现 烟台南山学院教务处 二〇二四年六月 院 系&#xff1a;科技与数据学院数据科学与软件工程系 专 业&#xff1a;数据科学与大数据技术 班 级&#xff1a;数…

算法(十一)贪婪算法

文章目录 算法简介算法概念算法举例 经典问题 -背包问题 算法简介 算法概念 贪婪算法&#xff08;Greedy&#xff09;是一种在每一步都采取当前状态下最好的或者最优的选择&#xff0c;从而希望导致结果也是全局最好或者最优的算法。贪婪算法是当下局部的最优判断&#xff0c…

【spring】Spring Boot3.3.0发布啦

spring最新版本 springboot官网&#xff1a;Spring Boot :: Spring Boot Spring Boot 3.3 发行说明&#xff1a;https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.3-Release-Notes 开发环境的要求对比表 Spring BootJDKSpringMavenGradle3.3.017 ~ 226.1…

WalleWeb简化你的DevOps部署流程

walle-web&#xff1a;简化部署流程&#xff0c;提升开发效率&#xff0c;Walle Web让DevOps触手可及 - 精选真开源&#xff0c;释放新价值。 概览 Walle Web是一个功能强大且免费开源的DevOps平台&#xff0c;旨在简化和自动化代码部署流程。它支持多种编程语言&#xff0c;包…

Qt-qrencode生成二维码

Qt-qrencode开发-生成二维码&#x1f4c0; 文章目录 Qt-qrencode开发-生成二维码&#x1f4c0;[toc]1、概述&#x1f4f8;2、实现效果&#x1f4bd;3、编译qrencode&#x1f50d;4、在QT中引入编译为静态库的QRencode5、在Qt中直接使用QRencode源码6、在Qt中使用QRencode生成二…

004 仿muduo实现高性能服务器组件_Buffer模块与Socket模块的实现

​&#x1f308;个人主页&#xff1a;Fan_558 &#x1f525; 系列专栏&#xff1a;仿muduo &#x1f339;关注我&#x1f4aa;&#x1f3fb;带你学更多知识 文章目录 前言Buffer模块Socket模块 小结 前言 这章将会向你介绍仿muduo高性能服务器组件的buffer模块与socket模块的实…

每日一题——Python实现PAT甲级1041 Be Unique(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 代码点评 时间复杂度分析 空间复杂度分析 总结 我要更强 方法1&#x…

写大型C工程makefile构建~

正文 最开始学习linux应用开发编写的时候&#xff0c;估计大部分伙伴们都是在一个目录里面编译整个工程&#xff0c;主要是linux通常没有非常合适的集成开发环境。 以前单目录的方式实在太过捡漏&#xff0c;在linux环境中进行C代码工程开发很多时候需要编写一个相对比较通用的…

业务实战————Uibot6.0 .1多页面商品信息抓取RPA机器人

前言 【案例描述】 鲜果记水果店计划在淘宝电商平台上开设一家新店&#xff0c;小微是该企业运营部分的运营专员&#xff0c;主要负责公司商品上架和管理的工作。 公司计划在开店的新品促销活动中增加水果品类红富士苹果。小微需在商品上架前了解目前平台中销量前列的红富士苹…