本文主要是介绍2021SC@SDUSC HBase(八)项目代码分析——Region机制(五)之Region负载均衡,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
2021SC@SDUSC
目录
- 一、概述
- 二、负载均衡
- 1、生成负载均衡计划表
- 生成RegionPlan表:
- 三个调节cluster load策略:
- RandomRegionPicker
- LoadPicker
- LocalityPicker
- 2、Assignment Manager类执行计划表
- 四、总结
一、概述
在分布式系统中,负载均衡是一个非常重要的功能,HBase中Region是表按行方向切分的一个个数据区域,由RegionServer负责管理,并向外提供数据读写服务。如果一个RegionServer上的Region过多,那么该RegionServer对应的就会承担过多的读写等服务请求,也就有可能在高并发访问的情况下,造成服务器性能下降甚至宕机。如此,RegionServer间Region的动态负载均衡,也就成了HBase实现高性能读写请求访问的一个需要解决的问题。
HBase通过Region的数量实现负载均衡,即通过hbase.master.loadbalancer.class
实现自定义负载均衡算法。
HBase系统负载均衡是一个周期性的操作,通过负载均衡来均匀分配Region到各个RegionServer上,通过hbase.balancer.period属性来控制负载均衡的时间间隔,默认是5分钟。触发负载均衡操作是有条件的,但是如果发生以下情况则不会触发负载均衡操作:
- 负载均衡自动操作balance_switch关闭,即:balance_switch false;
- HBase Master节点正在初始化操作;
- HBase集群中正在执行RIT,即Region正在迁移中;
- HBase集群正在处理离线的RegionServer;
二、负载均衡
具体流程如下:
//initialize load balancer
this.balancer.setClusterStatus(getClusterStatus());
this.balancer.setMasterServices(this);
this.balancer.initialize();
HMaster初始化Balancer:把集群的状态穿进去,设置master,然后执行初始化
Map>> assignmentsByTable =
this.assignmentManager.getRegionStates().getAssignmentsByTable();
List plans = new ArrayList();
//Give the balancer the current cluster state.
this.balancer.setClusterStatus(getClusterStatus());for (Map> assignments :assignmentsByTable.values()) {
List partialPlans = this.balancer.balanceCluster(assignments);
if (partialPlans != null) plans.addAll(partialPlans);
}
在HMaster的balance()方法中调用。针对表来做平衡,返回平衡方案,针对全局,可能不是最优解。可以看到它首先获取了当前的集群的分配情况,这个分配情况是根据表的 Map>,然后遍历这个map的values,调用balancer.balanceCluster(assignments) 来生成一个partialPlans,生成RegionPlan(Region的移动计划) 。
接下来就可以切换到StochasticLoadBalancer当中了
每次负载均衡操作可以分为两步:
1、生成负载均衡计划表
2、Assignment Manager类执行计划表
1、生成负载均衡计划表
首先我们要明确,负载均衡是根据每个Table来的,在如下几种情况下是不会执行负载均衡的:
1、如果master没有被初始化
2、当前已经有负载均衡方法在跑了
3、当前有region处于splitting状态
4、当前集群中有region server出现故障
hbase执行
生成RegionPlan表:
代码包路径:org.apache.hadoop.hbase.master.balancer.StochasticLoadBalancer
生成regionPlan表的方法为:
StochasticLoadBalancer. balanceCluster(Map<ServerName,
这篇关于2021SC@SDUSC HBase(八)项目代码分析——Region机制(五)之Region负载均衡的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!