MST

星途 面试题库

面试题:HBase RegionServer内部的Store结构剖析

请详细阐述HBase RegionServer中Store的组成部分及其各自的作用,以及Store在数据读写过程中扮演怎样的角色?
29.5万 热度难度
数据库Hbase

知识考点

AI 面试

面试题答案

一键面试

Store的组成部分及其作用

  1. MemStore
    • 作用
      • 内存中的存储结构,用于临时存储客户端写入的数据。当客户端向HBase写入数据时,数据首先会被写入到MemStore中。
      • 采用LSM(Log - Structured Merge - Tree)结构,以KeyValue对的形式存储数据,方便快速的写入操作。
      • 当MemStore达到一定的阈值(通常是配置的hbase.hregion.memstore.flush.size大小,默认128MB)时,会触发Flush操作,将数据持久化到磁盘形成HFile。
  2. StoreFile(HFile)
    • 作用
      • 存储在HDFS上的文件,是MemStore Flush后的数据持久化形式。HFile采用KeyValue对的有序存储,并且按照一定的块(block)进行组织,默认块大小为64KB。
      • 支持数据的高效读取,利用Bloom Filter可以快速判断数据是否在某个HFile中,避免不必要的磁盘I/O。同时,通过索引结构(如元数据块索引、数据块索引等)可以快速定位到具体的KeyValue对所在的位置。
    • 相关结构
      • 数据块:存储实际的KeyValue数据,在读取数据时可以批量读取,提高I/O效率。
      • 索引块:记录数据块的索引信息,通过索引可以快速定位到包含目标数据的数据块。
      • 元数据块:存储一些关于HFile的元数据信息,如Bloom Filter等。
  3. WAL(Write - Ahead Log)
    • 作用
      • 预写式日志,用于保证数据的可靠性。在数据写入MemStore之前,会先将数据写入WAL。
      • 当RegionServer发生故障时,可以通过重放WAL日志来恢复未持久化到HFile的数据,确保数据不会丢失。
      • WAL采用顺序写入的方式,性能较高。每个RegionServer维护一个WAL文件,不同Region的写入操作都会记录到这个WAL文件中。

Store在数据读写过程中的角色

  1. 写入过程
    • 客户端发起写请求,数据首先被写入到WAL中,以保证数据的可靠性。
    • 接着,数据被写入到MemStore中,此时数据处于内存中,等待被Flush到磁盘。
    • 随着写入数据的增多,当MemStore达到配置的阈值时,会触发Flush操作,将MemStore中的数据按照KeyValue对的顺序写入到HDFS上的新HFile中,同时WAL中对应的日志可以被删除(因为数据已经持久化)。
  2. 读取过程
    • 客户端发起读请求,Store首先会在MemStore中查找数据,如果能找到则直接返回。因为MemStore在内存中,查找速度很快。
    • 如果在MemStore中未找到,会在StoreFile(HFile)中查找。HFile通过索引结构和Bloom Filter快速定位和判断数据是否存在于当前HFile中。如果存在,则从HFile中读取数据返回给客户端。
    • 在读取过程中,可能会涉及到多个HFile的查找,因为一个Store可能包含多个HFile(多次Flush操作会生成多个HFile),Store会按照一定的顺序(如时间顺序等)依次查找这些HFile,直到找到目标数据或者确认数据不存在。