zoukankan      html  css  js  c++  java
  • 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。(然而从平台角度来说,这并不是一种鼓励的做法,毕竟一般情况下所有表都需要负载均衡服务)

  • 相关阅读:
    2017.5.2-afternoon
    2017.5.2-morning
    2017.4.27-afternoon
    2017.4.27-morning
    2017.4.26-morning
    2017.4.26-afternoon
    2017.4.24-4.25
    2017.4.21-afternoon
    Linux下进程间通信(二)----共享内存和信号量
    Linux下进程间通信(一)----概述和管道通信
  • 原文地址:https://www.cnblogs.com/lhfcws/p/7825932.html
Copyright © 2011-2022 走看看