面试题答案
一键面试HBase WAL(Write - Ahead Log)的基本作用
- 数据恢复:WAL的主要作用是提供数据的灾难恢复能力。当HBase发生故障(如RegionServer崩溃)时,WAL中记录的写入操作可以用于恢复未持久化到HFile的数据。如果没有WAL,在RegionServer崩溃时,内存中(MemStore)还未刷写到磁盘的数据将会丢失。通过重放WAL中的记录,HBase能够重建故障前的状态,确保数据的一致性和完整性。
- 保证数据可靠性:它确保即使在系统出现故障的情况下,数据也不会丢失。所有的写操作在更新MemStore之前,都会先写入WAL,这遵循了“先写日志,再写数据”的原则,保证了数据的持久性。
数据写入时WAL的具体写入流程
- 客户端发起写请求:客户端向RegionServer发送Put或Delete等写请求。
- 请求到达RegionServer:RegionServer接收到请求后,首先将写操作记录到WAL中。每个RegionServer维护一个WAL,该WAL实际上是Hadoop的HDFS文件。
- 写入WAL文件:写操作以日志记录的形式追加到WAL文件的末尾。在写入过程中,RegionServer会批量处理日志记录,以减少HDFS的I/O开销。同时,为了确保数据的持久性,WAL写入操作通常是同步的,即只有在成功写入WAL之后,才会继续后续操作。
- 写入MemStore:在成功写入WAL后,RegionServer将数据写入对应的MemStore。MemStore是内存中的数据结构,按列族进行组织。数据在MemStore中以KeyValue对的形式存储,并且按照RowKey排序。
- WAL滚动:随着写操作的不断进行,WAL文件会逐渐增大。当WAL文件达到一定大小(可配置)时,RegionServer会滚动WAL,即关闭当前WAL文件,创建一个新的WAL文件来记录后续的写操作。滚动后的旧WAL文件会被保留,以便在需要时进行数据恢复。
- MemStore刷写:当MemStore达到一定的阈值(如内存占用达到配置的上限)时,RegionServer会将MemStore中的数据刷写到磁盘,形成HFile。在刷写过程中,会同时清理对应的WAL记录,因为这些数据已经持久化到HFile中,不再需要通过WAL进行恢复。