HBase的架构和原理(三)--HFile文件的描述

HFile文件描述

从HBase开始到现在,HFile经历了三个版本
HFile在V1的格式
在这里插入图片描述

  • V1的HFile由多个Data Block、可选的多个Meta Block、FileInfo、Data Index、Meta Index、Trailer组成
  • DataBlock由一个魔数(Magic)和一系列的KeyValue(Cell)组成,魔数是一个随机的数字,用于表示这是一个Data Block类型。每个KeyValue对是一个简单的byte数组,且这个byte数组有固定结构。默认值是64KB
    在这里插入图片描述
    KeyLength:Key占用长度
    ValueLength:Value占用长度
    Key-ROWLength:表示RowKey长度
    Key-Row:RowKey的值
    Key-ColumnFamilyLength:列族占用长度
    Key-ColumnQualifier:
    Key-TImeStamp:
    Key-KeyType:Key的操作类型Put/Delete
    Value:Cell中存储的二进制数据
  • Meta块是可选的,FileInfo是固定长度的块,它纪录了文件的一些Meta信息,例如:AVG_KEY_LEN, AVG_VALUE_LEN, LAST_KEY, COMPARATOR, MAX_SEQ_ID_KEY等。
  • Data Index和Meta Index纪录了每个Data块和Meta块的起始点、未压缩时大小、起始RowKey
  • Trailer纪录了FileInfo、Data Index、Meta Index块的起始位置,Data Index和Meta Index索引的数量等。

HFile的V2格式

在0.92版本中引入,目的是提升启动速度、减少启动时间,同时增加了延迟读的功能。这个版本增加了布隆过滤器Bloom Block
在这里插入图片描述
布隆过滤器:

  • 布隆过滤器可以用于检索一个元素是否在一个集合中(只能确定元素的不存在,不能确定元素的存在)。一个Bloom Filter基于一个m位的位向量(b1,…bm),这些位向量的初始值为0。另外,还有一系列的hash函数(h1,…hk)(默认是3个哈希函数),这些hash函数的值域属于1~m。下图是一个bloom filter插入x,y,z并判断某个值w是否在该数据集的示意图:
    在这里插入图片描述
  • RowKey的值为x经过三次HASH计算后,得到三个不同的HASH值,位向量中对应三个HASH值的位置标记为1.同理再计算y和z。
  • 对于RowKey的值为w的检索,经过三次计算后,发现有一个位向量位置不为1,说明rowkey-w不在这个HFile集合中。若三个位向量位置都为1,说明rowkey存在这个HFile文件中。然后根据DataIndex 和 Trailer中块的起始为位置和数量,定位出RowKey的位置
  • 由于HFile不止一个文件的情况,所以一个rowkey可能存在多个HFile文件中。这涉及到HFile的合并问题

HFile的V3格式

  • HFile的V3版本在0.98之后提出,在V2格式后增加了标签部分。其他保持不变.所以对V2保持了兼容性。
  • HFile V3主要的提高是压缩比和,通过对于key和value应用不同的压缩算法,可以获得更好对应key和value的位置信息,减少磁盘的读写,提高I/O速度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值