Hbase---hfile

逻辑数据组织格式
Hbase---hfile_第1张图片

  • 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:是布隆过滤器的索引

物理数据结构图:

Hbase---hfile_第2张图片

数据的读取

Hbase---hfile_第3张图片

  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中读取的数据汇总取正确的数据返回给客户端

你可能感兴趣的:(hbase,大数据,hadoop)