hbase Normalizer解决预分区错误,在不动数据的情况下完美解决热点问题

(转)  http://www.aboutyun.com/forum.php?mod=viewthread&tid=24292

1.对于预分区错误,hbase使用什么功能解决?
2.Region Normalizer的功能是什么?
3.在什么情况下运行Normalizer 比较好?
4.哪个版本开始有Normalizer功能?
5.什么情况下Normalizer会合并region?
6.什么情况下Normalizer会分裂region?

 hbase已经预分区完毕,在装上数据之后,发现并不是很合理,有的分区数据多,有的数据很少。想重新划分分区。这在以前的版本是非常的困难的,解决办法只有重新创建建表,然后重新导数据,这是非常麻烦的,特别是数据量已经非常大。hbase为了解决这个问题,增加了Normalizer这个功能.

Region Normalizer使用表的所有region大致相同大小。它通过找到一个粗略的平均值来做到这一点。大于这个平均值【size】的两倍的region将会被分割。更小的region将会合并到相邻的region。

在集群空闲的时候,或则比较大的改动后比如大量删除,适合运行Normalizer 。自HBase-1.2开始,Region Normalizer便具有功能。它运行一组预先计算的merge/split操作,以调整比table的平均region太大或太小区region。Region Normalizer为hbase所有表调用计算‘plan’。系统表(比如 hbase:meta, hbase:namespace, Phoenix 系统等)和用户表当计算‘plan’时,禁用Normalizer会被忽略。对于启用了normalization的表,normalization plan跨多个表并行执行。

可以使用HBase shell中的'normalizer_switch'命令在整个集群中全局启用或禁用Normalizer。Normalization 也可以在每一个表基础上进行控制,默认情况下创建表时禁用此操作。通过将NORMALIZATION_ENABLED表属性设置为true或false,可以启用或禁用表的Normalization。

检测normalizer状态和enable/disable normalizer

hbase(main):001:0> normalizer_enabled
true
0 row(s) in 0.4870 seconds
 
hbase(main):002:0> normalizer_switch false
true
0 row(s) in 0.0640 seconds
 
hbase(main):003:0> normalizer_enabled
false
0 row(s) in 0.0120 seconds
 
hbase(main):004:0> normalizer_switch true
false
0 row(s) in 0.0200 seconds
 
hbase(main):005:0> normalizer_enabled
true
0 row(s) in 0.0090 seconds

启用时,每5分钟在后台调用Normalizer(默认情况下),可以在hbase-site.xml中配置hbase.normalization.period时间。
Normalizer也可以使用HBase shell的normalize命令手动/编程调用。
HBase默认使用SimpleRegionNormalizer,但只要用户实现RegionNormalizer接口,用户就可以继承RegionNormalizer接口设计自己的normalizer 。
有关SimpleRegionNormalizer用于计算normalization plan的逻辑的详细信息,
请参阅此处(https://hbase.apache.org/devapid ... gionNormalizer.html)

猜你喜欢

转载自www.cnblogs.com/llphhl/p/8993717.html
今日推荐