MST

星途 面试题库

面试题:HBase列簇式存储中数据的读写流程

请阐述在HBase列簇式存储结构下,数据写入和读取的详细流程,包括涉及到的组件及它们之间的交互过程。
11.9万 热度难度
数据库Hbase

知识考点

AI 面试

面试题答案

一键面试

数据写入流程

  1. 客户端
    • 客户端首先与Zookeeper进行交互,获取HBase元数据信息,定位数据应该写入的RegionServer。
    • 然后,客户端向对应的RegionServer发起写入请求,请求中包含要写入的数据及相关的列簇信息。
  2. RegionServer
    • WAL(Write - Ahead Log):数据首先被写入WAL,WAL是一种预写式日志,用于确保数据在发生故障时可以恢复。写入WAL后,会生成一个事务ID。
    • MemStore:接着数据被写入MemStore,MemStore是内存中的数据存储结构,按照列簇进行组织。当MemStore达到一定的阈值(通常是128MB)时,会触发Flush操作。
  3. Flush操作
    • MemStore中的数据被写入HFile,HFile是HBase在HDFS上存储数据的格式。
    • 此时,WAL中对应的数据可以被删除(因为数据已经持久化到HFile)。生成的HFile会存储在HDFS上,并且RegionServer会更新元数据,记录新的HFile的位置等信息。

数据读取流程

  1. 客户端
    • 同样先与Zookeeper交互,获取HBase元数据,定位包含所需数据的RegionServer。
    • 客户端向对应的RegionServer发送读取请求,请求中包含要读取的数据的行键、列簇及列限定符等信息。
  2. RegionServer
    • MemStore:RegionServer首先在MemStore中查找数据,如果能找到,直接返回数据。
    • BlockCache:如果MemStore中没有找到,会在BlockCache中查找。BlockCache是RegionServer用于缓存HFile数据块的组件,以提高读取性能。如果在BlockCache中找到,返回数据,并更新BlockCache的访问记录(如采用LRU算法管理缓存)。
    • HFile:若BlockCache中也未找到,RegionServer会从HDFS上的HFile中读取数据。读取后,会将数据块缓存在BlockCache中,以便后续相同数据的读取。
  3. 返回数据:RegionServer将找到的数据返回给客户端。