前言
经过前面的学习了解,我们可以明确HBase是为了适应大容量数据交互和多类型数据存储而产生的列式存储数据库,数据类型为key-value,所有的数据属性都表现在列族上,可以说列族是HBase表中的最关键数据模型。
一般在完全分布式集群中,集群中的slave服务器一般为HBase存储数据的RegionServer,每一个RegionServer可以有多个Region,Region中存储多行的数据,(master与RegionServer间的管理调用通过ZooKeeper集群管理器进行)数据最终存储在HDFS中。
在HBase中,基本的数据模型是表table,行键rowkey,列族column family,列column qualifier,单元格cell,时间戳timestamp,版本号version(一般不特别说明的话,version为数据存储的时间,如果特别指定version,则为当前数据的版本号。在HDFS中单元格的数据是按照version排序的,而version是以字典顺序为依据进行排序,也即version11在version1和version2间;行键同理,row11在row1和row2之间)
存储数据机制
此处参考《HBase不睡觉书》,按照数据存储的过程来讲解HBase存储数据的架构机制。
1. 宏观架构
如上图所示,HBase中的最重要的就是Master和RegionServer,其中一半Master为1-2个(2个一般是使用HA模式,一个作为候补机),多个RegionServer,一般一个slave为一个RegionServer,一个RegionServer上一般有多个Region,Region中存储一行行的数据,而数据最终存储在HDFS中。
HBase中有自带的ZooKeeper,目的在于管理master和regionserver间的任务调度,当需要进行表操作时,master在zookeeper中注册生成一个session,zookeeper检查regionserver中健康的空闲的选择master表操作的对象,同时监控表操作的整个过程。当任务结束或者任务宕机生成的session会自动被删除,进行下一步操作(zookeeper等待下一次注册/重新选择健康的regionserver并重复原过程)。
在客户端和服务端的交互中,客户端发出数据操作请求,请求发送