Region为什么要拆分?随着数据的增加,一个Region管理的数据条数越来越多,出现传统SQL数据库的单节点并发问题,将region拆分,将region移动均衡到其他的节点!

1.默认的拆分策略(大小)

当region的大小达到一定大小的时候会被拆分

IncreasingToUpperBoundRegionSplitPolicy

split策略实现类

<property>
<name>hbase.regionserver.region.split.policy</name>
<value>
org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy
</value>
</property>

当hbase表在regionserver上的region,如果region的大小到达一个阈值,这个region将会分为两个。
计算公式为:
Min{
1^3*2*128M    256M
2^3*2*128M    2G
3^3*2*128M    6.75G
 10G          10G
(表在一个regionserver上region的数量的立方) *2(the region memstore flush size),
hbase.hregion.max.filesize(默认是10GB)
}
如果默认值情况下,一个表在一个regionserver上split的阈值是:
256MB(第一次split),2GB(第二次),6.75GB(第三次),10GB(第四次),10GB... 10GB

<property>
<name>hbase.hregion.max.filesize</name>
<value>10737418240</value>
</property>
<property>
<name>hbase.regionserver.regionSplitLimit</name>
<value>1000</value>
</property>

 2.keyPrefixRegionSplitPolicy(自定义)

这种拆分是在原来的拆分基础上 ,增加了拆分点(splitPoint,拆分点就是Region被拆分时候的rowkey)的定义,保证有相同前缀的rowkey不会被拆分到不同的Region上

参数是 keyPrefixRegionSplitPolicy.prefix_length  rowkey:前缀长度

 3.DelimitedKeyPrefixRegionSplitPolicy

和上一种查分策略一致 , 上一种是按照key的固定长度拆分的 , 这种按照的是分割符

DelimitedKeyPrefixRegionSplitPolicy.delimiter参分割符

4.region预拆分

row设计的一个关键点是查询维度

(在建表的时候根据具体的查询业务  设计rowkey     预拆分)

在默认的拆分策略中 ,region的大小达到一定的阈值以后才会进行拆分,并且拆分的region在同一个regionserver中 ,只有达到负载均衡的时机时才会进行region重分配!并且开始如果有大量的数据进行插入操作,那么并发就会集中在单个RS中, 形成热点问题,所以如果有并发插入的时候尽量避免热点问题 ,应当预划分 Region的rowkeyRange范围 ,在建表的时候就指定预range范围 .

5.手动强制拆分

没有预期到的查询热点数据  需要手动的拆分

如果随着数据在执行的过程中出现部分region的热点问题, 那么这个region的数据必然会很大,这个时候需要我们手动的强制拆分region .

建议   

1  预拆分初始化的数据

2  后续采取自动拆让Hbase来管理region的拆分

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