HBase的keyvalue內部結構

1、創建一個表table1:

hbase> create 'table1','family1','column1'

查看hbase目錄,已生成table1目錄;

2、創建一個表table2:

hbase> create 'table2','family2','column2'

查看hbase目錄,已生成table2目錄;

3、插入一條記錄:

hbase> put 'table1','rowkey1','family1:column1','value1'

此時,hbase目錄沒有任何變化,因爲數據保存在內存中,還沒有寫入。

4、關閉hbase,內存中數據會flush到硬盤上。

bin/stop-hbase.sh

查看table1目錄下,生成了一個目錄family1,可以看到hbase的存儲首先是按列族分開存儲的;

family1目錄下,生成了一個二進制數據文件。

內容大致爲以下各個部分:

DATABLK*

rowkey1.family1column1<8字節時間戳>0x04value1

MAJOR_COMPACTION_KEY

MAX_SEQ_ID_KEY

hfile.AVG_KEY_LEN

hfile.AVG_VALUE_LEN

hfile.COMPARATOR

org.apache.hadoop.hbase.KeyValue$KeyComparaor

hfile.LASTKEY

row1key1.family1column1

IDXBLK

rowkey1.family1column1

TRABLK

 

可看出與HFile V1版本較吻合:

 

數據的KEY-VALUE部分,通過網上資料得知,結構如下:

名稱             字節數                  說明
--------------------------------------------------------------------
keyLength             4                     表示Key所佔的總字節數
valueLength           4                     表示Value所佔的總字節數

rowKeyLength          2                     表示rowKey所佔的字節數
rowKey                rowKeyLength          rowKey
columnFamilyLength    1                     表示列族名稱所佔的字節數
columnFamily          columnFamilyLength    列族名稱
columnName            columnNameLength      列名
timestamp             8                     時間戳
type                  1                     Key類型,比如是新增(Put),還是刪除(Delete)

value                 valueLength           列值
--------------------------------------------------------------------
                      表2.1

 

下面是比對情況,完全吻合:

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章