HBase的儲存格式是什麼?

chenfeng發表於2015-12-21

HBase中的所有資料檔案都儲存在Hadoop HDFS檔案系統上,主要包括上述提出的兩種檔案型別:

1. HFile, HBaseKeyValue資料的儲存格式,HFileHadoop的二進位制格式檔案,實際上StoreFile就是對HFile做了輕量級包裝,即StoreFile底層就是HFile

2. HLog File,HBaseWALWrite Ahead Log) 的儲存格式,物理上是HadoopSequence File

HFile

下圖是HFile的儲存格式:


首先HFile檔案是不定長的,長度固定的只有其中的兩塊:TrailerFileInfo。正如圖中所示的,Trailer中有指標指向其他資料塊的起始點。File Info中記錄了檔案的一些Meta資訊,例如:AVG_KEY_LEN, AVG_VALUE_LEN, LAST_KEY, COMPARATOR, MAX_SEQ_ID_KEY等。Data IndexMeta Index塊記錄了每個Data塊和Meta塊的起始點。

Data Block是HBase I/O的基本單元,為了提高效率,HRegionServer中有基於LRUBlock Cache機制。每個Data塊的大小可以在建立一個Table的時候通過引數指定,大號的Block有利於順序Scan,小號Block利於隨機查詢。每個Data塊除了開頭的Magic以外就是一個個KeyValue對拼接而成, Magic內容就是一些隨機數字,目的是防止資料損壞。後面會詳細介紹每個KeyValue對的內部構造。

HFile裡面的每個KeyValue對就是一個簡單的byte陣列。但是這個byte陣列裡麵包含了很多項,並且有固定的結構。我們來看看裡面的具體結構:

開始是兩個固定長度的數值,分別表示Key的長度和Value的長度。緊接著是Key,開始是固定長度的數值,表示RowKey的長度,緊接著是RowKey,然後是固定長度的數值,表示Family的長度,然後是Family,接著是Qualifier,然後是兩個固定長度的數值,表示Time StampKey TypePut/Delete)。Value部分沒有這麼複雜的結構,就是純粹的二進位制資料了。

HLogFile

上圖中示意了HLog檔案的結構,其實HLog檔案就是一個普通的Hadoop Sequence FileSequence File KeyHLogKey物件,HLogKey中記錄了寫入資料的歸屬資訊,除了tableregion名字外,同時還包括 sequence numbertimestamptimestamp是“寫入時間”,sequence number的起始值為0,或者是最近一次存入檔案系統中sequence number

HLog Sequece File的ValueHBaseKeyValue物件,即對應HFile中的KeyValue

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-1876022/,如需轉載,請註明出處,否則將追究法律責任。

相關文章