最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何進(jìn)行關(guān)于HFile的存儲結(jié)構(gòu)梳理以及快速定位rowkey

這篇文章給大家介紹如何進(jìn)行關(guān)于HFile的存儲結(jié)構(gòu)梳理以及快速定位rowkey,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

發(fā)展壯大離不開廣大客戶長期以來的信賴與支持,我們將始終秉承“誠信為本、服務(wù)至上”的服務(wù)理念,堅(jiān)持“二合一”的優(yōu)良服務(wù)模式,真誠服務(wù)每家企業(yè),認(rèn)真做好每個(gè)細(xì)節(jié),不斷完善自我,成就企業(yè),實(shí)現(xiàn)共贏。行業(yè)涉及成都柴油發(fā)電機(jī)等,在成都網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)、WAP手機(jī)網(wǎng)站、VI設(shè)計(jì)、軟件開發(fā)等項(xiàng)目上具有豐富的設(shè)計(jì)經(jīng)驗(yàn)。

一、HFile結(jié)構(gòu)介紹

如何進(jìn)行關(guān)于HFile的存儲結(jié)構(gòu)梳理以及快速定位rowkey

為了支持?jǐn)?shù)據(jù)的隨機(jī)查詢,HFile結(jié)構(gòu)分為六個(gè)部分:

1、數(shù)據(jù)塊–保存表中的數(shù)據(jù),每一個(gè)數(shù)據(jù)塊由塊頭和一些keyValue(record)組成,key的值是嚴(yán)格按照順序存儲的。塊大小默認(rèn)為64K(由建表時(shí)創(chuàng)建cf時(shí)指定或者HColumnDescriptor.setBlockSize(size)),這一部分可以壓縮存儲。在查詢數(shù)據(jù)時(shí),是以數(shù)據(jù)塊為單位從硬盤load到內(nèi)存。查找數(shù)據(jù)時(shí),是順序的遍歷該塊中的keyValue對。

2、元數(shù)據(jù)塊 (可選的)–保存用戶自定義的kv對,可以被壓縮。比如booleam filter就是存在元數(shù)據(jù)塊中的,該塊只保留value值,key值保存在元數(shù)據(jù)索引塊中。每一個(gè)元數(shù)據(jù)塊由塊頭和value值組成??梢钥焖倥袛鄈ey是都在這個(gè)HFile中。

3、File Info–Hfile的元信息,不被壓縮,用戶也可以在這一部分添加自己的元信息。

4、數(shù)據(jù)索引塊 –Data Block的索引,每條索引的key是被索引的block的第一條記錄的key(格式為:頭信息,數(shù)據(jù)塊offset數(shù)據(jù)塊大小塊第一個(gè)記錄的key,........)。

     這個(gè)參數(shù)控制hfile中索引塊的大小,默認(rèn)值是128K,也就是說當(dāng)索引的信息超過128K后,就會(huì)新分配一個(gè)索引塊。hbase對于hfile的訪問都是通過索引塊來實(shí)現(xiàn)的,通過索引來定位所要查的數(shù)據(jù)到底在哪個(gè)數(shù)據(jù)塊里面。hfile中的索引塊可以分成三中,根索引塊,枝索引塊,葉索引塊。根索引塊是一定會(huì)有的,但是如果hfile中的數(shù)據(jù)塊比較少的話,枝索引塊和葉索引塊就可能不存在。當(dāng)單個(gè)的索引塊中沒有辦法存儲全部的數(shù)據(jù)塊的信息時(shí),索引塊就會(huì)分裂,會(huì)產(chǎn)生葉索引塊和根索引塊,根索引塊是對葉索引塊的索引,如果數(shù)據(jù)塊繼續(xù)增加就會(huì)產(chǎn)生枝索引塊,整個(gè)索引結(jié)果的層次也會(huì)加深。

      想象一下,如果整個(gè)hfile中只有根索引塊,那么訪問真正的數(shù)據(jù)的路徑是,首先查根索引塊定位數(shù)據(jù)塊的位置,然后去查詢數(shù)據(jù)塊找到需要的數(shù)據(jù)。整個(gè)過程涉及到一次對索引塊的掃描和一次對數(shù)據(jù)塊的掃描。

      如果hfile總塊比較多,整個(gè)索引結(jié)構(gòu)有2次的話,訪問的路徑是,首先訪問根索引塊定位葉索引塊,訪問葉索引塊定位數(shù)據(jù)塊,整個(gè)過程涉及到兩次對索引塊的掃描和一次對數(shù)據(jù)塊的掃描。

     整個(gè)索引樹的深度越深,那么訪問過程就越長,相應(yīng)的掃描的時(shí)間也會(huì)越長。

      那是不是把hfile.index.block.max.size設(shè)置得越大越好呢?也不是的,如果索引塊太大了,對索引塊本身的掃描時(shí)間就會(huì)顯著的增加的。

       根索引塊一定是被緩存到內(nèi)存中的,這個(gè)是在hfile打開的時(shí)候就緩存的.

      想象一下,如果整個(gè)hfile中只有根索引塊,那么訪問真正的數(shù)據(jù)的路徑是,首先查根索引塊定位數(shù)據(jù)塊的位置,然后去查詢數(shù)

    據(jù)塊找到需要的數(shù)據(jù)。整個(gè)過程涉及到一次對索引塊的掃描和一次對數(shù)據(jù)塊的掃描。 

