HBase StochasticLoadBalancer组件介绍

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
网络型负载均衡 NLB,每月750个小时 15LCU
简介: HBase StochasticLoadBalancer组件介绍。

总体交互示意图

balancer_

集群状态更新

主要包含以下两部分,分别代表集群负载和region分布;

clusterMetrics

各个regionserver会定时上报其负载数据到master,并存放在ServerManager组件中,ClusterStatusChore每分钟会将其连同其它信息一起更新到LoadBalancer中,LoadBalancer会保留最近15次的数据,后续在进行ReadRequest、WriteRequest和MemStoreSize等相关计算时,可以根据这些历史数据计算出最近一段时间的平均值;

clusterLoad

代表region在各个regionserver的分配情况,从AssignmentManager中获取;

生成plan

balancer_plan_

所谓plan,就是一些action的集合,action的类型有AssignRegionAction、MoveRegionAction和SwapRegionsAction三种;

而action由CandidateGenerator产生,目前主要是以下几种:

RandomCandidateGenerator

  1. 随机选择2个server,1个称为thisServer,另1个称为otherServer;
  2. 对于region数量更多的那个server,随机选出1个region;
  3. 对于region数量更少的那个server,有50%概率选出0个region,有50%概率选出1个region;
  4. 如果第3步选出了0个region,则返回MoveRegionAction,否则返回SwapRegionsAction;

LoadCandidateGenerator

  1. 将所有server按regionCount排序;
  2. 找出region最多和最少的2个server;
  3. 后续步骤与RandomCandidateGenerator一致;

LocalityBasedCandidateGenerator

  1. 将所有region打乱顺序;
  2. 遍历这些region;
  3. 获取当前这个region(称为fromRegion)的mostLocalServer(称为toServer),如果与当前所在server(称为fromServer)一致,则回到第2步,否则到下一步;
  4. 如果toServer的region数量小于平均值,则直接返回一个MoveRegionAction,否则到下一步;
  5. 遍历toServer上的region(称为toRegion),如果能找到一个region,与fromRegion交换可使得总体locality增加,则返回一个SwapRegionsAction,否则回到第2步;

CandidateGenerator每次生成一个action,都会对其进行收益判断,这个判断涉及到很多因子,每一种都对应一个CostFunction的实现,目前有如下这些:

balancerCostFuncitonList

CostFunction可以理解为损失函数,取值区间为0到1,越接近最佳状态,值越小;

对于MoveCostFunction来说,初始状态就是最佳状态,因为不需要任何移动,而移动所有region则是最差状态;
而对于其它CostFunciton,则需要分别去考虑最差和最佳时的值具体是什么,比如对于RegionCountSkewCostFunction,最差状态是所有reigon都集中在单个regionserver上,而最佳状态是所有regionserver上的region数量都等于平均数;

值得注意的是,对于ServerLocalityCostFunction及其它数据本地化相关因子来说,最佳状态并非是完全本地化,而是基于当前hdfs的block分布状态,所能达到的最大本地化值,

收益的判断需要对doAction之前和之后的totalCost进行比较,而totalCost是对各个因子的cost加权求和得到的,如下所示,实线框为初始状态时的cost,模拟执行了action之后得到了虚线框代表的cost,有的增加有的减小,最后综合下来的增减情况就代表了执行该action是否有价值;
balancer_

CandidateGenerator生成action的次数有一定限制,称为maxStep,该值与集群配置以及集群规模相关;

执行plan

plan的执行本质上是执行一系列的MoveRegionProcedure,MoveRegionAction会对应一个MoveRegionProcedure,而SwapRegionsAction会对应两个MoveRegionProcedure;

计划执行时,会进行总体执行时间的限制,默认取balance执行间隔的值(hbase.balancer.max.balancing),即300s,另外,还可限制总体处于rit状态的region的比例(hbase.master.balancer.maxRitPercent),默认为1.0,即不限制;

一些配置参数

判断阶段

1、hbase.master.balancer.stochastic.minCostNeedBalance
需要balance的最小cost,即与理想状态的偏差,默认值为0.05;

生成plan

1、hbase.master.balancer.stochastic.maxSteps
生成后选action的最大次数,默认值为1000000;
2、hbase.master.balancer.stochastic.runMaxSteps
该值本质上是用来决定把maxSteps作为上限还是作为下限,默认false,即作为上限;
(实际的最大步数,会由动态计算的一个值,与maxSteps进行比较,来选取一个)
3、hbase.master.balancer.stochastic.maxRunningTime
生成plan最多可用时间,默认值为30s;
4、hbase.master.balancer.stochastic.stepsPerRegion
默认800次,该参数会和region数量以及server数量相乘,来得到动态计算的step值;

