HBase基於region數目和data locality來balance regions
阿新 • • 發佈:2018-12-16
1. 在Hbase的運維過程中,我們經常需要做如下操作:
- 移動 regionserver 到其他的 regionserver group中
- 下線一臺機器
- 增加一臺機器
- 移動 table 到其他 regionserver group中。
2. 在進行上述操作的過程中,一個 regionserver 上的 regions,或者一個 table 的 regions 都會重新進行分配,這樣的分配過程是 HBase 控制的,我們無法控制一個 region 會移動到哪一個 regionserver 上。
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:[email protected]:LiuPeien/hbase-balance-util.git