【HBase】调查HBase不进行Balance

问题描述:

有一台RegionServer宕机了,恢复之后,始终不向这台RegionServer上分配Region。

。。。。。。Balance相关内容后面再写。

解决:

首先出现这种问题,当然是去看一眼日志了。

如果去看这台RegionServer的日志,大概是这样的,啥都看不着。

其实应该去看Active Master节点的日志,因为Master负责集群的region和table哪种东西的管理。

但是Master日志大概也是什么也看不到。因为HBase默认的日志级别是INFO级别,可以下调日志级别到trace。然后重启一下Master节点(如果不是HA,还是重启集群吧。。。)

这时候就能看见日志了。

可以找找这条日志,说Balance被跳过了,原因是balancer计算出来cost大于最小的cost

Skipping load balancing because balanced cluster; total cost is 47.940677280639925, sum multiplier is 1102.0 min cost which need balance is 0.05

这时候可以去看源码了,查看StochasticLoadBalancer类的needsBalance方法。

 @Override
  protected boolean needsBalance(Cluster cluster) {
    ClusterLoadState cs = new ClusterLoadState(cluster.clusterState);
    double total = 0.0;
    float sumMultiplier = 0.0f;
    for (CostFunction c : costFunctions) {
      float multiplier = c.getMultiplier();
      if (multiplier <= 0) {
        continue;
      }
      if (!c.isNeeded()) {
        LOG.debug("{} not needed", c.getClass().getSimpleName());
        continue;
      }
      sumMultiplier += multiplier;
      total += c.cost() * multiplier;
    }

    if (total <= 0 || sumMultiplier <= 0
        || (sumMultiplier > 0 && (total / sumMultiplier) < minCostNeedBalance)) {
      if (LOG.isTraceEnabled()) {
        LOG.trace("Skipping load balancing because balanced cluster; " + "total cost is " + total
          + ", sum multiplier is " + sumMultiplier + " min cost which need balance is "
          + minCostNeedBalance);
      }
      return false;
    }
    return true;
  }

 可以看到是最后的一个判断没过。

通过上面的日志可以看到total <= 0 || sumMultiplier <= 0 、sumMultiplier > 0这几个判断都过了,最后那个判断为啥没过呢。

这就要去看看total和sumMultiplier这两个值是怎么来的了。

我们看一下minCostNeedBalance这个值是怎么来的。其实是配置的。。。默认值0.5f

 minCostNeedBalance = conf.getFloat(MIN_COST_NEED_BALANCE_KEY, minCostNeedBalance);
 protected static final String MIN_COST_NEED_BALANCE_KEY =
      "hbase.master.balancer.stochastic.minCostNeedBalance";

此时聪明的你一定想到了直接改了hbase.master.balancer.stochastic.minCostNeedBalance,(total / sumMultiplier) < minCostNeedBalance,让它成立不就好了。

是的,https://issues.apache.org/jira/browse/HBASE-22349这个issue描述了这个问题,他给出的解决办法就是改小这个配置。

接下来就可以重启集群,如果你迫不及待可以去hbase shell 手动balance,不然就等几分钟,master会执行balancer程序。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值