6-HFile

来源:互联网 发布:上海华腾软件怎么样 编辑:程序博客网 时间:2024/05/01 07:08

HFile 格式:

实际的存储文件功能是由 HFile 类实现的, 他被专门创建以达到一个目的 :有效的存储 HBase 的数据。 它们基于 Hadoop 的 TFile 类, 并模仿 -Google 的 BigTable 架构使用的 SSTable 格式。

image

这些文件是可变长度的, 唯一固定的块是 File Info 块 和 Trailer 块。 Trailer 有指向其他块的指针。 它是在持久化数据到文件结束时写入的, 写入后即确定其称为不可变的数据存储文件。 Index块记录 Data 和 Meta 块的偏移量。 Data 和 Meta 块实际上是可选的, 但是考虑到 HBase 如何使用数据文件, 在存储文件中用户几乎总能找到 Data 块。

块大小是由 HColumnDescriptor 配置的, 而该配置可以在创建表时由用户指定或使用比较合理的默认值 。

image

每个块都包含一个 magic 头部和一定数量的序列化的 keyvalue实例。如果用户没有使用压缩算法, 每个块大小和配置的块大小差不多。
在实际情况中, 大部分块会比较大。

当使用压缩算法时, 用户对与块大小的控制能力更弱。

HBase 不知道用户是否选择了压缩算法: 他将按照块大小的限制来写原始数据, 并尽量让原始数据的大小与这个限制接近。如果用户启用了压缩, 则保存到磁盘上的数据将更少。 这意味着最终的存储文件由相同数量的块组成,但是邮局每个块都更小,所以总大小也更小。

KeyValue格式:

本质上,HFile中的每个 KeyValue 都是一个低级的字节数组, 他允许零复制访问数据。

image

0 0