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

 

下面是比对情况,完全吻合:

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值