`
asyty
  • 浏览: 347787 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HBase 预写日志 (WAL)

阅读更多

 

HBase数据格式包括Log结构参考上一篇日志。

WAL最重要的作用是灾难恢复,一旦服务器崩溃,通过重放log,我们可以恢复崩溃之前的数据。如果写入WAL失败,整个操作也将认为失败。

6  WAL

 

基本流程:首先,客户端初始化一个可能对数据改动的操作,如put(Put),delete(Delete)  incrementColumnValue()。这些操作将被封装在一个KeyValue对象实例中,发送给HRegionServer 一旦达到一定大小,HRegionServer 将其发送给HRegion。这个过程中,数据会首先会被写入WAL,之后将被写到实际存放数据的MemStore中。

 

HLog是实现WAL的类。一个HRegionServer对应一个HLog实例。当HRegion初始化时,HLog将作为一个参数传给HRegion的构造函数。

WAL中几个重要的类:

1.      HLog

HLog最核心的是调用doWriteappend() 方法,任何对数据改动的操作都就将首先调用这个方法。

出于性能考虑,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写性能优化策略

    总结来说,HBase写性能优化可以从多个方面入手,包括调整WAL写入机制、使用批量操作、合理分配Region、保证请求均衡以及控制KeyValue大小。每个策略都有其适用的业务场景和优势,系统管理员和开发者应根据实际需求和...

    hbase权威指南 配套源码

    这得益于它的写入过程,包括预写日志(WAL)、MemStore和HFile等组件。 4. 实时查询:HBase支持实时的读取操作,用户可以快速获取数据。通过索引和过滤器机制,可以实现高效的查询。 5. MapReduce集成:HBase与...

    hbase-0.94.13 jar和源码

    4. `WAL`(Write Ahead Log):预写日志,确保数据的持久性。 5. `MemStore`和`HFile`:内存数据结构和磁盘存储格式,构成了HBase的数据层。 总的来说,HBase 0.94.13的jar包和源码提供了全面了解和使用HBase的工具。...

    HBASE基础应用的介绍

    6. **HLog/WAL(Write Ahead Log)**:这是一种预写日志机制,用于记录每次对数据的修改操作,以确保数据的完整性和一致性。 #### 四、HBase数据模型 HBase的数据模型基于键值对,每个单元格通过一个四元组唯一标识...

    hbase入门和使用

    它通过预写日志(Write-Ahead Log, WAL)机制来保证数据的高可用性和一致性。HBase的表支持范围查询,且扫描操作效率很高。 5. HBase与Spark、Hadoop的集成: HBase可以与Apache Spark和Apache Hadoop无缝集成。...

    搭建HBase完全分布式数据库

    5. Hlog(WAL,Write-Ahead Log):HBase使用日志文件来保证数据的持久性和一致性,日志在发生故障时提供数据恢复的依据。 6. ZooKeeper:作为协调服务,负责管理ROOT表和META表,这些表存储了HBase中表的元数据...

    HBase权威指南

    6. 性能优化:为了提升性能,HBase支持预写式日志(Write Ahead Log, WAL)、BlockCache和MemStore。WAL保证了数据不丢失,BlockCache缓存热点数据,而MemStore则将内存中的修改暂存,定期写入磁盘。 7. 多版本管理...

    hbase资料_hbase-default.xml.zip

    `hbase.regionserver.maxlogs`则是RegionServer可持有的WAL日志的最大数量,防止 RegionServer因日志过多而影响性能。 3. **内存管理**:`hbase.regionserver.global.memstore.upperLimit`和`hbase.regionserver....

    大数据HBASE考题材料

    - HLog:HBase通过维护WAL(Write Ahead Log)来防止MemStore中的数据丢失,确保即使在系统崩溃的情况下也能恢复数据。 10. **HBase的主要操作** - Get:获取特定rowkey的数据。 - Put:插入或更新数据。 - ...

    HBase完整学习笔记

    HBase的写入流程如下:首先,更新数据会被记录在预写日志(WAL)中,然后存入内存的memstore。当memstore达到最大值,数据会以HFile形式写入HDFS。WAL在服务器崩溃时用于恢复未写入磁盘的数据,确保数据的一致性。 ...

    HBase存储架构详解

    9. HLog:HLog是HBase中的日志系统,负责记录Region中的写操作、RegionServer的崩溃恢复等。 HBase存储架构的工作流程: 1. 客户端发起读写请求,连接到ZooKeeper,获取Region的位置信息。 2. 客户端根据Region的...

    hbase-2.2.3-bin.tar.gz

    3. **监控与调优**:定期监控HBase的性能指标,如Region Server的压力、Memstore大小、WAL日志等,适时进行调优。 4. **备份与恢复**:制定备份策略,以防数据丢失。HBase支持快照功能,可以定期创建快照以备...

    某大数据公司内部Hbase性能测试详细设计文档及用例

    在HBase中,数据在更新时首先写入WAL日志(HLog)和内存(MemStore)中,MemStore中的数据是排序的,当MemStore累计到一定阈值时,就会创建一个新的MemStore,并且将老的MemStore添加到flush队列,由单独的线程flush到...

    大数据技术之HBase的面试题.zip

    - HBase的读操作通常是无锁的,写操作则使用WAL(Write-Ahead Log)确保数据一致性。 9. **HBase的数据模型优化**: - 表设计应遵循稀疏存储原则,避免创建过多的列。 - 合理规划行键设计,以优化数据分布和查询...

    Introduction of HBase

    4. **WAL(Write-Ahead Log)**:预写式日志,保证数据的持久化和故障恢复。 5. **MemStore**:内存缓冲区,用于缓存数据,定期将数据写入HDFS。 6. **HFile**:HBase的数据文件格式,用于持久化数据到磁盘。 **...

Global site tag (gtag.js) - Google Analytics