【HBase总结】HBase的逻辑结构、物理结构和基本架构

一、HBase定义

HBase 是一种分布式可扩展支持海量数据存储NoSQL 数据库。 

分布式:需要搭建集群

支持海量数据存储:存储的数据量比MySQL大得多,适合大数据的应用场景

NoSQL:非关系型数据库

HBase实际上是Google Big Table的一个实现。Big Table是Google“三驾马车”之一,一个用来存储大规模数据的一个分布式系统

补充

关系型数据库:指采用了关系模型来组织数据的数据库。
关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。

非关系型数据库:指非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统。非关系型数据库以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,不局限于固定的结构,可以减少一些时间和空间的开销。

ACID,是指在数据库管理系统(DBMS)中事务所具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)

二、HBase 逻辑结构

Row

HBase 表中的每行数据都由一个 RowKey 和多个 Column (列)组成,数据是按照 RowKey
字典顺序存储 的,数值大排在后面,数值小排在前面,有数值比没有数值大。查询数据时只能根据 RowKey 进行检索,所以 RowKey 的设计十分重 要。

Column

HBase 中的每个列都由 Column Family(列族) Column Qualifier(列限定符) 进行限定,例如 info:name,info:age。建表时,只需指明列族,而列限定符无需预先定义。HBase的数据存储以列族为单位。

Region

类似于关系型数据库的概念。不同的是,HBase 定义表时只需要声明 列族 即可,不需要声明具体的列。这意味着,往 HBase 写入数据时,字段可以 动态 按需 指定。因此,和关系型数据库相比,HBase 能够轻松应对字段变更的场景。

三、HBase 物理存储结构

Name Space

命名空间,类似于关系型数据库的 DataBase 概念,每个命名空间下有多个表。HBase
有两个自带的命名空间,分别是 hbase default hbase 中存放的是 HBase 内置的表,
default 表是用户默认使用的命名空间。

Time Stamp

用于标识数据的不同版本(version),每条数据写入时,如果不指定时间戳,系统会
自动为其加上该字段,其值为写入 HBase 的时间。 TimeStamp尤为重要 是HBase进行随机写操作的核心。在Windows系统和Linux系统同时操作HBase时,需要保证两个系统的时间是同步的。 如果Window和Linux的TimeStamp不一致,则会出现各种问题,比如插入数据看不到,删除删不掉等等。
同样的,在不同节点上操作HBase时也需要节点之间的时间差异不超过30秒,否则也会出现数据操作问题。随着对HBase的深入学习,我们通过增删改查等操作获得的数据本质上是通过TimeStamp来控制同一个Row Key中的不同版本。

Type

对数据的操作类型,增和改是put,删除是delete,查是get。

Cell

{rowkey, column Family column Qualifier, time Stamp} 唯一确定的单元。 cell 中的数
据是没有类型的,全部是字节码形式存贮。

四、HBase 基本架构

Region Server

Region Server 为 Region 的管理者,其实现类为 HRegionServer ,主要作用如下:
对于数据的操作:get, put, delete;
对于 Region 的操作:splitRegion、compactRegion。

Master

Master 是所有 Region Server 的管理者,其实现类为 HMaster,主要作用如下:
对于表的操作:create, delete, alter
对于 RegionServer的操作:分配 regions到每个RegionServer,监控每个 RegionServer的状态,负载均衡和故障转移。
Master运行在NameNode上,它的作用类似于HDFS中的NameNode,同样是在内存中运行,这注定Master无法发挥真正存储数据的作用,而是起到统领的作用。如果Master出故障了,那么HBase也无法正常使用。

Zookeeper

HBase 通过 Zookeeper 来做 Master 的高可用、 RegionServer 的监控、元数据的入口以及
集群配置的维护等工作。

HDFS

HDFS HBase 提供最终的底层数据存储服务,同时为 HBase 提供高可用的支持

参考:

简书 《简述关系型数据库和非关系型数据库》 意识流

 尚硅谷 《尚硅谷大数据技术之 Hbase》

### HBase 物理视图与概念视图的区别定义 #### 概念视图 在概念层次上,HBase 表被设计成一个稀疏的、分布式的、持久化的多维排序映射表。这个表由行键(row key)、列族(column family)、列限定符(column qualifier)以及时间戳共同构成其索引结构[^2]。每一项储的数据值均为未解析的字节数组形式在。 这种视角下,用户可以将 HBase 的表格想象为传统的关系型数据库中的二维表格,其中每一条记录对应一行,而各个字段则分布在不同的列中;然而不同之处在于,在这里可以通过指定特定的时间戳来获取某一时刻的历史版本数据,并且允许同一行内拥有任意数量的不同属性组合而不必预先设定固定的模式。 #### 物理视图 实际上,为了提高读写效率并优化磁盘空间利用率,HBase 并不是按照上述直观的方式直接保这些信息。相反,它采用了一种基于列族的储机制——即所有的数据都依据所属的列族进行分组放于文件系统之中[^3]。这意味着当应用程序向某个给定的列族添加新列时,只需简单地将其追加至该区域即可实现无缝扩展功能,无需修改原有架构或重新组织已有的资料集。 此外值得注意的是,尽管从外部看来似乎所有操作都在针对整张大表执行,但实际上内部会根据预分区策略把整个表分割成为多个更小范围内的子单元叫做 Region 来管理,每个 region 负责处理一部分连续区间上的 row keys 所对应的那部分数据条目集合。 ```python # Python伪代码展示如何创建带有两个列族的HBase表 from happybase import Connection connection = Connection('localhost') families = { 'cf1': dict(), # 列族 cf1 'cf2': dict() # 列族 cf2 } connection.create_table('mytable', families) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值