面试题答案
一键面试基本原理
HBase 中的 HLog(Write-Ahead Log)是为了保证数据的持久性,在数据写入 MemStore 之前先写入日志。日志清理策略旨在确保日志文件不会无限增长,占用过多空间,同时保证数据的一致性和可恢复性。它基于这样一个原则:当日志文件对应的 Region 中所有数据都已经持久化到 StoreFile 时,该日志文件就可以被安全地删除。
关键组件
- HLog:记录所有数据写入操作,每个 RegionServer 维护一个 HLog。
- Region:HBase 分布式存储的基本单位,每个 Region 负责管理一部分数据。
- Store:每个 Region 包含多个 Store,每个 Store 对应一个列族,负责管理该列族的数据存储。
- StoreFile:Store 中的数据最终会持久化到 StoreFile 中,以 HFile 格式存储在 HDFS 上。
- WAL(Write-Ahead Log)Roller:负责滚动 HLog,即创建新的 HLog 文件并关闭旧的 HLog 文件,使得旧文件可以被清理。
大致流程
- 日志写入:客户端向 RegionServer 写入数据,数据首先被写入 HLog,然后写入 MemStore。
- MemStore 刷写:当 MemStore 达到一定阈值(如大小阈值或时间阈值),会触发刷写操作,将 MemStore 中的数据写入 StoreFile。此时,MemStore 中的数据被清空。
- 日志滚动:WAL Roller 会定期检查 HLog 的状态,当满足一定条件(如文件大小达到阈值或写入时间超过一定时长)时,会创建新的 HLog 文件,旧的 HLog 文件被关闭。
- 日志清理检查:RegionServer 会定期检查已关闭的 HLog 文件,判断这些文件对应的 Region 中的数据是否都已经持久化到 StoreFile。检查方式是对比 HLog 文件中的操作记录和 StoreFile 中的数据版本。
- 日志清理:如果确定某个已关闭 HLog 文件对应的 Region 数据都已持久化到 StoreFile,那么该 HLog 文件就会被删除,释放存储空间。