0 小序
之前面试前司星环的时候,面试官问到HBase那一块的时候直接把我问懵了。上一次使用HBase还是本科的那个图书推荐系统的项目,已经年代久远了,所以今天我特意整理了下HBase相关的知识点。
1 HBase的数据模型
Hbase是以Hdfs为数据存储,分布式的,可扩展的NoSQL数据库。Hbase的设计理念依据Google的著名的BigTable论文而展开的。BigTable是一个稀疏的、分布式的、持久的、多为排序映射(map)。该映射由行键、列键和时间戳索引构成,映射到一个未解释的字节数组。
HBase使用与BigTable类似的数据模型。用户将行存储在带标签的表中。数据行具有可排序的键和任意数量的列。由于该表存储稀疏,且一个表含有动态的列。
2 NameSpace命名空间的概念
命名空间,类似关系型数据库中database的概念,每个命名空间下含有多张表。HBase有两个自带的命名空间,分别是hbase和default。hbase中存放的是HBase内置的表,default则是存放用户默认使用的命名空间。
3 Table的概念
类似于关系型数据库表的概念。不同的是,HBase定义表时只需要声明列族即可,不需要声明具体的列。因为数据存储是稀疏的,所有往HBase中写入的数据的字段是可以动态增加按需指定的。因此,和关系型数据库相比,HBase能轻松应对字段变更的场景。
4 Row的概念
HBase表中每行数据都由一个RowKey和多个Column组成,数据是按照RowKey的字典序顺序存储的,并且查询数据时只能根据RowKey进行检索,RowKey的设计因此十分重要。
5 Column的概念
HBase中的每个列都由Column Family(列族)和Column Qualifier(列限定符)进行限定。建表时,只需指明列族,而列限定符无需预先定义。
6 TimeStamp时间戳的概念
用于标识数据的不同版本,每条数据写入时,系统会自动为其加上该字段,值为写入HBase的时间。
7 Cell的概念
由{RowKey,Column Family, Column Qualifier, TimeStamp }唯一确定的单元,cell中的数据以字节码形式存储。
8 HBase的一些机制
- HBase把表格的数据存放在Hdfs上,并按照namespace->table->region->store的格式划分文件夹存储。在store下存储HFile,内部为对应的cell。
- Region由多个Region Server随机管理,尽量均衡。
- Master主要进程的具体实现类为HMaster,通常部署在namenode上。用于监控Region Server进程状态,同时也是所有元数据变化的接口。内部启动监控执行Region的故障转移和拆分进程。
- Region Server的具体实现类为HRegionServer,部署于DataNode上。用于负责数据Cell的处理,同时负责执行区域拆分和合并。
- Master中含有以下三个部分:
- LoadBalancer负载均衡器
- CatalogJanitor元数据管理器
- MasterProcWAL master预写日志处理器
- HBase一般通过Zookeeper实现master的高可用,记录RegionServer的部署信息,并存储元数据表的位置信息。
- HDFS为HBase提供最终的底层数据存储服务,同时为HBase提供高容错的支持。