HBase-存储原理和优化(第三天)
一、存储原理和优化架构图
- 一个HRegionServer会负责管理多个region
- 一个region包含多个store
- 一个列族就划分成一个store
- 一个store里面只有一个memstore,对数据进行缓存,最后将数据进行flush刷到磁盘
- 一个store里面还有多个storefile,最后数据是以多个HFile数据结构的文件保存在HDFS上,storefile是HFile的抽象对象
二、数据读取流程
HRegionServer的内存分为两部分,一是memstore,用来写数据,二是blockcache,用来读数据。
三、数据写入流程
四、flush、compact机制
flush机制
- memstore的大小超过默认的128M时
- 数据缓存时间超过1小时
- memstore大小为HRegionServer全局内存大小的默认40%时
compact机制
minor compact 小合并
至少满足3个条件的storefile,才会启动小合并minor compact
- 合并的storefile最小个数为3
- 一次合并最多storefile个数
- storefile文件大小小于128M
- storefile文件大于设定值,不进行小合并
major compact 大合并
大合并的过程会对删除标记的数据进行真正的移除操作,超过cell单元格最大maxversion版本记录也会被移除,合并的频率低(一般默认为7天,建议设为0),性能消耗大,采用手动触发。
HBase Shell命令:major_compact tablename
五、region拆分机制
- 等额拆分,一个region等额拆分为两个region
- 采用n3*256M
- flush size*2
- 采用rowkey
- 采用前缀
- 采用分隔符
- 不拆分
六、表预分区
优点
- 增加数据读写效率
- 负载均衡,防止数据倾斜
- 方便集群容灾调度region
- 优化Map数量
采用startRowkey和endRowkey进行表的预分区
手动指定
HBase Shell命令:create 't1,‘info1’,‘info2’,SPLITS=>[‘100’,‘200’]
序号 | startrowkey | endrowkey |
---|---|---|
1 | - | 100 |
2 | 100 | 200 |
3 | 200 | - |
指定文件
vim split.txt
aa
bb
cc
HBase Shell命令:create ‘t1,‘info1’,‘info2’,SPLITS_FILE=>’/data/split.txt’
序号 | startrowkey | endrowkey |
---|---|---|
1 | - | aa |
2 | aa | bb |
3 | bb | cc |
4 | cc | - |
七、region合并
region合并不是为了性能,而是为了维护,减少HRegionServer中region的数量。
冷合并(离线)
HBase Shell命令:Hbase org.apache.hadoop.hbase.util.Merge 表名 region名称1 region名称2 …
热合并(在线)
merge_region region的hash值1,region的hash值2…