面试题答案
一键面试HLog(预写日志)机制
- 数据持久化:HBase 中所有的写操作都会首先记录到 HLog 中。HLog 是一种预写式日志,采用顺序写的方式,确保即使在系统崩溃的情况下,数据也不会丢失。当 RegionServer 发生故障时,在重启过程中,可以通过重放 HLog 来恢复未完成的操作,从而保证数据的一致性。
- WAL(Write - Ahead Log)原则:在数据写入 MemStore 之前,必须先写入 HLog。这保证了在 MemStore 数据刷写到磁盘(StoreFile)之前,如果发生故障,能够通过 HLog 恢复数据。
Region 分裂机制中的一致性保证
- 分裂过程:当一个 Region 的大小超过设定的阈值时,会触发分裂操作。在分裂过程中,首先会将该 Region 标记为正在分裂状态,阻止新的写入操作。
- 数据分割:原 Region 中的数据会被按照一定的分裂算法(如基于 Key 的范围)分割到两个新的 Region 中。这个过程会记录在 HDFS 上,保证数据的一致性。
- 元数据更新:HBase 的元数据(如.META.表)会更新,记录新的 Region 信息以及它们在 HDFS 上的位置。在分裂完成后,才会允许新的读写操作,确保客户端能够正确访问分裂后的 Region。
Region 合并机制中的一致性保证
- 合并触发:当多个小的 Region 满足合并条件(如数量或总大小)时,会触发合并操作。
- 数据合并:首先停止对参与合并的 Region 的写入操作。然后将这些 Region 中的数据按顺序合并到一个新的 Region 中。在合并过程中,会对数据进行排序和去重等操作,保证数据的一致性。
- 元数据调整:更新.META.表,删除原有的 Region 记录,并添加合并后的 Region 信息。完成这些操作后,才会重新开放读写,确保客户端访问到的是合并后的正确数据。
RegionServer 故障恢复中的一致性保证
- 故障检测:HBase 的 ZooKeeper 负责监控 RegionServer 的状态。当 ZooKeeper 检测到某个 RegionServer 故障时,会通知其他 RegionServer。
- HLog 重分配:故障 RegionServer 上的 HLog 会被重新分配到其他可用的 RegionServer 上。这些 RegionServer 会根据 HLog 中的记录,重放未完成的操作,恢复故障 RegionServer 上的 Region 数据。
- Region 重新分配:ZooKeeper 会协调将故障 RegionServer 上的 Region 重新分配到其他正常的 RegionServer 上。在这个过程中,新接管的 RegionServer 会先加载 Region 的数据文件(StoreFile),然后通过重放 HLog 来确保数据的一致性。