HBase 負載均衡

  HBase 能夠根據當前集羣的負載以region爲單位進行rebalance。在HMaster中,後臺會起一個線程按期檢查是否須要進行rebalance,線程叫作BalancerChore。線程每隔 hbase.balancer.period會按期執行 master.balance()函數,配置項默認300000毫秒,5分鐘。每次balance最多執行數據結構

hbase.balancer.max.balancing,若是沒有配置,則使用hbase.balancer.period配置項的值。master.balance()首先經過loadBalancerTracker去zk上看是否load balance開啓,若是開啓,則從AssignmentManager中檢查當前是否有region處於in transition狀態,若是有,則直接返回。不然將集羣的狀態給balancer以便後續作決策,HMaster的assignmentManager成員內部維護着一個表在哪些機器上,這些機器上分別有哪些region。對於每張表,都會執行balancer.balanceCluster()方法。HBase中load balance的策略是可插拔的,開發者能夠根據本身業務的需求來開發本身的load balance策略。在HBase中,是經過接口LoadBalancer類實現的。具體使用哪一個load balance策略由配置項hbase.master.loadbalancer.class決定,默認使用StochasticLoadBalancer。全部的邏輯都在StochasticLoadBalancer這個負載均衡器的 balanceCluster()方法中。負載均衡

   StochasticLoadBalancer負載均衡器首先會根據每一個region server上的region個數做決定要不要進行rebalance,具體方法是算出全部server的平均region個數,而後根據配置項hbase.regions.slop產生一個區間[floor(average * (1-slop)), ceil(average * (1+slop))],配置項默認0.2,若是region 個數最多的region server不比右區間大,而且region個數最少的region server不比左區間小,則說明region個數比較平均,就不進行rebalance,直接退出,等待下次調度。不然,計算當前集羣狀態的cost值,這個cost值的計算會考慮到移動region的成本,region 本地化策略,region count分佈,每一個server上table的分佈等作一個加權平均。而後一共迭代computedMaxSteps次,次數由配置項hbase.master.balancer.stochastic.maxSteps和hbase.master.balancer.stochastic.stepsPerRegion,還有當前集羣的region個數,server個數共同決定。每次迭代,都會隨機選擇一種pick region的策略,一共有三種,分別爲RandomRegionPicker,LoadPicker和LocalityBasedPicker。隨機選定一個picker策略後,這個picker就會從集羣中選出兩個用於的region或者選出一個用於遷移到其餘server的region,而後更新集羣狀態的數據結構,從新計算當前集羣狀態的cost值,若是發現新的cost比原來的小,則說明,這種region的交換或者遷移是有效的。每次迭代都是基於上次的成果,總共作computedMaxSteps。最後產生出一系列的plan,每一個plan就是交換region或者遷移region。對於全部的表都作一次,把全部的plan都放入AssignmentManager的regionsPlans中。而後對於每一個plan,都調用assignmentManager.balance(plan),這個函數會調用unassign()方法,首先在zk上爲這個region建立/hbase/region-in-transition/region_encoded_name節點,節點內容爲這個原來在某個server上的region處於closing狀態了,而後給這個region原來所在的server發送close region命令對region進行卸載,隨後再調用public void assign(HRegionInfo region, boolean setOfflineInZK)給region的目標region server發送open region的命令,目標region server是從regionPlans中查到的。最後刪除zk上的節點。其中,每次作完一個plan後都會檢查是否時間到了。dom

 

 參考資料函數

hbase-server-0.98.3-hadoop2.jaroop

相關文章
相關標籤/搜索