HBase 可以根据集群负载以region为单位进行rebalance。在HMaster中,后台会起一个线程定期检查是否需要进行rebalance,线 程叫做BalancerChore。线程每隔 hbase.balancer.period会定期执行 master.balance()函数,配置项默认300000毫秒,5分钟。
hbase.balancer.max.balancing如果没有配置,则使用 hbase.balancer.period配置项的值。
hbase几个关键名词解释:
|
名称 |
解释 |
|
Master |
负责RegionServer的负载均衡 |
|
负责RegionServer的故障转移 | |
|
负责维护Table和Region的元信息,不存储表数据 | |
|
RegionServer |
负责管理Region,实际存储数据的地方 |
|
负责接收客户端对Region(数据)的读写请求 | |
|
负责Region拆分及Region合并 | |
|
Zookeeper |
保证集群有且仅有一个Master |
|
监控RegsionServer的状态并实时通知Master | |
|
存储Regsion的寻址入口 | |
|
存储.META.表的位置、状态信息 | |
|
Table |
类似于关系型数据库中的表,用于存储一系列逻辑相关的数据。 |
|
Region |
将Table基于RowKey区间进行水平拆分,每部分即为一个Region,类似于关系型数据库中的分表。Region是表可用性及分布性的基本单位。 |
如果发生以下情况则不会触发负载均衡操作:
- 负载均衡自动操作 balance_switch关闭,即:balance_switch false;
- HBase Master节点正在初始化操作;
- HBase集群中正在执行RIT,即Region正在迁移中;
- HBase集群正在处理离线的RegionServer。
如果在某些特定环境下你不想让region数量均衡,但又需要RegionServer运行着,那么这个笨办法也是可以试一下的。
关闭一个节点服务。
$ ./hbase shell
hbase(main):002:0> balance_switch true
hbase(main):003:0> balancer
等分配结束,balance_switch false
启动一个节点,就成这样了。

不知道这个适用于那个场景,但是挺好玩~
本文深入探讨HBase的负载均衡机制,详细介绍了HBase如何通过RegionServer管理和Region的拆分来实现数据的均匀分布。文章还解释了BalancerChore线程如何定期检查并调整集群负载,以及在特定情况下负载均衡可能被禁用的原因。
1204

被折叠的 条评论
为什么被折叠?



