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最核心的是调用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写入机制、使用批量操作、合理分配Region、保证请求均衡以及控制KeyValue大小。每个策略都有其适用的业务场景和优势,系统管理员和开发者应根据实际需求和...
这得益于它的写入过程,包括预写日志(WAL)、MemStore和HFile等组件。 4. 实时查询:HBase支持实时的读取操作,用户可以快速获取数据。通过索引和过滤器机制,可以实现高效的查询。 5. MapReduce集成:HBase与...
4. `WAL`(Write Ahead Log):预写日志,确保数据的持久性。 5. `MemStore`和`HFile`:内存数据结构和磁盘存储格式,构成了HBase的数据层。 总的来说,HBase 0.94.13的jar包和源码提供了全面了解和使用HBase的工具。...
6. **HLog/WAL(Write Ahead Log)**:这是一种预写日志机制,用于记录每次对数据的修改操作,以确保数据的完整性和一致性。 #### 四、HBase数据模型 HBase的数据模型基于键值对,每个单元格通过一个四元组唯一标识...
它通过预写日志(Write-Ahead Log, WAL)机制来保证数据的高可用性和一致性。HBase的表支持范围查询,且扫描操作效率很高。 5. HBase与Spark、Hadoop的集成: HBase可以与Apache Spark和Apache Hadoop无缝集成。...
5. Hlog(WAL,Write-Ahead Log):HBase使用日志文件来保证数据的持久性和一致性,日志在发生故障时提供数据恢复的依据。 6. ZooKeeper:作为协调服务,负责管理ROOT表和META表,这些表存储了HBase中表的元数据...
6. 性能优化:为了提升性能,HBase支持预写式日志(Write Ahead Log, WAL)、BlockCache和MemStore。WAL保证了数据不丢失,BlockCache缓存热点数据,而MemStore则将内存中的修改暂存,定期写入磁盘。 7. 多版本管理...
`hbase.regionserver.maxlogs`则是RegionServer可持有的WAL日志的最大数量,防止 RegionServer因日志过多而影响性能。 3. **内存管理**:`hbase.regionserver.global.memstore.upperLimit`和`hbase.regionserver....
- HLog:HBase通过维护WAL(Write Ahead Log)来防止MemStore中的数据丢失,确保即使在系统崩溃的情况下也能恢复数据。 10. **HBase的主要操作** - Get:获取特定rowkey的数据。 - Put:插入或更新数据。 - ...
3. **监控与调优**:定期监控HBase的性能指标,如Region Server的压力、Memstore大小、WAL日志等,适时进行调优。 4. **备份与恢复**:制定备份策略,以防数据丢失。HBase支持快照功能,可以定期创建快照以备...
HBase的写入流程如下:首先,更新数据会被记录在预写日志(WAL)中,然后存入内存的memstore。当memstore达到最大值,数据会以HFile形式写入HDFS。WAL在服务器崩溃时用于恢复未写入磁盘的数据,确保数据的一致性。 ...
9. HLog:HLog是HBase中的日志系统,负责记录Region中的写操作、RegionServer的崩溃恢复等。 HBase存储架构的工作流程: 1. 客户端发起读写请求,连接到ZooKeeper,获取Region的位置信息。 2. 客户端根据Region的...
在HBase中,数据在更新时首先写入WAL日志(HLog)和内存(MemStore)中,MemStore中的数据是排序的,当MemStore累计到一定阈值时,就会创建一个新的MemStore,并且将老的MemStore添加到flush队列,由单独的线程flush到...
- HBase的读操作通常是无锁的,写操作则使用WAL(Write-Ahead Log)确保数据一致性。 9. **HBase的数据模型优化**: - 表设计应遵循稀疏存储原则,避免创建过多的列。 - 合理规划行键设计,以优化数据分布和查询...
4. **WAL(Write-Ahead Log)**:预写式日志,保证数据的持久化和故障恢复。 5. **MemStore**:内存缓冲区,用于缓存数据,定期将数据写入HDFS。 6. **HFile**:HBase的数据文件格式,用于持久化数据到磁盘。 **...