HBase里面的HFile存储结构

1、本文章主要写的是关于HFile里面键值对的剖析

先来看看HFile的存储格式

      HFile的文件是不定长的,长度固定的只有两块,就是Traifer和File info。

Data块的是由Magic和键值对组成,Magic主要是生成一些随机数来防止数据的损坏,其他的就是键值对。

上面我们大概的讲了一下,键值对,下面这个张图描述的更清晰

                                                        键值对结构图

上面这张图里面包含的内容是:

Key Length :用4个字节(32位二进制)来描述我的Key的长度,里面4个字节的二进制位算出来的结果就表示我的Key占多少个字节

Value Length:用4个字节(32位二进制)来描述我的Value有多少字节,也是4个字节的二进制位算出来的结果就表示我的Value占多少个字节

Row Length:用2个字节(16位二进制)来描述我的RowKey有多少个字节,两个字节总共是16位,里面16位二进制算出来的值就是Rowkey的长度(多少字节)

Row:就是表示Rowkey

Column Family Length:用一个字节(8位二进制)来描述列族的长度,包含的二进制位算出来的值就是我的列族名的长度

Column Family:列族

Column Qualifiler:列族下的列族名,用Key Length算出来的总的二进制来减去(Row Length+Row+Column Family Length+Column Family+TimeStamp+ KeyType)

其中上图所给出的每个占的字节数都是固定的,只有需要我们算出来的字节数是不确定的

TimeStamp:用8个字节来表示时间戳

KeyType :用一个字节来描述键的类型

例如: 一道题给定的Key Length算出来的值为32,说明他的key的长度是总共有32个字节,

Row Length的2个字节(16位二进制)算出来的值为2,就说明RowKey的长度占2个字节,

Column  Family Length的1个字节(8位二进制)算出来的值为3,就说明Column Family占3个字节

Colum Qualifiler=Key Length的值-(Row Length+Row+Column Family Length+Column Family+TimeStamp+ KeyType)

Column Qualifiler的长度就为32-(2+2+1+3+8+1)=15

就说明在本题中Column Qualifiler所占的字节数为15个字节

以上只是举例!!!

 

 

posted @ 2019-11-07 14:23  dachui  阅读(521)  评论(1编辑  收藏  举报