面试题答案
一键面试数据存储方面
- 数据接收与拆分:
- RegionServer接收来自客户端的写入请求。当写入数据时,它首先将数据写入到MemStore(内存中的存储结构)。
- 每个RegionServer管理多个Region,Region是HBase中分布式存储和负载均衡的基本单位。随着MemStore数据量的不断增加,当达到一定阈值(通常是配置的
hbase.hregion.memstore.flush.size
大小,默认128MB)时,会触发Flush操作,将MemStore中的数据刷写到磁盘上,形成StoreFile(HFile)。
- 数据组织与管理:
- RegionServer负责管理其管辖区域内的多个Store,每个Store对应表中的一个列族。每个Store包含一个MemStore和多个StoreFile。
- 它通过维护HLog(预写式日志,Write - Ahead Log)来确保数据的可靠性。在将数据写入MemStore之前,先将其写入HLog。这样在发生故障时,可以通过重放HLog来恢复数据。
- 随着StoreFile数量的增多,会进行Compaction操作。Minor Compaction会将一些小的StoreFile合并成一个较大的StoreFile,而Major Compaction会将一个Store下的所有StoreFile合并成一个大的StoreFile,并清理过期、删除的数据。
数据读取方面
- 读请求处理:
- 客户端发起读请求,RegionServer接收到请求后,首先在MemStore中查找数据。如果找到,直接返回数据。
- 如果在MemStore中未找到,则会在StoreFile中查找。为了加速查找,RegionServer利用Bloom Filter(一种用于快速判断数据是否存在的概率型数据结构,在HFile创建时生成)来快速过滤掉肯定不存在目标数据的StoreFile,减少不必要的磁盘I/O。
- 数据合并与返回:
- 从不同StoreFile中读取到的数据会在内存中进行合并,然后返回给客户端。由于可能存在数据的更新、删除等操作,需要根据数据的时间戳等信息来确定最终返回给客户端的正确数据版本。
工作流程总结
- 写入流程:
- 客户端 -> RegionServer -> HLog -> MemStore(达到阈值Flush) -> StoreFile(Compaction)
- 读取流程:
- 客户端 -> RegionServer -> MemStore(查找) -> StoreFile(利用Bloom Filter筛选查找并合并) -> 客户端