HBase是一个基于HDFS之上的分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“BigTable大表”,即:把所有的数据存入一张表中。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
HBase是由三种类型的服务器以主从模式构成的。这三种服务器分别是:HBase HMaster,Region server,ZooKeeper。
- HBase HMaster负责Region的分配及数据库的创建和删除等操作。具体来说,HMaster的职责包括:
- HMaster负责region的分配。
- 调控Region server的工作
- 在集群启动的时候分配region,根据恢复服务或者负载均衡的需要重新分配region。
- 监控集群中的Region server的工作状态。
- 管理数据库。提供创建,删除或者更新表格的接口。
- Region server负责数据的读写服务。用户通过沟通Region server来实现对数据的访问。
具体来说,RegionServer上存在若干个Region。HBase中的表是根据row key的值水平分割成所谓的region的。一个region包含表中所有row key位于region的起始键值和结束键值之间的行。每一个region的默认大小为1GB。集群中负责管理Region的结点叫做Region server。Region server负责数据的读写。每一个Region server大约可以管理1000个region。
- ZooKeeper负责维护集群的状态(某台服务器是否在线,服务器之间数据的同步操作及master的选举等)。HBase中ZooKeeper的职责包含:
- 维护HBase服务器是否存活
- 监控HBase服务器是否可访问的状态
- 提供服务器故障/宕机的通知
- 同时还使用一致性算法来保证服务器之间的同步。
- 同时也负责Master选举的工作。
- 需要注意的是要保证良好的一致性及顺利的Master选举,集群中的服务器数目必须是奇数,例如三台或五台。
每一行有一个RowKey用于唯一地标识和定位行,各行数据按RowKey的字典序排列。其中ImployeeBasicInfoCLF和DetailInfoCLF是两个列族,列族下又有多个具体列。(员工基本信息列族:姓名、年龄。详细信息列族:薪水、角色)。
HBase数据模型
- 命名空间:命名空间是对表的逻辑分组,不同的命名空间类似于关系型数据库中的不同的Database数据库。利用命名空间,在多租户场景下可做到更好的资源和数据隔离。
- 表:对应于关系型数据库中的一张张表,HBase以“表”为单位组织数据,表由多行组成。
- 行:由一个RowKey和多个列族组成,一个行有一个RowKey,用来唯一标示。
- 列族:每一行由若干列族组成,每个列族下可包含多个列,如上ImployeeBasicInfoCLF和DetailInfoCLF即是两个列族。列族是列共性的一些体现。注意:物理上,同一列族的数据存储在一起的。
- 列限定符:列由列族和列限定符唯一指定,像如上的name、age即是ImployeeBasicInfoCLF列族的列限定符。
- 单元格:单元格由RowKey、列族、列限定符唯一定位,单元格之中存放一个值(Value)和一个版本号。
- 时间戳:单元格内不同版本的值按时间倒序排列,最新的数据排在最前面