lwb 2020-02-17
region中存储的是大量的rowkey数据 ,当region中的数据条数过多的时候,直接影响查询效率.当region过大的时候.hbase会拆分region , 这也是Hbase的一个优点 .
HBase的region split策略一共有以下几种:
1、ConstantSizeRegionSplitPolicy
当region大小大于某个阈值(hbase.hregion.max.filesize=10G)之后就会触发切分,一个region等分为2个region。
2、IncreasingToUpperBoundRegionSplitPolicy
0.94版本~2.0版本默认切分策略
切分策略稍微有点复杂,总体看和ConstantSizeRegionSplitPolicy思路相同,一个region大小大于设置阈值就会触发切分。但是这个阈值并不像ConstantSizeRegionSplitPolicy是一个固定的值,而是会在一定条件下不断调整,调整规则和region所属表在当前regionserver上的region个数有关系.
3、SteppingSplitPolicy
2.0版本默认切分策略
4、KeyPrefixRegionSplitPolicy
5、DelimitedKeyPrefixRegionSplitPolicy
执行合并前,==需要先关闭hbase集群==
create ‘test‘,‘info1‘,SPLITS => [‘1000‘,‘2000‘,‘3000‘]
需求:
需要把test表中的2个region数据进行合并:
test,,1565940912661.62d28d7d20f18debd2e7dac093bc09d8.
test,1000,1565940912661.5b6f9e8dad3880bcc825826d12e81436.
这里通过org.apache.hadoop.hbase.util.Merge类来实现,不需要进入hbase shell,直接执行(==需要先关闭hbase集群==):
hbase org.apache.hadoop.hbase.util.Merge test test,,1565940912661.62d28d7d20f18debd2e7dac093bc09d8. test,1000,1565940912661.5b6f9e8dad3880bcc825826d12e81436.
==不需要关闭hbase集群==,在线进行合并
与冷合并不同的是,online_merge的传参是Region的hash值,而Region的hash值就是Region名称的最后那段在两个.之间的字符串部分。
需求:需要把test表中的2个region数据进行合并:
test,2000,1565940912661.c2212a3956b814a6f0d57a90983a8515.
test,3000,1565940912661.553dd4db667814cf2f050561167ca030.
需要进入hbase shell:
merge_region ‘c2212a3956b814a6f0d57a90983a8515‘,‘553dd4db667814cf2f050561167ca030‘
成功后观察界面
merge_region ‘c2212a3956b814a6f0d57a90983a8515‘,‘553dd4db667814cf2f050561167ca030‘