天天看點

HBase StochasticLoadBalancer元件介紹

總體互動示意圖

HBase StochasticLoadBalancer元件介紹

叢集狀态更新

主要包含以下兩部分,分别代表叢集負載和region分布;

clusterMetrics

各個regionserver會定時上報其負載資料到master,并存放在ServerManager元件中,ClusterStatusChore每分鐘會将其連同其它資訊一起更新到LoadBalancer中,LoadBalancer會保留最近15次的資料,後續在進行ReadRequest、WriteRequest和MemStoreSize等相關計算時,可以根據這些曆史資料計算出最近一段時間的平均值;

clusterLoad

代表region在各個regionserver的配置設定情況,從AssignmentManager中擷取;

生成plan

HBase StochasticLoadBalancer元件介紹

所謂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的實作,目前有如下這些:

HBase StochasticLoadBalancer元件介紹

CostFunction可以了解為損失函數,取值區間為0到1,越接近最佳狀态,值越小;

對于MoveCostFunction來說,初始狀态就是最佳狀态,因為不需要任何移動,而移動所有region則是最差狀态;

而對于其它CostFunciton,則需要分别去考慮最差和最佳時的值具體是什麼,比如對于RegionCountSkewCostFunction,最差狀态是所有reigon都集中在單個regionserver上,而最佳狀态是所有regionserver上的region數量都等于平均數;

值得注意的是,對于ServerLocalityCostFunction及其它資料本地化相關因子來說,最佳狀态并非是完全本地化,而是基于目前hdfs的block分布狀态,所能達到的最大學地化值,

收益的判斷需要對doAction之前和之後的totalCost進行比較,而totalCost是對各個因子的cost權重求和得到的,如下所示,實線框為初始狀态時的cost,模拟執行了action之後得到了虛線框代表的cost,有的增加有的減小,最後綜合下來的增減情況就代表了執行該action是否有價值;

HBase StochasticLoadBalancer元件介紹

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;

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

ReadRequestCostFunction

1、hbase.master.balancer.stochastic.readRequestCost

WriteRequestCostFunction

1、hbase.master.balancer.stochastic.writeRequestCost

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的程度,權重較高,意味着不贊成這種狀态;

繼續閱讀