HBase负载均衡之集群负载的评分方法

HMater负责把region均匀到各个region server 。hmaster中有一个线程任务是专门处理负责均衡的,默认每隔5分钟执行一次。

每次负载均衡操作可以分为两步:

  • 生成负载均衡计划表
  • Assignment Manager 类执行计划表

下面我们来详细介绍一下HBase是如何生成负载平衡计划表的。
首先我们要明确,负载均衡是根据每个Table来的,在如下几种情况下是不会执行负载均衡的:

  1. 如果master没有被初始化
  2. 当前已经有负载均衡方法在跑了
  3. 当前有region处于splitting状态
  4. 当前集群中有挂掉的region server

生成RegionPlan表:
代码包路径:
org.apache.hadoop.hbase.master.balancer.StochasticLoadBalancer

生成regionPlan表方法为:

StochasticLoadBalancer. balanceCluster(Map<ServerName, List<HRegionInfo>> clusterState)

这个方法比较特别也比较有意思,首先,StochasticLoadBalancer 有一套计算某一table下cluster load(集群负载)评分的算法,得出的值越低表明负载越合理。这套算法是根据以下几个维度来计算得出的:

  • Region Load //每个regin server 的region 数目
  • Table Load
  • Data Locality //数据本地性
  • Memstore Sizes //memstore大小
  • Storefile Sizes //存储文件的大小

首先对单个region server 根据上面5个维度计算得出评分x(0<=x<=1),然后把同一table下所有region server评分加起来,就是当前table的cluster load评分。这个评分越低表明越合理。

然后它还有三种调节cluster load 的方法:

  • RandomRegionPicker
  • LoadPicker
  • LocalityPicker

RandomRegionPicker 随机交换策略。在虚拟cluster中(虚拟cluster只作为记录用,不会涉及实际的region 迁移操作。cluster包含某个table下所有的region server的相关信息,以及region server下的regions.)随机选出两个region server ,然后分别在region server 中在 随机获取一个region,然后这两个region server下的region交换一下,然后再计算评分,如果得出的评分较低的话,表明这两个region 交换是有利于集群的负载均衡的,保留这个改变。否则,还原到之前的状态,两个region再交换下region server 。其中拥有比较少regions的region server 可能随机出一个空,实际情况,就是变成了迁移region,不再是交换region。

LoadPicker ,region数目均衡策略。在虚拟cluster中,首先获取region数目最多和最少的两个region server ,这样能使两个region server 最终的region数目更加的平均。后面的流程和上面的一样。

LocalityPicker ,本地性最强的均衡策略。本地性的意思是,Hbase底层的数据其实是存放在HDFS上面的,如果某个region的数据文件存放在某个region server 的比例比其他的region server 都要高,那么称这个region server是该region的最高本地性region server 。在该策略中,首先随机出一个region server 以及其下面的region 。然后找到这个region本地性最高的region server 。本地性最高的region server再随机出一个region server。这两个region server 后面的流程和上面的一样。

具体流程如下:
这里写图片描述

我们对上面流程图中的主要步骤进行分析:
0. 是否需要进行负载均衡—-是根据当前region server拥有的region数目来判断的,查看如下代码。

protected boolean needsBalance(ClusterLoadS
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值