Hbase的日志系统
一.HBase采用WAL预写日志,什么是WAL预写日志呢?
WAL: Write-Ahead Logging 预写日志系统是数据库中一种高效的日志算法,对于非内存数据库而言,磁盘I/O操作是数据库效率的一大瓶颈。在相同的数据量下,采用WAL日志的数据库系统在事务提交时,磁盘写操作只有传统的回滚日志的一半左右,大大提高了数据库磁盘I/O操作的效率,从而提高了数据库的性能。
WAL主要应用于灾难恢复,记录了所有数据改动,一旦服务器崩溃,就可以将数据恢复到崩溃之前的状态。当对RegionServer写入数据的时候,如果写入WAL失败,则认为整个操作都失败了。
二.WAL解决了什么问题?
- 1.解决高可用HA(High Available)问题,当出现事故,可以恢复到之前的状态。
- 2.实现远程备份(Replication)。一个写数据的请求,先会写log,再去写HRegion,然后将Log同步到远程机器上去。
三.HBase是通过那些模块实现WAL的呢?
- 1.HLog:
HLog是HBase实现WAL的类。
一个RegionServer(一台服务器)包含唯一一个HLog实例,用于实现WAL(预写日志:数据库一种高效的日志算法)。保存在此处,宕机时,可以恢复。
HLog Key:
包含:Region、Table Name、 Sequence Number***、WriteTime写入时间戳。保存标识用户的信息。
- 2.HLog Syncer:
日志同步刷写类,在数据写入Region时,将暂时保存在内存中的数据刷写到日志中。
如何实现:通过定时刷写和内存溢值,两种方式实现。
- 3.HLog Roller:
Log的大小可以通过配置文件设置,默认是60分钟,即每隔60分钟,就打开一个新的日志文件写入日志。
HLog Roller 是一个后台线程,来实现以下两个功能:
- 在特定时间去滚动日志,形成新的日志文件,避免单个日志文件过大。
- 根据HLog序列化的Number,对比已经持久化的HFile***,删除旧日志。
(HLog Roller结构图)
总结
本文介绍了HBase中的日志系统,搞清楚了HBase高可用性、备份、背后的实现原理,以及HBase是如何刷写日志的,通过哪几个存储模块的配合来完成日志的刷写的。
后续的文章中,将讲解下HBase中的日志合并。喜欢本文请收藏点赞。