面试题答案
一键面试- HLog基础理解:
- HLog(Write - Ahead Log)是HBase用于保证数据可靠性的预写式日志。当客户端向HBase写入数据时,数据首先会被写入HLog,然后才会写入MemStore。
- 故障场景下数据恢复总体流程:
- 故障检测与确认:
- 集群中的RegionServer检测到自身故障或其他节点故障(通过心跳机制等)。当RegionServer故障时,它所负责的Region会被Master标记为需要重新分配。
- HLog定位:
- Master会收集故障RegionServer对应的HLog文件。这些HLog文件通常存储在分布式文件系统(如HDFS)上。每个RegionServer都有自己对应的HLog文件,文件名通常包含RegionServer的标识符和时间戳等信息。
- HLog分割:
- 由于一个HLog文件可能包含多个Region的写入记录,需要对HLog文件进行分割。分割算法基于HLog记录中的Region标识符。通过扫描HLog记录,将属于不同Region的记录分离出来,形成每个Region对应的HLog片段。
- Region重新分配与恢复:
- Master将故障Region重新分配到其他可用的RegionServer上。新的RegionServer加载故障Region的数据(包括MemStore数据,如果存在的话,以及StoreFile数据)。
- 新的RegionServer读取对应Region的HLog片段,开始重放日志记录。
- 故障检测与确认:
- 保证数据一致性的算法和流程:
- 重放顺序:
- HLog记录是按照写入顺序存储的。在重放HLog时,严格按照记录的顺序进行重放。这确保了数据的写入顺序与故障前一致,避免因顺序错乱导致的数据不一致。
- 幂等性处理:
- HBase中的许多操作(如Put、Delete)本身具有幂等性。例如,多次执行相同的Put操作,只要数据相同,最终结果是一样的。对于不具备天然幂等性的操作,HBase在实现层面会增加一些机制来保证幂等性。比如,在写入时会记录操作的版本号等信息,重放HLog时如果发现相同版本号的操作已经执行过,就不再重复执行。
- 原子性保证:
- HLog记录是以事务的形式组织的。一个事务中的所有操作要么全部成功重放,要么全部不重放。在重放HLog时,如果某个事务中的部分操作失败,会回滚整个事务,以保证数据的原子性和一致性。
- 检查点机制辅助:
- HBase会定期创建MemStore的检查点(Checkpoint),将MemStore中的数据刷写到StoreFile中。在恢复过程中,通过检查点可以确定哪些数据已经持久化到StoreFile中,哪些数据需要从HLog中重放。这样可以避免重复重放已经持久化的数据,提高恢复效率并保证一致性。
- 重放顺序: