面试题答案
一键面试HBase数据存储层次关系
- MemStore
- 定义:MemStore是HBase中数据写入的第一站,是一个内存中的数据结构,属于Region级别。当客户端向HBase写入数据时,数据首先被写入到MemStore。
- 数据格式:以KeyValue对的形式存储,按照RowKey排序。
- StoreFile
- 定义:当MemStore达到一定阈值(默认128MB)时,会发生Flush操作,将MemStore中的数据写入到磁盘上,形成一个StoreFile。每个Store对应一个Column Family,一个Store可能有多个StoreFile。
- 数据格式:StoreFile底层是HFile,它采用了LSM - Tree(Log - Structured Merge - Tree)结构,数据以KeyValue对形式存储,按照RowKey排序。
- HFile
- 定义:HFile是StoreFile的底层实现,是HBase在HDFS上存储数据的实际文件格式。它由多个数据块(Data Block)、索引块(Meta Block)、文件尾(Trailer)等部分组成。
- 数据格式:数据块中存储KeyValue对,索引块用于加速数据查找,文件尾记录了文件的元数据信息,如数据块的位置等。
写请求流程
- 客户端:客户端向HBase写入数据,数据首先到达Region Server的MemStore。
- WAL(Write - Ahead Log):在数据写入MemStore之前,会先写入WAL,这是为了保证数据的持久性。WAL采用追加写的方式,记录所有对数据的修改操作。
- MemStore:数据写入MemStore后,处于内存中等待进一步处理。当MemStore达到阈值,触发Flush操作,将MemStore中的数据写入到磁盘,生成一个新的StoreFile(HFile)。
- HDFS:StoreFile(HFile)最终存储在HDFS上,HBase通过HDFS提供的文件系统接口进行数据的持久化存储。
读请求流程
- 客户端:客户端发起读请求,请求到达Region Server。
- MemStore:Region Server首先在MemStore中查找数据,如果找到则直接返回数据。
- BlockCache:如果MemStore中没有找到数据,会到BlockCache(读缓存)中查找。BlockCache缓存了从HFile中读取的数据块,如果命中则返回数据。
- StoreFile(HFile):如果BlockCache中也没有找到数据,Region Server会从StoreFile(HFile)中读取数据。HFile按照RowKey排序,通过二分查找等方式定位数据所在的数据块,读取并返回数据。读取的数据块可能会被放入BlockCache,以便后续读操作使用。