一、HBase基本概念

HBase系统架构&数据结构介绍 - 图1

1.RowKey(行键)

Row Key是用来检索记录的主键。访问HBase当中的数据只有三种方式: 1.通过指定的RowKey进行访问。2.通过Row Key的range进行访问。访问指定范围内的行。3.全表扫描
Row Key可以是任意字符串,存储按照Row Key的字典进行排序。字典对Int类型的Row Key的排序为1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91,92,93,94,95,96,97,98,99
行的一次读写操作时原子性的

2.Column Family(列族)

HBase表中的每个列,都属于某个列族。列族是表schema的一部分,所以列族需要在创建表时进行定义。列族的所有列都以列族名作为前缀,例如:courses:history,courses:math都属于courses这个列族,它们的列限定分别是history和math。需要注意的是列限定符不是表Schema的一部分,可以在插入数据的时候动态创建列。

3.Column(列)

HBase中的列由列族和限定符组成,它们由:分割。一个完整的列名表示为:列族:列限定符

4.Cell

Cell是行,其中包含值和时间戳,HBase中一个单元格是由多个版本的数据组成的,用每个时间戳来进行区分。

5. TimeStamp

HBase中通过row key和cloud 确定的为一个存储单元称之为cell。每个cell都保存着同一份数据的多个版本。版本索引通过时间戳来区分。

二、存储结构

HBase系统架构&数据结构介绍 - 图2

2.1 Regions

HBase Table中所有行按照 Row Key的字典序排列。HBase Tables通过行键的范围被水平切分成多个Region。一个Region包含了在start key 和end key之间的所有行。
裂变每张表刚开始的时候只有一个Region。随着数据增加,达到了阈值,那么就会一分为2.变成2个新的Region。随着数据量增加,Region的数量也变的越来越多。
Region 是HBase中分布式存储负载均衡的最小单元,意味着不同的Region是可以被分布在不同的节点上的

2.2 Region Server

Region Server运行在HDFS的DataNode上,它具有以下组件。
WAL :用于存储未进行持久化的数据记录,在故障时进行恢复。
BlockCache: 读缓存。将频繁读取的数据写入内存,如果内存空间不足,则淘汰掉最近少使用的数据
HFile: 将行数据按照Key/Values的形式存储在文件系统中。

三、HBase系统架构

3.1 系统架构

HBase遵循Master/Salve架构,由三种不同的类型组件组成

3.1.1zookeeper

1.保证任何时候,集群中只有一个Master

  1. 存储所有Region的寻址入口
  2. 实时监控Region Server的状态。
  3. 存储HBase的Schema,包括有哪些Table,每个Table有哪些Column Family等信息。

3.2 Master

1.为Region Server分配Region
2.负责Region Server的负载均衡

  1. 发现失效的Region Server并重新分配Region
  2. GFS上的垃圾文件回收
  3. 处理Schema的更新请求

3.3Region Server

HBase系统架构&数据结构介绍 - 图3

1.Region Server负责维护Master分配给它的Region,并处理发送到Region上的IO请求

  1. Region Server负责切分在运行过程中的变得更大的Region

3.4组件之间的协作

HBase使用Zookeeper作为分布式协调服务来维持集群中的服务器状态。Zookeeper负责维护可用服务裂表,并提供服务故障沟通服务:
每个Region Server都会在 zookeeper上面创建一个临时节点。Master通过Zookeeper的Watcher机制对节点进行监控,从而可以发现新加入的RegionServer或故障退出的RegionServer。
所有Masters会竞争性的在Zookeeper上创建同一个临时节点,由于Zookeeper只能有一个同名节点,所以必然只有一个Master能够创建成功,此时该Master就是主Master,主Master会定期向Zookeeper发送心跳,备用Master则通过Watch机制对HMaster所在节点监听

HBase写入数据流程

Client向RegionServer提交写请求。
RegionServer 找到目标Region
Region检查数据是否与Schema一致
如果客户端没有指定版本,则获取当前系统时间作为版本
将更新写入WAL LOG
将更新写入Memstore
判断Memstore存储是否已满,如果存储已满则需要flush为Store Hfile文件

HBase读取数据的流程

客户端从Zookeeper获取META表所在的RegionServer
客户端访问META表所在的RegionServer,从META表中查询访问行键所在的Region Server,之后客户端缓存将这些信息以及META表的位置
客户端从行键所在的Region Server上获取数据