• HBase rebalance 负载均衡源码角度解读使用姿势


    关键词:hbase rebalance 负载均衡

    参考源码版本:apache-hbase-1.1.2

    什么是HBase Rebalance ?

    随着数据写入越来越多以及不均衡,即使一开始每个RegionServer的region数差不多,后期也会出现较为明显的差异现象。如果不做均衡,region过多的RS就有可能成为热点服务器,成为瓶颈。因此rebalance相当于一个负载调整的过程,把负载重的RS的部分region分发出去给别的RS去分担region压力。

    Rebalance 策略

    Rebalance由HMaster触发,因此主要代码在 org.apache.hadoop.hbase.master.balancer 下。配置 hbase.master.loadbalancer.class。

    主要有三种策略:

    • StochasticLoadBalancer . 默认策略,是一种综合的计算方法,考虑了六个因素(具体逻辑可看代码或参考 http://openinx.github.io/2016/06/21/hbase-balance):
      • 每台RegionServer读请求数(ReadRequestCostFunction)
      • 每台RegionServer写请求数(WriteRequestCostFunction)
      • 每台RegionServer的Region个数(RegionCountSkewCostFunction)
      • 移动代价(MoveCostFunction)
      • 数据locality(TableSkewCostFunction)
      • 每张表占据RegionServer中region个数上限(LocalityCostFunction)
    • SimpleLoadBalancer.
    • FavoredNodeLoadBalancer.

    Rebalance 触发

    HMaster会有个BalancerChore定时类去检查触发,间隔时间:hbase.balancer.period (dft 300000=5min) 。当然HBaseAdmin或shell也提供了命令接口可以手动触发。

    Rebalance 方式

    有两种方式,默认是把当前RS的region混在一起去rebalance,若hbase.master.loadbalance.bytable=true,则会按照一个表一个表来rebalance,这样至少可以确保某些表中途是rebalance完的。有人会称后者为表级rebalance,但实际上这并不是纯粹的表级rebalance,如果你真的只想触发某个表的rebalance,可能得考虑自定义策略去过滤其他表的region并且将上述bytable配置配置为true。(然而从平台角度来说,这并不是一种鼓励的做法,毕竟一般情况下所有表都需要负载均衡服务)

  • 相关阅读:
    【LOJ】#2071. 「JSOI2016」最佳团体
    【LOJ】#2070. 「SDOI2016」平凡的骰子
    【LOJ】#2069. 「SDOI2016」齿轮
    【LOJ】#2068. 「SDOI2016」探险路线
    【LOJ】#2067. 「SDOI2016」硬币游戏
    【LOJ】#2066. 「SDOI2016」墙上的句子
    【LOJ】#2065. 「SDOI2016」模式字符串
    【LOJ】#2064. 「HAOI2016」找相同字符
    【LOJ】#2063. 「HAOI2016」字符合并
    【LOJ】#2062. 「HAOI2016」地图
  • 原文地址:https://www.cnblogs.com/lhfcws/p/7825932.html
Copyright © 2020-2023  润新知