這篇文章將為大家詳細(xì)講解有關(guān)HBase文件索引有什么用,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
成都創(chuàng)新互聯(lián)為企業(yè)級(jí)客戶提高一站式互聯(lián)網(wǎng)+設(shè)計(jì)服務(wù),主要包括網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)、重慶App定制開(kāi)發(fā)、重慶小程序開(kāi)發(fā)、宣傳片制作、LOGO設(shè)計(jì)等,幫助客戶快速提升營(yíng)銷能力和企業(yè)形象,創(chuàng)新互聯(lián)各部門都有經(jīng)驗(yàn)豐富的經(jīng)驗(yàn),可以確保每一個(gè)作品的質(zhì)量和創(chuàng)作周期,同時(shí)每年都有很多新員工加入,為我們帶來(lái)大量新的創(chuàng)意。
HBase總體結(jié)構(gòu)圖

部分術(shù)語(yǔ)簡(jiǎn)介
HMaster | 負(fù)責(zé)管理HRegionServer的接入,負(fù)責(zé)Region的管理分配,負(fù)責(zé)管理Table的創(chuàng)建于刪除修改等操作。 |
HRegion | 每個(gè)Table可以分裂成多個(gè)Region,每個(gè)Region為Table中的一個(gè)行區(qū)間。例如RowKey為0-100的Table,可以分裂成0-50以及51-100這兩個(gè)Region。 |
HRegionServer | 每個(gè)HRegionServer管理著多個(gè)Region,負(fù)責(zé)對(duì)Region的讀寫操作等 |
HLog | 每個(gè)HRegionServer都有一個(gè)HLog用來(lái)記錄所有操作,主要用于數(shù)據(jù)損壞時(shí)修復(fù)數(shù)據(jù)。物理上是Hadoop的Sequence File |
Store | 每個(gè)HRegion下管理著多個(gè)Store,每個(gè)Store對(duì)應(yīng)Table中的一個(gè)Family進(jìn)行數(shù)據(jù)管理 |
StoreFile | Family的持久化數(shù)據(jù)類 |
MemStore | 每個(gè)Store中都有一個(gè)MemStore,用來(lái)緩存對(duì)Family的操作,當(dāng)MemStore緩存到一點(diǎn)大小之后,將會(huì)轉(zhuǎn)換成StoreFile Flush到HDFS中 |
HFile | StoreFile只是HFile的輕量級(jí)封裝,HDFS中保存的Table數(shù)據(jù)文件都是HFile格式 |
索引的總體結(jié)構(gòu)
在HBase中,從整個(gè)大框架上來(lái)看,索引的分布分為以下幾層。
A、在Zookeeper中,根據(jù)HMaster的啟動(dòng),保存著分配了-ROOT- Table的RegionServer的地址。
B、在-ROOT- Table中,保存著.META Table split成多個(gè)region后所分布在的RegionServers的信息。
C、在.META中,保存著各個(gè)Table的regions所分布的RegionServers地址。
D、-ROOT-只存在一個(gè)Region,而.META是可以split成多個(gè)的。
-ROOT- 與 META的表結(jié)構(gòu)是一樣的,如下
Rowkey | info | ||
Regioninfo | server | serverstartcode | |
TableName StartKey TimeStamp | Startkey Endkey family list | address | 加載當(dāng)前分片的啟動(dòng)時(shí)間 |
-ROOT-示例:
假設(shè).META分裂成了兩個(gè)Region,分布在了兩個(gè)RegionServer上
Rowkey | Info | ||
Regioninfo | Server | serverstarcode | |
.META Table1 pk0 12345278 | RegionServer1 | ||
.META Table1 pk1000 123451278 | RegionServer2 | ||
.META Table2 pk0 123431278 | RegionServer1 | ||
.META Table2 pk1000 123457278 | RegionServer2 |

.META的示例:
Rowkey | Info | ||
Regioninfo | Server | serverstarcode | |
Table1 pk0 12345278 | RegionServer1 | ||
Table1 pk1000 123451278 | RegionServer2 | ||
Table1 pk2000 12345878 | RegionServer3 | ||
…… | …… | …… | …… |
Table2 pk0 12345278 | RegionServer1 | ||
Table2 pk1000 12345478 | RegionServer2 | ||
Table2 pk2000 12345778 | RegionServer3 |

