面试题答案
一键面试HLog 基础概念
HLog(Write Ahead Log)即预写式日志,是 HBase 用于实现数据持久化和故障恢复的重要机制。每个 RegionServer 都有一个 HLog,客户端的写操作首先会写入 HLog,然后才写入 MemStore。
单 RegionServer 故障场景下的数据一致性保障
- 故障检测:当 RegionServer 发生故障时,Master 会通过 ZooKeeper 感知到。
- 日志回放:Master 会将故障 RegionServer 上的 HLog 分割,并分发给相应的 RegionServer。新接管的 RegionServer 会从 HLog 中回放记录,重新构建 MemStore 中的数据,从而恢复故障前的数据状态,保证数据一致性。
多 RegionServer 同时故障场景下的数据一致性保障
- 日志持久化:由于每个 RegionServer 的 HLog 会实时持久化到 HDFS,即便多个 RegionServer 同时故障,HLog 数据依然存在。
- 故障处理顺序:Master 首先会处理故障 RegionServer 对应的 HLog,按照日志记录的先后顺序进行回放。在回放过程中,通过事务机制保证操作的原子性,避免部分数据写入成功,部分失败的情况。
- 元数据修复:在回放 HLog 后,可能需要修复 Region 的元数据,确保元数据与实际数据状态一致。例如,更新 Region 的最后修改时间等信息。
网络分区场景下的数据一致性保障
- 分区检测:ZooKeeper 可以检测到网络分区的发生。在网络分区期间,不同分区内的 RegionServer 可能继续独立工作。
- 脑裂处理:为防止脑裂问题(即不同分区内的 RegionServer 同时认为自己是主节点进行写操作),HBase 依赖 ZooKeeper 来选举唯一的 Master。只有 Master 能够进行 Region 的分配和元数据管理。在网络分区恢复后,Master 会协调各个 RegionServer,通过 HLog 回放等机制,合并不同分区内产生的新数据,确保数据一致性。
- 同步机制:当网络恢复后,不同分区内的 RegionServer 会与 Master 进行同步。Master 会根据 HLog 记录,协调各个 RegionServer 之间的数据同步,优先处理更新时间较新的操作,保证最终的数据一致性。