Region的合并不是为了性能, 而是出于便于运维的目的 .
比如删除了大量的数据 ,这个时候每个Region都变得很小 ,存储多个Region就浪费了 ,这个时候可以把Region合并起来,进而可以减少一些Region服务器节点。
下面来看一下如何进行region合并:
通过Merge类冷合并Region
执行冷合并前,需要先关闭hbase集群
创建一张hbase表:
1 |
create 'test','info1',SPLITS => ['1000','2000','3000'] |
查看表region
需求:
通过查看UI界面,需要把test表中的前2个region数据进行合并,分别是:
test,,1620148534743.8222cc22ab4acb18b726b3c6be1cb082.
test,1000,1620148534743.b2e07e8922d0ffa6477ef2d7ff368bba.
这里通过org.apache.hadoop.hbase.util.Merge类来实现,不需要进入hbase shell,直接执行(需要先关闭hbase集群):
1 |
hbase org.apache.hadoop.hbase.util.Merge test test,,1620148534743.8222cc22ab4acb18b726b3c6be1cb082. test,1000,1620148534743.b2e07e8922d0ffa6477ef2d7ff368bba. |
成功后可以界面观察分区变化,但是我这里运行找不到主类
org.apache.hadoop.hbase.util.Merge
。实际上冷合并不常用,因为需要停止集群损耗巨大,工作中更常使用热合并。
通过online_merge热合并Region
不需要关闭hbase集群==,在线进行合并
与冷合并不同的是,online_merge的传参是Region的hash值,而Region的hash值就是Region名称的最后那段在两个.之间的字符串部分。
需求:需要把test表中的2个region数据进行合并:
test,2000,1620148534743.68216f0389235352165d3b884db24b95.
test,3000,1620148534743.c85c37595f74abb8eb0276c50bf700e6.
需要进入hbase shell:
1 2 3 |
hbase(main):001:0> merge_region '68216f0389235352165d3b884db24b95','c85c37595f74abb8eb0276c50bf700e6' Took 11.3953 seconds |
成功后观察界面
Views: 13