数据多版本,结构稀疏
数据类型都是String
列检索
只能增删改查 (但可以HIVE ON HBASE)
RowKey实际存储字节数组
四个关键词 RowKey|Column Family |Cell|TimeStamp
数据压缩
列式存储,意味着该列数据往往类型相同,可以采用某种压缩算法进行统一压缩存储。
HBase监控
- 可通过JMX监控HBase各指标
列簇为什么建议1-3个
// 官方
一个典型的模式每个表有1到3个列族。不应该设计HBase表来模拟RDBMS表。以及HBase目前不做任何两个或三个以上列家庭所以保持低的数量列的家庭模式。
// 个人理解 列簇主要是区分: 不同性质的数据的 而不是让我们当做关系型数据库的列来用的
列簇中的列 才相当于我们关系数据库中的列
HBaseRowKey的设计原则
Hbase的Rowkey设计原则
1.Rowkey是一个二进制码流,建议是越短越好,不要超过16个字节。
2.保证其唯一性
3.按照实际的查询条件进行设计
4.Rowkey要和时间顺序相关,也就是排序原则
5.散列原则,均匀的分布在各个HBase节点。防止Region热点问题
RowKey行键
与 NoSQL 数据库一样,Row Key 是用来检索记录的主键 。访问HBase中的行,只有三种方式:
- 通过单个RowKey访问
- 通过Rowkey的range(正则)
- 全表扫描
HBase架构
ZK : 接受各组件心跳。
HMaster : 为RegionServer分配Region,维护beta信息。
HRegionServer : 干活。
Region : HBase表根据Row Key 划分成“Regions”
切割 n^2 * 128M 最大10GB
store : 每个region中有一个或者多个 ,有几个ColumnFamily,也就有几个Store。
HBase读数据流程
1 Client先访问zookeeper,从meta表读取region的位置,然后读取meta表中的数据。meta中又存储了用户表的region信息。
2 根据namespace、表名和rowkey在meta表中找到对应的region信息
3 找到这个region对应的regionserver
4 查找对应的region
5 先从MemStore找数据,如果没有,再到StoreFile上读(为了读取的效率)
HBase写数据流程
1 Client首先访问zookeeper,从meta表获取相应region信息,然后找到meta表的数据
2 根据namespace、表名和rowkey根据meta表的数据找到写入数据对应的region信息
3 找到对应的regionserver4 把数据分别写到HLog和MemStore上一份
4 MemStore达到一个阈值后则把数据刷成一个StoreFile文件。(若MemStore中的数据有丢失,则可以从HLog上恢复)
5 当多个StoreFile文件达到一定的大小后,会触发Compact合并操作,合并为一个StoreFile,(这里同时进行版本的合并和数据删除。)6 当Storefile大小超过一定阈值后,会把当前的Region分割为两个(Split),并由HMaster分配到相应的HRegionServer,实现负载均衡