真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

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

我們提供的服務(wù)有:網(wǎng)站建設(shè)、成都網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、二道江ssl等。為近1000家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的二道江網(wǎng)站制作公司

第一部門:Region拆分的實(shí)現(xiàn)

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

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

  hbase.regionserver.region.split.policy  org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy

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

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

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

  2. Master開始了解znode,因?yàn)樗幸粋€ region-in-transition的觀察器。

  3. RegionServer在HDFS中的parent region目錄下創(chuàng)建一個子目錄.splits。

  4. RegionServer關(guān)閉parent region并在其本地?cái)?shù)據(jù)結(jié)構(gòu)中將region標(biāo)記為離線。拆分region現(xiàn)在處于離線狀態(tài)。這時來自parent region的客戶端請求將拋出NotServingRegionException??蛻舳藢⒅卦囈恍﹤浞?。關(guān)閉Region被刷新。

  5. RegionServer在.splits目錄下為child regionA和B創(chuàng)建region目錄,并創(chuàng)建必要的數(shù)據(jù)結(jié)構(gòu)。然后,它會拆分存儲文件,因?yàn)樗鼤趐arent region中為每個存儲文件創(chuàng)建兩個引用文件。這些引用文件將指向parent region的文件。

  6. RegionServer在HDFS中創(chuàng)建實(shí)際的region目錄,并為每個child  region移動引用文件。

  7. RegionServer向.META.表發(fā)送一個Put請求,并將.META.表中的parent region設(shè)置為離線,添加有關(guān)子child region的信息。這里,.META.中的子region將不會有單獨(dú)的條目??蛻舳藢⒖吹絧arent region在掃描.META.時被拆分。但直到他們出現(xiàn)在.META.其中才會知道這些child region。此外,如果Put到.META.成功后,parent region將會有效地拆分。如果RegionServer在此RPC成功之前失敗,則Master和下一個Region Server打開該區(qū)域?qū)⑶宄嘘P(guān)region拆分的不干凈狀態(tài)。更新.META.之后,region分割將由Master進(jìn)行前滾。

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

  9. RegionServer將child reigon A和B添加到.META.,連同它承載區(qū)域的信息。拆分reigon 現(xiàn)在處于在線狀態(tài)。在此之后,客戶端可以發(fā)現(xiàn)新的reigon 并向他們發(fā)出請求??蛻舳嗽诒镜鼐彺?META.條目,但是當(dāng)他們向RegionServer或者.META.發(fā)出請求時,他們的緩存將失效,他們將從.META.中了解新的reigon 。

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

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

第二部分:Region拆分方式

    主要有三種拆分方式:預(yù)拆分、自動拆分、手動強(qiáng)制拆分;

    1.預(yù)拆分,

    就是在新建表時進(jìn)行region拆分,根據(jù)數(shù)據(jù)分布特點(diǎn),提前預(yù)分區(qū)可減少rowkey熱點(diǎn)問題,另一方面減少region分裂導(dǎo)致短時不可用。

兩種方法預(yù)分區(qū):

方法一:

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

表名:table_spilt_test1  

拆分的region的數(shù)量:10

列族:info1,info2,info3

 方法二:

指定每個預(yù)拆分的region的rowkey的開始值

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

2.自動拆分:

    Region默認(rèn)大小為10G,超過10G就自動進(jìn)行拆分,Region大小通過下面面這個參數(shù)控制,生產(chǎn)環(huán)境如果預(yù)分區(qū)后,每個Region數(shù)據(jù)都比較大可改成20G 30G:

          hbase.hregion.max.filesize      10737418240    

3.手動強(qiáng)制拆分:

    可在hbase shell根據(jù)提示,對某個region進(jìn)行強(qiáng)制拆分

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

第三部分:Region拆分觸發(fā)條件

    HBase表的拆分由以下公式?jīng)Q定:

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

說明:

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

2).hbase.hregion.memstore.flush.size默認(rèn)值是128M;

3).hbase.hregion.max.filesize 默認(rèn)值是10GB

    新建一張表并開始寫入數(shù)據(jù)時,當(dāng)達(dá)到128M開始第一次拆分,之后依次是512MB, 1152MB, 2GB, 3.2GB, 4.6GB, 6.2GB時候開始進(jìn)行拆分,當(dāng)達(dá)到hbase.hregion.max.filesize的設(shè)定值時便會永遠(yuǎn)在storefile 達(dá)到hbase.hregion.max.filesize進(jìn)行拆分。

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

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


網(wǎng)站欄目:HBase1.x中Region的拆分是怎樣的
網(wǎng)頁鏈接:http://weahome.cn/article/gejodi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部