Region的拆分与合并

1 篇文章 0 订阅
1 篇文章 0 订阅

一、拆分与合并的目的
1.拆分
  • 当一个Region大到一定程度,或导致读取效率太低,所以会进行分裂
  • HBase可以通过Region Split达到负载均衡
  • Region的拆分分为自动拆分与手动拆分
2.合并
  • 当删除了大量的数据后,每一个Region都变小了,这时候再分多个Region就太浪费空间,可以将这些Region合并起来
  • 合并的主要目的不是为了性能考虑,而是出于维护的目的
二、Region拆分
1.自动拆分
  1. 在0.94版本之前,使用的拆分策略是.ConstantSizeRegionSplitPolicy,按照固定大小来拆分Region,即当Region的大小超过默认值(通常默认值是10G),Region就会被HBase拆分成两个Region,且是平均分配。
  2. 0.94版本之后,用到的拆分策略是 IncreasingToUpperBoundRegionSplitPolicy,即这种拆分方法是会随着Region个数变化而变化,比较灵活,具体的计算方法如下:
Math.min(tableRegionCounts ^3 * initalSize,defaultRegionMaxFileSize)
- tableRegionCounts:表在RegionServer上所有Region的总和
- initalSize:如果没有重新定义hbase.increasing.policy.initial.size,它的大小就是Memstore的2倍,也就是128*2M
- defaultRegionMaxFileSize:Region的最大大小,默认是10G

通过计算可以得出,当Region的个数分别为1,2,3时,文件大小的上限分别为256M,2G,6912M。当Region个数大于等于4个,文件大小已经超出10G,所以上限只能是10G

2.手动拆分
(1).Linux命令行创建
hbase org.apache.hadoop.hbase.util.RegionSplitter my_split_table2 HexStringSplit -c 5 -f mycf

org.apache.hadoop.hbase.util.RegionSplitter——调用的一个切分Region类
my_split_table2——表名
HexStringSplit——拆分点算法,这里采用16进制
-c ——Region的个数
-f ——列族名
执行完成后可以进入HBase中查看是否创建成功
然后登陆网页能够更直观的看到自己切分的Region:localhost:60010——localhost要用自己的ip地址
在这里插入图片描述

(2).在HBase命令行里创建
hbase(main):009:0> create 'split2','mycf2',SPLITS=>['aa','bb','cc','dd','ee','ff','zz']
0 row(s) in 2.2930 seconds
=> Hbase::Table - split2

同样也可以登陆网页查看切分是否成功。

(3).指定拆分文件

首先编辑一个拆分文件student.txt,如下图,每一行不能有重复

aa
bb
ff
ag
sd
dd
gg
~

在HBase命令行开始创建表:

hbase(main):012:0> create 'stu','info',SPLITS_FILE=>'/root/datas/student/student.txt'
0 row(s) in 2.2610 seconds

=> Hbase::Table - stu
hbase(main):013:0>

只需要指定拆分文件即可。

(4).强制拆分

以上三种拆分方式也叫做Region的预拆分。下面这种属于对Region的强制拆分。
在这里插入图片描述
上图是之前做的一个Region通过HBase命令行进行拆分

split2,bb,1595513677802.c798b2717d6d7006bd67ad4e6197ed43.

split2——表名
bb——起始key
1595513677802——终止key
c798b2717d6d7006bd67ad4e6197ed43——终止key的id
现在可以根据这个id在bb和cc之间在强制拆分一个Region
HBase命令行输入命令:

hbase(main):014:0> split 'c798b2717d6d7006bd67ad4e6197ed43','c'
0 row(s) in 0.0450 seconds

就可以发现bb和ccRegion之间又强制被拆分一个Region
PS:因为Region的排序是按照字典顺序排序的,所以在强制拆分的时候,要注意Region名的大小
在这里插入图片描述

三、Region合并
1.Minor Compaction
  • 将一部分小文件合并成更少的大型文件,通过事件触发,合并速度较快;合并的时候不会真正的删除,只是打个标记
  • hbase.hregion.memstore.flush.size 缓存阈值大小 在hbase-site.xml文件中可以设置,默认是128M
  • hbase.hstore.compaction.max :每次compact的HFile的最大数目,默认是10
  • hbase.hstore.compaction.kv.max:compact时批量读取和写入KeyValue数据的数量,默认是10
2.Major Compaction
  • 将一个HStore中的所有文件合并成一个文件,通过时间触发,合并速度慢,同时还会删除合并之前的小文件,因此十分消耗性能,一般会将自动合并关掉。
  • hbase.hregion.majorcompaction 时间间隔,默认是7天
3.三种触发合并检查的情况
  1. MemStore被刷写到磁盘
  2. 执行shell命令compact,major_compaction或者调用相应API
  3. HBase后台线程周期性触发检查
4.合并操作
#compact一个表的所有regions
compact 't1'
#compact某个空闲的region
compact 'r1'
#compact一个region中的某个列族
compact 'r1', 'c1'
#compact一个表中的某个列族
compact 't1', 'c1'
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值