Hbase---hfile

文章详细阐述了HBase中HFile的逻辑数据组织格式,包括Scannedblocksection、Non-scannedblocksection、Load-on-open-section和Trailer等部分,以及数据读取过程,涉及memstore、BloomFilter和RegionServer的角色。在读取数据时,首先通过Zookeeper找到RegionServer,然后从内存或HFile中读取RowKey对应的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

逻辑数据组织格式
在这里插入图片描述

  • Scanned block section:表示顺序扫描HFile时(包含所有需要被读取的数据)所有的数据块将会被读取,包括Leaf Index Block和Bloom Block;
  • Non-scanned block section:HFile顺序扫描的时候该部分数据不会被读取,主要包括Meta Block和Intermediate Level Data Index Blocks两部分;
  • Load-on-open-section:这部分数据在HBase的region server启动时,需要加载到内存中。包括FileInfo、Bloom filter block、data block index和meta block index等各种索引的元数据信息;
  • Trailer:这部分主要记录了HFile的基本信息、各个部分的偏移值和寻址信息。
  • Data Block:主要存储用户的key,value信息
  • Meta Block:记录布隆过滤器的信息
  • Root Data Index:DataBlock的根索引以及MetaBlock和Bloom Filter的索引
  • Intermediate Level Index:DataBlock的第二层索引
  • Leaf Level Index:DataBlock的第三层索引,即索引数的叶子节点
  • Fileds for midKey:这部分数据是Optional的,保存了一些midKey信息,可以快速地定位到midKey,常常在HFileSplit的时候非常有用
  • MetaIndex:即meta的索引数据,和data index类似,但是meta存放的是BloomFilter的信息
  • FileInfo:保存了一些文件的信息,如lastKey,avgKeylen,avgValueLen等等
  • Bloom filter metadata:是布隆过滤器的索引

物理数据结构图:

在这里插入图片描述

数据的读取

请添加图片描述

  1. Client访问zookeeper,获取hbase:meta所在RegionServer的节点信息
  2. Client访问hbase:meta所在的RegionServer,获取hbase:meta记录的元数据后先加载到内存中,然后再从内存中根据需要查询的RowKey查询出RowKey所在的Region的相关信息(Region所在RegionServer)
  3. Client访问RowKey所在Region对应的RegionServer,发起数据读取请求
  4. 读取memstore中的数据,看是否有key对应的value的值
  5. 不管memstore中有没有值,都需要去读取Hfile中的数据(再读取Hfile中首先通过索引定位到data block)
  6. 判断cache block中中是否已经加载过需要从文件中读取的bloom block和data block,如果加载过了,就直接读取cache block中的数据,如果没有,就读取文件中的block数据
  7. 将memstore和Hfile中读取的数据汇总取正确的数据返回给客户端
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值