面试题答案
一键面试日志记录
- WAL 预写日志:HBase 通过 HLog(Write-Ahead Log)实现 WAL 机制。在数据写入 Region 之前,先将变更记录到 HLog 中。每条日志记录包含了操作类型(如 Put、Delete)、RowKey、列族、列限定符以及对应的值等详细信息,以便在发生故障时能够恢复数据。
- 顺序写入:HLog 以顺序方式写入磁盘,这极大地提高了写入性能。同时,每个 RegionServer 维护一个 HLog,确保日志记录的连续性和一致性。
- 多副本:为防止单点故障,HLog 通常会采用多副本机制,比如将日志记录同时写入多个副本,常见的是使用 ZooKeeper 来协调副本的一致性。
清理过程
- MemStore 刷写触发:当 MemStore 达到一定阈值(如大小或时间阈值)时,会触发刷写操作,将 MemStore 中的数据持久化到 HFile 中。此时,对应的 HLog 记录并不会立即清理。因为在刷写过程中可能出现故障,需要 HLog 来保证数据的一致性。
- 日志合并:随着数据的不断写入,HLog 文件会不断增大。为了减少 HLog 文件的数量和大小,HBase 会进行日志合并操作。在合并过程中,会将多个 HLog 文件中的记录合并到一个新的 HLog 文件中,同时去除已经持久化到 HFile 中的冗余记录。
- 清理判定:只有当确认某个 HLog 中的所有记录都已经成功持久化到 HFile 中,并且这些 HFile 已经完成了所有的刷写和合并操作,对应的 HLog 才会被标记为可清理。
- 异步清理:HBase 采用异步线程来执行 HLog 的清理操作,避免清理过程对正常的写入操作产生影响。清理线程会定期检查可清理的 HLog 文件,并将其删除。
- 故障处理:如果在清理过程中发生故障,系统会在恢复后重新检查 HLog 文件的状态,确保没有误删尚未持久化的日志记录,从而保证数据的一致性。