HFile的數(shù)據(jù)塊,元數(shù)據(jù)塊通常采用壓縮方式存儲,壓縮之后可以大大減少網(wǎng)絡(luò)IO和磁盤IO,隨之而來的開銷當(dāng)然是需要花費(fèi)cpu進(jìn)行壓縮和解壓縮

HFile Data Block Index索引層級的問題,

hfile.data.block.size(默認(rèn)64K):同樣的數(shù)據(jù)量,數(shù)據(jù)塊越小,數(shù)據(jù)塊越多,索引塊相應(yīng)的也就越多,索引層級就越深

hfile.index.block.max.size(默認(rèn)128K):控制索引塊的大小,索引塊越小,需要的索引塊越多,索引的層級越深

table key length:越大,索引層級越深

hfile中存儲的數(shù)據(jù)量:越大,索引層級越深

5、元數(shù)據(jù)索引塊 (可選的)–Meta Block的索引。

6、Trailer–這一段是定長的。保存了每一段(由一種類型的塊組成)的偏移量,讀取一個(gè)HFile時(shí),會(huì)首先 讀取Trailer,Trailer保存了每個(gè)段的起始位置(段的Magic Number用來做安全check),然后,數(shù)據(jù)索引會(huì)被讀取到內(nèi)存中,這樣,當(dāng)檢索某個(gè)key時(shí),不需要掃描整個(gè)HFile,而只需從內(nèi)存中找到key所在的block,通過一次磁盤io將整個(gè)block讀取到內(nèi)存中,再找到需要的key。數(shù)據(jù)索引塊采用LRU機(jī)制淘汰。

二、怎樣從一系列的HFile中找到某個(gè)rowkey?

     如果創(chuàng)建表時(shí),指定了booleamFilter,那么就根據(jù)booleamFilter快速的判斷該rowkey是否在這個(gè)HFile中。

     如果沒有定義booleamFilter,hbase在查找先會(huì)根據(jù)時(shí)間戳或者查詢列的信息來進(jìn)行過濾,過濾掉那些肯定不含有所需數(shù)據(jù)的storefile或者memstore,盡量把我們的查詢目標(biāo)范圍縮小。

     盡管縮小了,但仍可能會(huì)有多個(gè)文件需要掃描的。storefile的內(nèi)部有序的,但是各個(gè)storefile之間并不是有序的。storefile的rowkey的范圍很有可能有交叉。所以查詢數(shù)據(jù)的過程也不可能是對storefile的順序查找。
hbase會(huì)首先查看每個(gè)storefile的最小的rowkey,然后按照從小到大的順序進(jìn)行排序,結(jié)果放到一個(gè)隊(duì)列中,排序的算法就是按照hbase的三維順序,按照rowkey,column,ts進(jìn)行排序,rowkey和column是升序,而ts是降序。
實(shí)際上并不是所有滿足時(shí)間戳和列過濾的文件都會(huì)加到這個(gè)隊(duì)列中,hbase會(huì)首先對各個(gè)storefile中的數(shù)據(jù)進(jìn)行探測,只會(huì)掃描掃描那些存在比當(dāng)前查詢的rowkey大的記錄的storefile。
    下面開始查詢數(shù)據(jù),整個(gè)過程用到了類似歸并排序的算法,首先通過poll取出隊(duì)列的頭storefile,會(huì)從storefile讀取一條記錄返回;接下來呢,該storefile的下條記錄并不一定是查詢結(jié)果的下一條記錄,因?yàn)殛?duì)列的比較順序是比較的每個(gè)storefile的第一條符合要求的rowkey。所以,hbase會(huì)繼續(xù)從隊(duì)列中剩下的storefile取第一條記錄,把該記錄與頭storefile的第二條記錄做比較,如果前者大,那么返回頭storefile的第二條記錄;如果后者大,則會(huì)把頭storefile放回隊(duì)列重新排序,在重新取隊(duì)列的頭storefile。然后重復(fù)上面的整個(gè)過程,直到找到key所在的HFile。范圍縮小到該HFile后,就根據(jù)上面介紹的索引查找定位到塊,快速的找到對應(yīng)的記錄。

關(guān)于如何進(jìn)行關(guān)于HFile的存儲結(jié)構(gòu)梳理以及快速定位rowkey就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。


分享標(biāo)題:如何進(jìn)行關(guān)于HFile的存儲結(jié)構(gòu)梳理以及快速定位rowkey
鏈接地址:http://fisionsoft.com.cn/article/jhhjgi.html