中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

HBase負載均衡算法概述及詳解

發布時間:2020-04-17 14:28:17 來源:億速云 閱讀:589 作者:三月 欄目:關系型數據庫

下文給大家帶來HBase負載均衡算法概述及詳解,希望能夠給大家在實際運用中帶來一定的幫助,負載均衡涉及的東西比較多,理論也不多,網上有很多書籍,今天我們就用億速云在行業內累計的經驗來做一個解答。

1.概要

   0.92版本后HBase的均衡算法可以通過實現了LoadBalancer接口的hbase.master.loadbalancer.class來自定義。

HBase負載均衡算法概述及詳解

2.負載均衡實行條件。

   負載均衡以特定時間間隔(hbase.balancer.period 默認是5分鐘)執行。

   當遇到如下場景時候不進行負載均衡:

           1.均衡負載開關balanceSwitch關閉。

           2.HMase為完成初始化。

           3.RIT中有未處理完的regions。

           4.有正在處理的DeadRegionserver.

3.默認負載均衡的具體算法

   3.1 將所有RegionServer以負載進行排序,如果負載相同則按照serverName進行排序。

   例子:

RS1 11
RS6 2
RS2 10
RS5 5
RS3 9排序為:RS3 9
RS4 10
RS2 10
RS5 5
RS4 10
RS6 2
RS1 11

  3.2 通過如下算法計算當前是否需要進行均衡:

 

// Check if we even need to do any load balancing
float average = (float)numRegions / numServers; // for logging
// HBASE-3681 check sloppiness first
int floor = (int) Math.floor(average * (1 - slop));
int ceiling = (int) Math.ceil(average * (1 + slop));
if (serversByLoad.lastKey().getLoad() <= ceiling &&
   serversByLoad.firstKey().getLoad() >= floor) {
  // Skipped because no server outside (min,max) range
  LOG.info("Skipping load balancing because balanced cluster; " +
    "servers=" + numServers + " " +
    "regions=" + numRegions + " average=" + average + " " +
    "mostloaded=" + serversByLoad.lastKey().getLoad() +
    " leastloaded=" + serversByLoad.firstKey().getLoad());
  return null;
}


   根據如上算法在本例中:

       float average = 47/ 6  = 7.8;

       int floor = (int) Math.floor(average * (1- slop)) = 6

       intceiling = (int) Math.ceil(average * (1+ slop)) = 9

       其中slop為hbase.regions.slop 默認為0.2

   可以看出RS6 上只有2個region < floor 所以本例需要進行負載均衡。


  3.3 計算 min 和 max 得到最小負載和最大負載

     

int min = numRegions / numServers;
int max = numRegions % numServers == 0 ? min : min + 1;

    本例中:

    min = 7  

    max = 8


  3.4 將大于max負載的RS降低到max負載,移除的Region放入regionsToMove隊列待分配。

RS6 2
RS6 2
RS5 5
RS5 5
RS3 9max:8RS3 8
RS2 10
RS2 8
RS4 10
RS4 8
RS1 11
RS1 8





regionsToMove


RS3 1


RS2 2


RS4 2


RS1 3

   

   3.5 將小于min負載的RS從regionsToMove隊列中取出全部加到min負載

RS6 2
RS6 7
RS5 5
RS5 7
RS3 8min:7RS3 8
RS2 8
RS2 8
RS4 8
RS4 8
RS1 8
RS1 8





regionsToMove


RS1 1

 3.6 這里分為兩種情況:

     a.當所有< min負載RS都升到min負載時regionsToMove隊列還有剩余region的時候則將遍歷min負載的RS起始達到max。

     b.當還有RS負載 < min的時候從max負載RS中取得需要的region數(這些region正好能夠使未min的RS負載到min)放入regionsToMove隊列,在進行region分配,使得<min的RS達到min負載。


    本例中符合a這種場景,所以直接將剩下的1個region分配到min負載熱RS上:

   

RS6 7
RS6 8
RS5 7
RS5 7
RS3 8分配RS3 8
RS2 8
RS2 8
RS4 8
RS4 8
RS1 8
RS1 8





regionsToMove




3.7 由此負載均衡算法結束,他將產生一個region分配列表交由AssignmentManager類去進行region的

unasign和asign操作。


需要注意的時候在進行負載均衡操作不會對元數據表的region進行移動。

看了以上關于HBase負載均衡算法概述及詳解,如果大家還有什么地方需要了解的可以在億速云行業資訊里查找自己感興趣的或者找我們的專業技術工程師解答的,億速云技術工程師在行業內擁有十幾年的經驗了。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大邑县| 丹东市| 灵石县| 横峰县| 眉山市| 璧山县| 会同县| 宝兴县| 乃东县| 湖南省| 都昌县| 行唐县| 广西| 廉江市| 江山市| 左权县| 拉萨市| 武夷山市| 井陉县| 江津市| 木里| 寿阳县| 衡南县| 博乐市| 佳木斯市| 东莞市| 兰州市| 三明市| 水富县| 景宁| 浮山县| 沈阳市| 深州市| 东宁县| 庆元县| 铁力市| 博客| 宣威市| 营山县| 淮阳县| 武乡县|