HBase--Region拆分策略
Region为什么要拆分?随着数据的增加,一个Region管理的数据条数越来越多,出现传统SQL数据库的单节点并发问题,将region拆分,将region移动均衡到其他的节点!1.默认的拆分策略(大小)当region的大小达到一定大小的时候会被拆分IncreasingToUpperBoundRegionSplitPolicysplit策略实现类<property><name>
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的拆分
更多推荐
所有评论(0)