数据结构域算法设计-hfile文件详解

数据结构域算法设计-hfile文件详解

ID:16352835

大小:126.51 KB

页数:9页

时间:2018-08-09

数据结构域算法设计-hfile文件详解_第1页
数据结构域算法设计-hfile文件详解_第2页
数据结构域算法设计-hfile文件详解_第3页
数据结构域算法设计-hfile文件详解_第4页
数据结构域算法设计-hfile文件详解_第5页
资源描述:

《数据结构域算法设计-hfile文件详解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、TableofContentsHFile存储格式Block块结构HFile存储格式HFile是参照谷歌的SSTable存储格式进行设计的,所有的数据记录都是通过它来完成持久化,其内部主要采用分块的方式进行存储,如图所示:每个HFile内部包含多种不同类型的块结构,这些块结构从逻辑上来讲可归并为两类,分别用于数据存储和数据索引(简称数据块和索引块),其中数据块包括:(1)DATA_BLOCK:存储表格数据(2)BLOOM_CHUNK:存储布隆过滤器的位数组信息(3)META_BLOCK:存储元数据信息(4

2、)FILE_INFO:存储HFile文件信息索引块包括:·表格数据索引块(ROOT_INDEX、INTERMEDIATE_INDEX、LEAF_INDEX)在早期的HFile版本中(version-1),表格数据是采用单层索引结构进行存储的,这样当数据量上升到一定规模时,索引数据便会消耗大量内存,导致的结果是Region加载效率低下(Aregionisnotconsideredopeneduntilallofitsblockindexdataisloaded)。因此在version-2版本中,索引数据采

3、用多层结构进行存储,加载HFile时只将根索引(ROOT_INDEX)数据载入内存,中间索引(INTERMEDIATE_INDEX)和叶子索引(LEAF_INDEX)在读取数据时按需加载,从而提高了Region的加载效率。·元数据索引块(META_INDEX)新版本的元数据索引依然是单层结构,通过它来获取元数据块信息。·布隆索引信息块(BLOOM_META)通过索引信息来遍历要检索的数据记录是通过哪一个BLOOM_CHUNK进行映射处理的。从存储的角度来看,这些数据块会划分到不同的区域进行存储。1.Tr

4、ailer区域该区域位于文件的最底部,HFile主要通过它来实现相关数据的定位功能,因此需要最先加载,其数据内容是采用protobuf进行序列化处理的,protocol声明如下:messageFileTrailerProto{optionaluint64file_info_offset=1;optionaluint64load_on_open_data_offset=2;optionaluint64uncompressed_data_index_size=3;optionaluint64total_un

5、compressed_bytes=4;optionaluint32data_index_count=5;optionaluint32meta_index_count=6;optionaluint64entry_count=7;optionaluint32num_data_index_levels=8;optionaluint64first_data_block_offset=9;optionaluint64last_data_block_offset=10;optionalstringcomparato

6、r_class_name=11;optionaluint32compression_codec=12;optionalbytesencryption_key=13;}FileInfo数据块在HFile中的偏移量信息;Load-on-open区域在HFile中的偏移量信息;所有表格索引块在压缩前的总大小;所有表格数据块在压缩前的总大小;根索引块中包含的索引实体个数;元数据索引块中包含的索引实体个数;文件所包含的KeyValue总数;表格数据的索引层级数;第一个表格数据块在HFile中的偏移量信息;最后一个

7、表格数据块在HFile中的偏移量信息;在代码层面上Trailer是通过FixedFileTrailer类来封装的,可通过其readFromStream方法用来读取指定HFile的Trailer信息。1.Load-on-open区域HFile被加载之后,位于该区域中的数据将会被载入内存,该区域的起始位置通过Trailer来定位(通过其load_on_open_data_offset属性)。从该位置起依次保存的数据信息为:根索引快、元数据索引块、文件信息块以及布隆索引块。2.Scanned-Block区域在

8、执行HFile顺序扫描时,位于该区域中的所有块信息都需要被加载,包括:表格数据块、布隆数据块和叶子索引块(后两者称之为InlineBlock)。3.Non-Scanned-Block区域在执行HFile顺序扫描时,位于该区域中的存储块可不被加载,包括:元数据块和中间索引块。Block块结构每个Block块是由3部分信息组成的,分别是:header信息、data信息以及用于data校验的checksum信息。不同类型的block只是在data

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。