14年在烽火做过Hbase的相关项目。
时隔4年,接触的项目都没有用到Hbase。今天,简单回顾一下hbase的基本概念。
既然是随笔,想到什么就写什么。
【1】首先Hbase是列式的分布式存储系统。把需要经常同时访问的数据,定义在一个列族里。
Hbase Table=Rowkey + Family + Column + Timestamp + Value
【2】数据存储原型:
先按照rowkey字典排序,再按照column字典排序
【3】压缩方式:
snappy压缩率低,但是压缩速度和解压速度很快。hbase默认压缩方式。压缩是以CPU资源换取磁盘资源。
【4】hbase元信息表:Meta Table
是Hbase的第一级索引。
存储了Region的信息。rowkey是table+startkey+time 0.96版本以前,是由Root表来维护,之后版本Meta表直接存储在Zookeeper
上,用户查数据时,先要去zookeeper上查Meta表。
【5】LSM树:
1.第一层,写入内存
2.第二层,超过阈值内存到磁盘
3.第三层,异步线程多路归并数据
RegionServer = Region + Store(一个列族对应一个) + MemStore + StoreFile + Hfile + HLog
Hbase中的LSM存储思想:
用户数据会最先写入HLog,防止当机造成数据丢失,实现高可用,第二步才会写入MemStore。(快速写入,第一层)
MemStore达到阈值,flush到磁盘形成storeFile,最终形成HFile(第二层)
Hbase Compaction(第三层)
Minor Compaction(小合并):相邻Hfile小文件
Major Compaction(大合并):一个store中的所有Hfile文件,会删除3类数据,默认7天
(1)keytype是delete的数据,
(2)TTL过期数据
(3)版本过期数据,version
一般线上业务会关闭自动大合并,采取手动大合并,因为大合并,比较消耗性能,会对业务造成影响。
Region是Hbase负载均衡的最小单元,但是存储的最小单元是HFile
Hbase的rowkey设计需要主要尽可能的把数据分散到各个Region块上,避免出现RegionServer热点问题,压力过大。达不到负载均
衡。
【6】HFile墓碑标记:
Hfile的data block是keyValue结构,由于hfile一旦写入,就不会再被修改,所以删除数据的时候,不会立马被删除,而是会有
一个keytype(4种状态,put,delete,deleteColumn,deleteFamily)的字段来标时。
【7】WAL(预写日志):
用来做灾难恢复。通过回放日志来恢复到hbase崩溃之前的状态。
【8】BloomFilter:
多哈希,多位置。
在hbase中的应用:是列族级别,提升hbase的随机读性能。分为row和rowcol。