HBase系统架构&数据结构介绍
一、HBase基本概念
HBase-webTable
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.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
- 存储所有Region的寻址入口
- 实时监控Region Server的状态。
- 存储HBase的Schema,包括有哪些Table,每个Table有哪些Column Family等信息。
3.2 Master
1.为Region Server分配Region
2.负责Region Server的负载均衡
- 发现失效的Region Server并重新分配Region
- GFS上的垃圾文件回收
- 处理Schema的更新请求
3.3Region Server
![](https://img.haomeiwen.com/i12379345/1f0bd1e72d9d84d2.png)
1.Region Server负责维护Master分配给它的Region,并处理发送到Region上的IO请求
- 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上获取数据