HBase 負載均衡

jopen 10年前發布 | 60K 次閱讀 HBase NoSQL數據庫

  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后都會檢查是否時間到了。

 

 參考資料

hbase-server-0.98.3-hadoop2.jar

來自:http://www.cnblogs.com/foxmailed/p/3899574.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!