HBase 预写日志 (WAL)
来源:互联网 发布:美工地坪漆 编辑:程序博客网 时间:2024/06/05 16:12
HBase数据格式包括Log结构参考上一篇日志。
WAL最重要的作用是灾难恢复,一旦服务器崩溃,通过重放log,我们可以恢复崩溃之前的数据。如果写入WAL失败,整个操作也将认为失败。
基本流程:首先,客户端初始化一个可能对数据改动的操作,如put(Put),delete(Delete) 和 incrementColumnValue()。这些操作将被封装在一个KeyValue对象实例中,发送给HRegionServer。 一旦达到一定大小,HRegionServer 将其发送给HRegion。这个过程中,数据会首先会被写入WAL,之后将被写到实际存放数据的MemStore中。
HLog是实现WAL的类。一个HRegionServer对应一个HLog实例。当HRegion初始化时,HLog将作为一个参数传给HRegion的构造函数。
WAL中几个重要的类:
1. HLog
HLog最核心的是调用doWrite的append() 方法,任何对数据改动的操作都就将首先调用这个方法。
出于性能考虑,put(), delete() 和incrementColumnValue()可通过开关函数setWriteToWAL (boolean) 禁用WAL。运行MapReduce Job时,可通过关闭WAL获得性能提升。
HLog另一个重要特性是将通过sequence number追踪数据改变。它内部使用AtomicLong保证线程安全。
2. HLogKey
上一部分的存储格式中有提到,HLogKey包含的一些主要变量,主要用于记录Key/Value对的归属信息。
3. LogFlusher
数据以KeyValue形式到达HRegionServer,将写入WAL,之后写入一个SequenceFile。由于数据流在写入文件时经常会缓存以提高性能,因此,有时数据实际保存在内存中。
LogFlusher调用HLog.optionalSync(),后者根据hbase. regionserver. optionallogflushinterval (默认10秒)定期调用Hlog.sync()。HLog.doWrite()也根据hbase.regionserver.flushlogentries (默认100秒)定期调用Hlog.sync()。Sync() 本身调用HLog.Writer.sync(),它由SequenceFileLogWriter实现。
4. LogRoller
Log的大小通过$HBASE_HOME/conf/hbase-site.xml 的hbase.regionserver.logroll.period限制,默认是一个小时。所以每60分钟,会打开一个新的log文件。久而久之,会有一大堆的文件需要维护。LogRoller主要完成日志的清理。
首先,LogRoller调用HLog.rollWriter(),定时滚动日志,之后,利用HLog.cleanOldLogs()可以清除旧的日志。它首先取得存储文件中的最大的sequence number,之后检查是否存在一个log所有的条目的”sequence number”均低于这个值,如果存在,将删除这个log。
5. Replay
旧日志往往由RegionServer 崩溃产生。当HMaster启动或者检测到RegionServer 崩溃,它将日志文件拆分为多份文件,存储在region所属的文件夹。之后,将日志重放。
重放过程:HRegionServer启动,打开所管辖的Region,检查是否存在剩余的log文件,如果存在,调用Store.doReconstructionLog()。重放一个日志只是简单地读入一个日志,将日志中的条目加入到Memstore中。最后,flush操作将Memstore中数据flush到硬盘中。- HBase 预写日志 (WAL)
- HBase 预写日志 (WAL)
- HBase 预写日志 (WAL)
- HBase WAL预写日志
- [翻译]HBase 架构101 –预写日志系统 (WAL)
- HBase 架构101 –预写日志系统 (WAL)
- 预写日志(WAL)介绍
- 《HBase权威指南》读书笔记 第八章:架构,WAL预写日志
- hbase 原代码分析 (11) WAL 写日志过程
- 写wal log日志
- hbase 删除部门wal日志后自我修复
- HBase源码系列(七)WAL与日志恢复
- HBase WAL原理学习
- HBase的WAL机制
- HBase的WAL机制
- HBase中的WAL
- HBase WAL机制
- Hbase WAL 机制记录
- Cookie的保存与读取
- WebRTC
- contains和compareDocumentPosition 的用法及区别
- presentViewController延迟跳转, 或者点击2次才跳转
- Andriod中数据存储的五种方式
- HBase 预写日志 (WAL)
- centos 下编译 gcc
- Centos6.5安装Oracle11.2.0.4 RAC(完整版)
- C++88个注意点子之51~70
- 卡牌游戏战斗系统的设计和实现三
- Day 4:上传功能的实现
- 数据结构_8:查找:平衡二叉树
- android github地址
- js浮点运算bug的解决办法