【转载原因:解释很清楚】

【转载原文:https://www.jianshu.com/p/65cb8cd81f40】

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》

(转)HBase WAL简介相关推荐

  1. Hbase配置项简介

    Hbase配置项简介 转自网络 Hbase配置项(1) hbase.tmp.dir:本地文件系统的临时目录,默认是java.io.tmpdir/hbase?{user.name}: hbase.roo ...

  2. HBASE Compaction 简介

    HBASE Compaction 简介 序 since: 2021年4月8日  9:43 auth: Hadi 参考: https://blog.csdn.net/u011598442/article ...

  3. HBASE region简介

    HBASE region简介 一.为什么要预分区 二.region拆分方式 (一)自动拆分 (二)预拆分 (三)强制拆分 三.推荐Region拆分的方案 四.Hbase的Web界面简单介绍 五.ROW ...

  4. Hbase协处理器简介

    Hbase协处理器简介 使用协处理器的风险:直接在RegionServer上运行,直接接触数据,轻则影响集群的性能和稳定性,重则破坏数据: 系统协处理器针对整个集群,表协处理器只针对某张表:

  5. HBase WAL 解析

    WAL(Write-Ahead-Log)是HBase的RegionServer在处理数据插入和删除的过程中用来记录操作内容的一种日志.大致过程如下图所示,首先客户端启动一个操作来修改数据,每一个修改都 ...

  6. HBase过滤器简介

    HBase过滤器简介 HBase过滤器(filter)提供非常强大的特性帮助用户提高其处理表中数据的效率. HBase中两种主要的数据读取函数是get()和scan(),他们都支持直接访问数据和通过指 ...

  7. HBase入门: 简介、特点、优缺点、数据结构、系统架构、入门操作、适用场景、注意事项与遇到的坑

    原文地址 https://www.cnblogs.com/Little-Li/p/7878219.html https://yq.aliyun.com/articles/54410 https://b ...

  8. hbase 数据库简介安装与常用命令的使用

    一:hbase 简介与架构功能 二:hbase 安装与配置 三:hbase 常见shell 命令操作 一:hbase 简介与架构功能 1.1 为什么要使用hbase 数据库 传统的RDBMS关系型数据 ...

  9. Hbase MOB 简介

    本文摘自 https://hbase.apache.org/book.html 75.存储中型对象(MOB) 数据有多种大小,并且将所有数据(包括图像和文档等二进制数据)保存在HBase中是理想的.从 ...

最新文章

  1. echart php mysql简书_echart 踩坑之路
  2. 构建根文件系统之busybox(一)浅析
  3. vue隐藏浏览器_一分钟学会Vue的条件渲染和列表渲染
  4. photoshop CG6 基础知识的学习
  5. java实现.net中的枚举
  6. 测试架构师10年经验分享:测试小工到资深专家必备这5项技能
  7. Java使用笔记之stream和sorted使用
  8. Adobe Flash Player不是最新版本,导致视频无法播放?
  9. 1.2 XML 的基本语法
  10. 批量删除新浪微博及自动发布微博
  11. wincc逻辑运算符_wincc表达式符号
  12. 显示器固件测试软件,【安全工具】固件可视化分析-工具篇
  13. 第138天,我成为了CSDN博客专家,在搬砖的道路上继续努力
  14. Pycharm debug时变量无法立即显示,正在评估(evaluating )...
  15. jquery和vue分别对input输入框手机号码格式化(344)
  16. 【缺陷检测】基于matlab GUI印刷电路板自动缺陷检测【含Matlab源码 1912期】
  17. 《绝望的主妇》大结局 无惊喜无亮点美满为主线
  18. 自制文件传输助手,实现数据安全备忘与跨平台传输(优化)
  19. 人工神经网络和神经网络,什么是人工神经网络?
  20. 【ML】混淆矩阵(Accuracy,Precision,Recall,F1)

热门文章

  1. HTML(day2)
  2. 分享113个HTML艺术时尚模板,总有一款适合您
  3. 【爬虫】 Squid 3.5.20 安装与配置 高匿代理
  4. tar linux 跳过解压,【linux命令】linux解压压缩命令tar详解以及压缩的时候如何跳过某一个压缩目录或文件...
  5. 被忽视的开发安全问题
  6. mysql今天日期_MySQL获取今天的日期
  7. python获取当前系统的日期_Python获取当前日期时间
  8. 微信小程序输入联想、表格
  9. Show and Tell: Lessons learned from the 2015 MSCOCO Image Captioning Challenge
  10. 【洛谷】P2298 Mzc和男家丁的游戏*