手动merge region后Region立即再次split



QzpcVXNlcnNcTVNUXEFwcERhdGFcUm9hbWluZ1xEaW5nVGFsa1wzMjExMTcyOTVfdjJcSW1hZ2VGaWxlc1wxNTQyNjI3NTY5MzkzXzAzRjUyNzhDLUZEN0MtNDVmOC04MzVGLTgyRjkxNUY5OTQ2Qy5wbmc.png

如图片所示,我执行了 merge_region '','',true命令,成功合并了两个相邻region,随后合并完成的region又再次split,正常对外服务。
但是并未达到split的条件:
    1.该RS上region数超过50个
    2.hbase.hregion.max.filesize=20G
    3.表结构
       
QzpcVXNlcnNcTVNUXEFwcERhdGFcUm9hbWluZ1xEaW5nVGFsa1wzMjExMTcyOTVfdjJcSW1hZ2VGaWxlc1wxNTQyNjg1MjMyOTQ3X0NBRTI1OEQzLThFNjMtNDI2Yy05MjhDLTkwMzUzMzlCQkYwRi5wbmc.png

我不明白为什么会触发split。。大佬们请赐教

 
已邀请:

sunday - 星期天的亚索

赞同来自: point

很抱歉误导了各位,耽误了大家时间, hbase1.2 的split策略为IncreasingToUpperBoundRegionSplitPolicy,split的阈值是随着所属表在当前RS上的region个数进行计算的,不包括当前RS上其他表的region。
而该表在当前RS上只有两个region,根据计算公式spitSize=(#regions) * (#regions) * (#regions) * flush size * 2
假设flush size =128M
split size =1*1*1*128*2=256M
2*2*2*128*2=2048M
3*3*3*128*2=6912M
4*4*4*128*2=16384M
5*5*5*128*2=32000M 
所以当把2个region merge后size超过了256M,会立刻进行split操作,是合理现象
 

stigahuang

赞同来自:

楼主能否提供下 ​hbase.regionserver.region.split.policy 配的是什么split策略,然后把这个类的DEBUG级别log打开看看。
 
比如说默认是 org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy,就在该region所在的RegionServer网页的 /logLevel 路径下暂时改它的 logLevel 为 DEBUG

Sophie - DBA

赞同来自:

我也遇到类似的问题

WangYQ

赞同来自:

好像是和hbase服务端,regionServer机器的hbase-site.xml中的splitPolicy有关系,默认应该是IncreasingToUpperBoundRegionSplitPolicy
 
IncreasingToUpperBoundRegionSplitPolicy: hbase会自己计算最大的region size,直到我们设置的regionSize
 
 
所以在hbase运行期间,可能我们设置的region size不生效
 
 
可以修改集群的hbase site,修改​hbase.regionserver.region.split.policy的配置的取值为constantSize,再重启hbase,再次测试

Sophie - DBA

赞同来自:

而且我发现每次重启某个regionserver时,也会造成一些region的split,重启前和重启后明显的region数会变多,当集群本身不稳定,内存压力较大时,重启就感觉是恶性循环一样,因为region各数越来越来,我使用的hbase版本是cdh5.8.3-hbase1.2

ProgramGeek

赞同来自:

你这边不是应该2*2*2*128*2=2048M嚒?你一个表2个Region

要回复问题请先登录注册


中国HBase技术社区微信公众号:
hbasegroup

欢迎加入HBase生态+Spark社区钉钉大群