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存储结构的主要内容,如果未能解决你的问题,请参考以下文章