HBase里面的HFile存储结构

Posted chui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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个字节

以上只是举例!!!

 

 

以上是关于HBase里面的HFile存储结构的主要内容,如果未能解决你的问题,请参考以下文章

HBASE中HFile结构-你真的知道Hbase怎么查数据?

Hbase存储实现

大数据之Hbase:HBase简介

HBase篇-你不知道的HFile

HBase篇-你不知道的HFile

HBase存储架构