面试题答案
一键面试关键机制
- 预写日志(Write-Ahead Log,WAL):Hbase在写入数据到MemStore之前,会先将数据写入HLog。这确保了即使系统崩溃,数据也不会丢失。HLog作为一种重做日志,记录了所有对Hbase数据的修改操作。
- 顺序写入:HLog采用顺序写入磁盘的方式,这极大地提高了写入性能。因为顺序写入避免了磁盘随机I/O的开销,在高并发写入场景下,能快速记录日志。
- 日志分割(Log Split):随着数据不断写入,HLog文件会不断增大。为了管理方便,HLog会进行日志分割,生成多个日志文件。这样可以避免单个日志文件过大难以管理的问题,同时也便于后续的恢复操作。
流程
- 写入HLog:当客户端向Hbase写入数据时,首先会将数据写入到Region Server对应的HLog中。HLog会为每个Region维护一个单独的日志文件。
- 写入MemStore:在成功写入HLog后,数据才会被写入到MemStore中。MemStore是内存中的数据存储结构,按照Key - Value的形式存储数据。
- 刷写(Flush):当MemStore达到一定的阈值(如大小阈值)时,会将数据刷写到磁盘,形成StoreFile。此时,HLog中对应的已持久化到StoreFile的数据记录可以被删除,这个过程称为日志截断(Log Truncation)。
- 故障恢复:如果Region Server发生故障,重启后会根据HLog中的记录来恢复未持久化到StoreFile的数据。通过重放HLog中的操作,将数据重新写入到MemStore,再进行刷写操作,从而确保数据的一致性。