一、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》