亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

HBase1.x中Region的拆分是怎樣的

發布時間:2021-11-15 15:17:25 來源:億速云 閱讀:238 作者:柒染 欄目:大數據

這篇文章給大家介紹HBase1.x中Region的拆分是怎樣的,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

第一部門:Region拆分的實現

    client端向hbase寫數據,首先從zookeeper中獲取元數據存儲所在的regionserver,查找對應的region,在region中尋找列族,先向memstore中寫入數據,開始都會先寫入memstore(默認128MB)中(如果開啟了WAL日志,則先寫入WAL日志),隨著數據寫入增加,觸發溢寫操作(flush),溢寫到磁盤文件生成StoreFile。當存儲文件堆積時,RegionServer會將它們壓縮成更少、更大的文件。每次刷新或壓縮完成后,該區域中存儲的數據量將發生變化。RegionServer會根據配置的Region拆分策略,以確定是否提交拆分請求。

    拆分策略配置在hbase-site.xml中,HBase的默認拆分策略:IncreasingToUpperBoundRegionSplitPolicy:

<property>  <name>hbase.regionserver.region.split.policy</name>  <value>org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy</value></property>

    拆分Region是由Regionserver本地決定,但是會有很多參與者協調,Regionserver再進行拆分前后都會通知HMaster,更新.mea元數據表信息,并重排HDFS目錄結構和數據文件;Regionserver會保留執行狀態的日志,以便發生錯誤時進行任務回滾,下面是HBase官網Region拆分實現流程圖,來自RegionServers或Master的操作顯示為紅色,而來自客戶端的操作顯示為綠色,如圖所示:

    HBase1.x中Region的拆分是怎樣的

  1. RegionServer拆分第一步,RegionServer獲取表上的共享讀鎖定,以防止在拆分過程中修改架構。然后它在zookeeper下的/hbase/region-in-transition/region-name創建一個znode,并將znode的狀態設置為SPLITTING。

  2. Master開始了解znode,因為它有一個 region-in-transition的觀察器。

  3. RegionServer在HDFS中的parent region目錄下創建一個子目錄.splits。

  4. RegionServer關閉parent region并在其本地數據結構中將region標記為離線。拆分region現在處于離線狀態。這時來自parent region的客戶端請求將拋出NotServingRegionException。客戶端將重試一些備份。關閉Region被刷新。

  5. RegionServer在.splits目錄下為child regionA和B創建region目錄,并創建必要的數據結構。然后,它會拆分存儲文件,因為它會在parent region中為每個存儲文件創建兩個引用文件。這些引用文件將指向parent region的文件。

  6. RegionServer在HDFS中創建實際的region目錄,并為每個child  region移動引用文件。

  7. RegionServer向.META.表發送一個Put請求,并將.META.表中的parent region設置為離線,添加有關子child region的信息。這里,.META.中的子region將不會有單獨的條目。客戶端將看到parent region在掃描.META.時被拆分。但直到他們出現在.META.其中才會知道這些child region。此外,如果Put到.META.成功后,parent region將會有效地拆分。如果RegionServer在此RPC成功之前失敗,則Master和下一個Region Server打開該區域將清除有關region拆分的不干凈狀態。更新.META.之后,region分割將由Master進行前滾。

  8. RegionServer并行打開child reigon A和B.

  9. RegionServer將child reigon A和B添加到.META.,連同它承載區域的信息。拆分reigon 現在處于在線狀態。在此之后,客戶端可以發現新的reigon 并向他們發出請求。客戶端在本地緩存.META.條目,但是當他們向RegionServer或者.META.發出請求時,他們的緩存將失效,他們將從.META.中了解新的reigon 。

  10. RegionServer更新ZooKeeper中的znode /hbase/region-in-transition/region-name以表示狀態SPLIT,以便主服務器可以了解它。必要時,平衡器可以自由地將子reigon 重新分配給其他RegionServer。拆分事務現在已完成。

  11. 拆分之后,.META.和HDFS仍將包含對parent region的引用。在child region中進行壓縮重寫數據文件時,這些引用將被刪除。主服務器中的垃圾收集任務會定期檢查child region是否仍然引用parent region的文件。否則,parent region將被刪除。

第二部分:Region拆分方式

    主要有三種拆分方式:預拆分、自動拆分、手動強制拆分;

    1.預拆分,

    就是在新建表時進行region拆分,根據數據分布特點,提前預分區可減少rowkey熱點問題,另一方面減少region分裂導致短時不可用。

兩種方法預分區:

方法一:

hbase org.apache.hadoop.hbase.util.RegionSplitter table_spilt_test1  HexStringSplit -c 10 -f info1:info2:info3

表名:table_spilt_test1  

拆分的region的數量:10

列族:info1,info2,info3

 方法二:

指定每個預拆分的region的rowkey的開始值

create 'test_table', 'table_spilt_test1  ', SPLITS=> ['1001', '2001', '3001']

2.自動拆分:

    Region默認大小為10G,超過10G就自動進行拆分,Region大小通過下面面這個參數控制,生產環境如果預分區后,每個Region數據都比較大可改成20G 30G:

    <property>      <name>hbase.hregion.max.filesize</name>      <value>10737418240</value>    </property>

3.手動強制拆分:

    可在hbase shell根據提示,對某個region進行強制拆分

Examples:    split 'tableName'    split 'namespace:tableName'    split 'regionName' # format: 'tableName,startKey,id'    split 'tableName', 'splitKey'    split 'regionName', 'splitKey

第三部分:Region拆分觸發條件

    HBase表的拆分由以下公式決定:

Min (X^2 * "hbase.hregion.memstore.flush.size", "hbase.hregion.max.filesize")

說明:

1).X是該region中所包含的該表的region的數量;

2).hbase.hregion.memstore.flush.size默認值是128M;

3).hbase.hregion.max.filesize 默認值是10GB

    新建一張表并開始寫入數據時,當達到128M開始第一次拆分,之后依次是512MB, 1152MB, 2GB, 3.2GB, 4.6GB, 6.2GB時候開始進行拆分,當達到hbase.hregion.max.filesize的設定值時便會永遠在storefile 達到hbase.hregion.max.filesize進行拆分。

    需要特別注意的是filessize指的是store下的storefile的大小并不是整個region的大小,一個region可能包含很多個store,確切的說是該表有多少個family就有多少個store,當某個family下的storefile達到以上標準是就會拆分整個region而不管改region下的其他的store下的storefile是否已經達到觸發條件。

關于HBase1.x中Region的拆分是怎樣的就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

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

AI

渝中区| 惠东县| 青龙| 泌阳县| 淄博市| 肥城市| 吉水县| 历史| 冷水江市| 涡阳县| 佛坪县| 牙克石市| 宕昌县| 集贤县| 崇左市| 武威市| 松滋市| 竹北市| 高雄县| 崇信县| 甘肃省| 伊吾县| 开远市| 普定县| 衡阳县| 彭泽县| 土默特左旗| 开封市| 明水县| 页游| 玉林市| 宁津县| 永吉县| 晋城| 五指山市| 庆元县| 青铜峡市| 江西省| 本溪| 建平县| 沾化县|