HBase WAL简介

RegionServer 会将数据保存在内存中(MemStore),直到满足一定条件,将其 flush 到磁盘上。这样可以避免创建很多小文件。内存存储是不稳定的,常见的也是 HBase 使用的解决方案是 write-ahead logging(WAL):每次更新操作都会写日志,并且写日志和更新操作在一个事务中。

WAL 在 HBase 中的使用

HBase WAL

处理过程如下:

  1. Client 发起一次更新操作,通过RPC调用发送。这些RPC请求会批量的发送到目标 Region 所在的 RegionServer 上。

  2. 当请求对象到达 RegionServer,会被交给 Region 对应 HRegion 实例处理。数据首先被写到 WAL(HLog),然后被存入 MemStore,这两者都写入成功才会返回 Client 成功。

  3. MemStore 持续写入的过程中,满足条件时会写入文件系统,生成 HFile,存储在 HDFS 上的指定路径。

如果 RegionServer 崩溃,MemStore 丢失,WAL可以保证数据不会丢失。其他 RegionServer 可以读到 HDFS 上的 HLog 文件进行恢复操作。

HLog

实现 WAL 的类叫做 HLog,每个 HRegionServer 中都有一个 HLog 对象,当 HRegion 实例化时, HLog 对象会传入 HRegion 的构造器。当 HRegion 接受到一个更新操作,通过 HLog 对象将操作写入 WAL(核心是append()方法),HLog 文件定期会滚动出新的文件,并删除旧的文件(已持久化到 HFile 中的数据)。

根据上文的描述和上面的图示可以看出,多个 Region 使用同一个 HLog,结构如下:
数据按照到达的顺序写入到 WAL 中


HBase WAL
HLog 恢复

当 HRegionServer 意外终止后,HMaster 会感知到,首先会处理遗留的 HLog文件,将其中不同 region 的日志数据进行拆分,分别放到相应 region 的目录下,然后再将失效的 region 重新分配。
接收到这些 region 的新的 HRegionServer 在 Load Region 的过程中,发现有 HLog 需要处理,会通过 Replay 的方式会放 HLog 中的数据到 MemStore 中,然后进行一次 flush,完成数据恢复。

HLogKey 和 WALEdit

WAL 使用的是 Hadoop 的 SequenceFile,按照 key/value 集合的方式存储。HLogKey 记录了每次修改的 sequence number、写入时间、归属 region 和 table,以及集群ID(用于集群间复制) 。WALEdit 封装了每一次修改请求的内容,将原子性的操作写入一个 WALEdit 对象,例如:更新了一行中的10列,对于10列的更新会记录在一个 WALEdit 中,保证一致性。

需要特别注意 sequence number,起始值为0(或者是最近一次存入文件系统中的 sequence number)。由于在 HBase 中数据被存储在多个地方(HFile、MemStore 和 HLog),需要有一种机制能够确定,HLog 中的哪些数据已经在 HFile 中,哪些数据随着 MemStore 丢失了需要重放,而 sequenceId 就起到这样一个作用。详细参考后续文章。

LogSyncer

Hbase 有两种将WAL保存到磁盘的方式,一种是延迟日志刷写(deferred log flushing),另一种不是。通过setDeferredLogFlush(boolean isDeferredLogFlush),isDeferredLogFlush 的默认值为 false,即默认不延迟日志刷写。
默认每次更新都会调用写日志的 sync() 方法,保证写入日志的更新被文件系统确认,开销是比较大的,但不及时同步可能因为机器宕而丢日志。

Table 如果设置每次不同步,则写操作会被 RegionServe 缓存,并启动一个 LogSyncer 线程来定时同步日志,定时时间默认是1秒,也可由 hbase.regionserver.optionallogflushinterval 设置。

LogRoller

运行于后台的线程,在特定时间间隔内滚动日志,通过 hbase.regionserver.logroll.period 参数设置,默认是一小时。
HLog.rollWriter() 用于滚动日志,HLog.cleanOldLogs() 在其后调用,检查写入到 HFile 的最大的 sequence number(表明小于这个序列号的数据都已经被保存了),然后检查 HLog 中都小于这个数字的文件,移动到 .oldlogs 文件夹中,后续进行清理。

当 HLog 的数量过多,超过 hbase.regionserver.max.logs 设置的阈值,MemStore 会进行一次强制的 flush。


Reference:
《HBase- The Defintive Guide》

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,907评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,546评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,705评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,624评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,940评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,371评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,672评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,396评论 0 195
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,069评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,350评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,876评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,243评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,847评论 3 231
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,004评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,755评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,378评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,266评论 2 259

推荐阅读更多精彩内容

  • 参考:https://www.jianshu.com/p/569106a3008f 最近在逐步跟进Hbase的相关...
    博弈史密斯阅读 826评论 1 1
  • 最近在逐步跟进Hbase的相关工作,由于之前对Hbase并不怎么了解,因此系统地学习了下Hbase,为了加深对Hb...
    飞鸿无痕阅读 50,051评论 19 271
  • 本文首先简单介绍了HBase,然后重点讲述了HBase的高并发和实时处理数据 、HBase数据模型、HBase物理...
    达微阅读 2,679评论 1 13
  • 比特科技: 存储、数据库、大数据技术 » HBase原理和设计 http://www.bitstech.net/...
    葡萄喃喃呓语阅读 713评论 0 11
  • HBase存储架构图 HBase Master 为Region server分配region 负责Region s...
    kimibob阅读 5,497评论 0 52