RegionServer的定位過(guò)程
當(dāng)Client要對(duì)一個(gè)Table中的數(shù)據(jù)進(jìn)行put、get、delete操作時(shí),提供了TableName以及RowKey時(shí),Client從Zookeeper中獲取到-ROOT-的RegionServer信息,然后從-ROOT-中根據(jù)RowKey獲取到.META的ReginoServer,從而再定位到RowKey所在的RegionServer中。由于Client在交互過(guò)程中會(huì)緩存-ROOT-、.META、Region等位置信息,在最優(yōu)情況下只需要查詢一次位置,在最壞情況下是需要6次[ 需要從Table Region遞歸回去查詢 ]。
HFile的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu):

如上圖,HFile的文件長(zhǎng)度為變長(zhǎng),其中的File Info以及Trailer是定長(zhǎng),Trailer中有指向File Info\Data Index\Meta Index的起始點(diǎn)。Index數(shù)據(jù)塊記錄著Data\Meta塊的起始點(diǎn)。在Data數(shù)據(jù)塊中,Magic是用來(lái)辨別數(shù)據(jù)是否損壞的,每個(gè)Data塊中保存著多個(gè)KeyValue信息。

上圖為KeyValue的數(shù)據(jù)結(jié)構(gòu)

上圖也為HFile的數(shù)據(jù)結(jié)構(gòu)
整個(gè)的region文件路徑就是如下形式:
/<hbase-root-dir>/<tablename>/<encoded-regionname>/<column-family>/<filename>
每個(gè)column-family下的一個(gè)個(gè)HFile數(shù)據(jù)文件,文件的名字是基于Java內(nèi)建的隨機(jī)數(shù)生成器產(chǎn)生的任意數(shù)字。代碼會(huì)保證不會(huì)產(chǎn)生碰撞,比如當(dāng)發(fā)現(xiàn)新生成的數(shù)字已經(jīng)存在時(shí),它會(huì)繼續(xù)尋找一個(gè)未被使用的數(shù)字。
Region的操作
當(dāng)定位到RowKey所在的RegionServer之后,就能根據(jù)RegionName來(lái)獲取到相對(duì)應(yīng)的Region,RegionName來(lái)自.META中保存的RowKey。
Get:
1、HRegion.get接口會(huì)先對(duì)Family做檢測(cè),保證Get中的Family與Table中的保持一致。
2、根據(jù)Family的信息,找出對(duì)應(yīng)的Store,并獲取到Store中的StoreScanner實(shí)例,并將其添加到一個(gè)scanners隊(duì)列中。
3、在StoreScanner中,又有MemstoreScanner和HFileScanner兩個(gè)實(shí)例,分別用來(lái)遍歷MemStore與HFile中的keyValue值的。
4、因?yàn)榇嬖诙鄠€(gè)HFile,因此會(huì)對(duì)HFileScanner會(huì)做一次過(guò)濾選擇,通過(guò)HFile的DataIndex將position指向StarRow,DataIndex中是保存有當(dāng)前DataBlock的firstKey信息的,如果KeyValue不在當(dāng)前HFile中,將關(guān)閉HFileScanner的查找。
5、需要注意的是,在RegionServer啟動(dòng)之后,HFile的DataIndex是保存在內(nèi)存中的。
6、當(dāng)StoreScanner查詢相應(yīng)的keyValue時(shí),先利用MemstoreScanner從MemStore中查找,如果沒(méi)有相應(yīng)數(shù)據(jù),再利用HFileScanner從HFile的DataBlock中遍歷,DataIndex能快速定位Block所在的位置。
7、由于HFile已經(jīng)被持久化到HDFS中,對(duì)HFile的每次IO讀取,都只是讀取一個(gè)Data數(shù)據(jù)塊的大小,Data的位置可以根據(jù)HFile的DataIndex信息來(lái)查詢。
8、如果有配置使用Bloom Filters,將能快速確認(rèn)一個(gè)RowKey或者value是否在一個(gè)HFile中。
關(guān)于“HBase文件索引有什么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
網(wǎng)站標(biāo)題:HBase文件索引有什么用
轉(zhuǎn)載源于:http://www.chinadenli.net/article10/peeedo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、網(wǎng)站制作、面包屑導(dǎo)航、建站公司、全網(wǎng)營(yíng)銷推廣、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)