区块链技术博客
www.b2bchain.cn

Region的拆分与合并

这篇文章主要介绍了Region的拆分与合并的讲解,通过具体代码实例进行17717 讲解,并且分析了Region的拆分与合并的详细步骤与相关技巧,需要的朋友可以参考下https://www.b2bchain.cn/?p=17717

本文实例讲述了2、树莓派设置连接WiFi,开启VNC等等的讲解。分享给大家供大家参考文章查询地址https://www.b2bchain.cn/7039.html。具体如下:

文章目录

        • 一、拆分与合并的目的
          • 1.拆分
          • 2.合并
        • 二、Region拆分
          • 1.自动拆分
          • 2.手动拆分
            • (1).Linux命令行创建
            • (2).在HBase命令行里创建
            • (3).指定拆分文件
            • (4).强制拆分
        • 三、Region合并
          • 1.Minor Compaction
          • 2.Major Compaction
          • 3.三种触发合并检查的情况
          • 4.合并操作

一、拆分与合并的目的

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地址
Region的拆分与合并

(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通过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的拆分与合并

三、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' 

本文转自互联网,侵权联系删除Region的拆分与合并

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Region的拆分与合并
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们