cost计算相关

MoveCostFunction

1、hbase.master.balancer.stochastic.moveCost
moveCost权重,默认值为7;
2、hbase.master.balancer.stochastic.maxMovePercent
最大可移动的region比例,默认值为0.25;
3、DEFAULT_MAX_MOVES
常量值600,会与maxMovePercent得到的值取max,作为实际可移动数,这意味着max_moves至少为600;
4、当超出实际maxMove时,cost会返回1个很大的值1000000,从而否决掉当前action;

RegionCountSkewCostFunction

1、hbase.master.balancer.stochastic.regionCountCost
regionCountCost权重,默认值为500;

CostFromRegionLoadFunction(abstract)

1、hbase.master.balancer.stochastic.numRegionLoadsToRemember
最多保留的历史regionLoad数量,默认值为15,基于这些历史load,会先算出每次的增量,然后取平均后作为实际load(适用于MemStoreSizeCostFunction、ReadRequestCostFunction、WriteRequestCostFunction);

MemStoreSizeCostFunction

1、hbase.master.balancer.stochastic.memstoreSizeCost
默认值为5;

StoreFileCostFunction

1、hbase.master.balancer.stochastic.storefileSizeCost
默认值为5;

ReadRequestCostFunction

1、hbase.master.balancer.stochastic.readRequestCost
默认值为5;

WriteRequestCostFunction

1、hbase.master.balancer.stochastic.writeRequestCost
默认值为5;

ServerLocalityCostFunction

1、hbase.master.balancer.stochastic.localityCost
默认值为25;

RackLocalityCostFunction

1、hbase.master.balancer.stochastic.rackLocalityCost
默认值为15;

TableSkewCostFunction

1、hbase.master.balancer.stochastic.tableSkewCost
默认值为35;

PrimaryRegionCountSkewCostFunction

1、hbase.master.balancer.stochastic.primaryRegionCountCost
默认值为500;

RegionReplicaHostCostFunction

1、hbase.master.balancer.stochastic.regionReplicaHostCostKey
默认值为100000,主要识别region的各个副本集中到相同host的程度,权重很高,意味着基本上不允许出现;

RegionReplicaRackCostFunction

1、hbase.master.balancer.stochastic.regionReplicaRackCostKey
默认值为10000,主要识别region的各个副本集中到相同rack的程度,权重较高,意味着不赞成这种状态;

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
3月前
|
存储 分布式计算 负载均衡
什么是 HBase?其组件起什么作用?
【8月更文挑战第12天】
160 4
|
3月前
|
存储 缓存 分布式数据库
Apache HBase 的组件有哪些?
【8月更文挑战第31天】
74 0
|
分布式计算 大数据 Hadoop
大数据组件-Hbase高可用架构部署
大数据组件-Hbase高可用架构部署
大数据组件-Hbase高可用架构部署
|
存储 缓存 负载均衡
大数据组件-Hbase
大数据组件-Hbase
大数据组件-Hbase
|
SQL 消息中间件 Kafka
Atlas集成外部组件—集成Hive、HBase、Kafka
Atlas集成外部组件—集成Hive、HBase、Kafka
615 0
Atlas集成外部组件—集成Hive、HBase、Kafka
|
存储 关系型数据库 大数据
java大数据组件HBase
java大数据组件HBase
153 0
|
分布式数据库 数据安全/隐私保护 Hbase
如何通过控制台来访问HBase开源组件?
今天这里主要介绍如何通过控制台来访问HBase产品的一些开源软件界面,比如说原生HBase的一些界面。 首先我们来到HBase产品控制台。这里看到我们已经有一个运行中的HBase了,然后点击管理。
9310 0
|
存储 分布式计算 分布式数据库
Hadoop组件--分布式数据库HBase
 1. HBase概述 先来看下HBase在Hadoop生态中的位置 HBase是Apache Hadoop⽣态系统中的重要⼀员,主要⽤于海量结构化数据存储。 HBase是一个构建在HDFS上的分布式列存储系统(严格的来说应该是列族存储),数据保存在HDFS上。
2670 0
|
2月前
|
分布式计算 Java Hadoop
java使用hbase、hadoop报错举例
java使用hbase、hadoop报错举例
91 4
|
1月前
|
分布式计算 Hadoop Shell
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
69 4