HBase-存储原理和优化(第三天)

HBase-存储原理和优化(第三天)

一、存储原理和优化架构图

HBase-存储原理和优化(第三天)

  • 一个HRegionServer会负责管理多个region
  • 一个region包含多个store
  • 一个列族就划分成一个store
  • 一个store里面只有一个memstore,对数据进行缓存,最后将数据进行flush刷到磁盘
  • 一个store里面还有多个storefile,最后数据是以多个HFile数据结构的文件保存在HDFS上,storefile是HFile的抽象对象

二、数据读取流程

HBase-存储原理和优化(第三天)
HRegionServer的内存分为两部分,一是memstore,用来写数据,二是blockcache,用来读数据。

三、数据写入流程

HBase-存储原理和优化(第三天)

四、flush、compact机制

flush机制

  • memstore的大小超过默认的128M时
  • 数据缓存时间超过1小时
  • memstore大小为HRegionServer全局内存大小的默认40%时
    compact机制
    minor compact 小合并
  • 至少满足3个条件的storefile,才会启动小合并minor compact
  1. 合并的storefile最小个数为3
  2. 一次合并最多storefile个数
  3. storefile文件大小小于128M
  4. 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…