面试题答案
一键面试生成阶段
- 操作:当客户端对HBase进行写操作(Put、Delete等)时,首先会在MemStore中记录数据变更,同时生成对应的Log Edit。Log Edit记录了操作的详细信息,如RowKey、ColumnFamily、Qualifier、时间戳以及具体的操作类型和数据等。这些Log Edit会被批量写入到HLog(HBase的预写式日志)中,以确保数据的持久性。
写入HLog阶段
- 操作:HLog以顺序写的方式将Log Edit写入磁盘。每个RegionServer都维护着自己的HLog,HLog采用了分段存储的策略,当一个HLog文件达到一定大小后,会滚动生成新的HLog文件。写入过程中,为了保证数据的一致性和持久性,会使用文件同步(fsync)操作将数据从操作系统缓存刷写到磁盘。
RegionServer故障时的恢复阶段
- 操作:如果某个RegionServer发生故障,其他RegionServer在检测到故障后,会触发故障恢复流程。此时,系统会根据HLog中的Log Edit进行数据恢复。首先,会确定故障RegionServer所对应的HLog文件,然后从这些HLog文件中读取Log Edit。根据Log Edit中的信息,将未持久化到StoreFile的数据重新应用到MemStore中,使得数据状态恢复到故障前的状态。
合并与清理阶段
- 操作:随着MemStore不断写入数据,当达到一定阈值时,会触发Flush操作,将MemStore中的数据写入到StoreFile中。此时,对应的Log Edit已经完成了确保数据持久化的使命。HBase会定期对HLog文件进行合并和清理操作。合并操作会将多个小的HLog文件合并成一个大的HLog文件,以减少文件数量和提高读写性能。清理操作会删除那些已经不再需要的HLog文件,例如其中的Log Edit所对应的MemStore数据已经全部Flush到StoreFile并且相关的RegionServer状态稳定。