HBase基於region數目和data locality來balance regions

1.  在Hbase的運維過程當中,咱們常常須要作以下操做:git

  • 移動 regionserver 到其餘的 regionserver group中
  • 下線一臺機器
  • 增長一臺機器
  • 移動 table 到其餘 regionserver group中。 

2.  在進行上述操做的過程當中,一個 regionserver 上的 regions,或者一個 table 的 regions 都會從新進行分配,這樣的分配過程是 HBase 控制的,咱們沒法控制一個 region 會移動到哪個 regionserver 上。github

3.  在 region 提供服務的過程當中,影響服務質量的因素有:網絡

  • regionserver的負載狀況,通常來講,region 的數目越多,若是不考慮熱鍵的話regionserver的負載也會越高。
  • regionserver機器的性能,性能越好的機器,能夠提供越多的服務,在異構的HBase集羣中,尤爲明顯。對於一些比較重要的表咱們會把它們放在性能比較好的機器上。
  • region的cache locality,region在服務的過程當中,會經過memstore&blockcache緩衝機制來提升服務的速度,當region遷移後,region會丟失緩衝。
  • data locality,data locality用來衡量region服務的數據即region的HFile位於本地的程度,在region寫HFile的時候,根據HDFS的replica策略,至少會有一個備份存儲在本地,所以隨着時間的推移,region的locality會逐漸趨於1。region遷移的時候,不必定能移動到正好有這個region數據備份的機器上,所以,數據就會從其餘節點獲取,形成網絡開銷增長,延遲增長。 

4.  考慮上面狀況,咱們但願能夠人工干預region的遷移,好比下線一臺機器以前,咱們能夠先把它上面的region移動到最合適的位置,而後再把機器下線。咱們的移動策略有:運維

  • cache locality:儘量保證region的位置不發生移動。
  • data locality:儘量把region遷移到data locality高的節點。
  • region count:儘量使得region的數目分配均衡,不給單一節點形成較大的壓力。
  • Ability and responsibility:性能越好的機器,須要承擔更多的責任。 

5.  總結以上需求,咱們須要這樣一個工具:工具

  • 輸入1——table 咱們須要balance的表,這是咱們操做的基本單位。
  • 輸入2——server list,咱們須要把表中的數據balance到那些機器上,經過用戶提供列表能夠很是方便實現機器的增長和減小,以及把table上的region移動到指定機器上。在提供server list的時候能夠指定機器的性能參數。
  • 輸入3——balance的策略 

6.  具體實現可見github:git@github.com:LiuPeien/hbase-balance-util.git性能

相關文章
相關標籤/搜索