`

HBase Region恢复逻辑

阅读更多

Region恢复逻辑

RegionServer出现宕机以后,其上部署的Region将会被Master重新分配处理,由于在宕机前,某些Region的memStore数据可能还没有做flush操作,因此,需要对这部分数据做还原处理,还原过程通过读取HLog文件来实现。

截至到目前为止(1.0版本),HBase共对外声明了两种Region恢复策略,分别基于LOG_SPLITTING和LOG_REPLAY。其中LOG_REPLAY是从0.98版本起开始引入的新策略,其相对LOG_SPLITTING策略有以下优点(具体可参考HBASE-7006):

(1)省略了创建和读写recovered.edits文件的过程;

(2)在Region恢复期间依然可以对其执行写操作。

因此,本文主要围绕LOG_REPLAY策略进行描述。

HMaster通过监听Zookeeper的/hbase/rs节点可获取到相关RegionServer的宕机事件,从而进行相应的回调处理,处理逻辑是通过ServerShutdownHandler类来封装的,具体细节如下:

  1. 首先通过元数据信息查找RegionServer,看其之前都部署了哪些Region,并将这些Region标记成recovering状态

    针对每个待恢复的Region记录,Zookeeper都会创建与之对应的/hbase/recovering-regions/[region]/[failed-regionserver]节点来存储其最后一次执行flush时的sequenceId。这个过程是在Master端来完成的,通过MasterFileSystem的prepareLogReplay方法,由于RegionServer在默认情况下会每隔3秒与Master通信一次(通过hbase.regionserver.msginterval参数来控制),因此sequenceId信息便可从通信内容中进行获取。

  2. 将目标RegionServer上部署的Region进行重新分配处理

    分配过程依然是在Master端进行的,通过AssignmentManager的assign(List<HRegionInfo>)方法,以round-robin方式将目标Regions分配给其他RegionServer,详细参考Region分配章节。

  3. 提交LogReplayHandler,将目标RegionServer上的HLog文件按Region进行分组拆分,并针对每个分组执行LOG_REPLAY操作

    针对每一个待拆分的HLog,Master都会生成与之对应的SplitLogTask任务,并在Zookeeper中创建/hbase/splitWAL/[hlog]节点来将其存储,节点名称为HLog的存储路径,内容为SplitLogTask对象信息。

    虽然SplitLogTask在Master端生成,但执行过程却是在RegionServer端,这主要通过Zookeeper来进行协调。每当有/hbase/splitWAL/[hlog]节点生成时,Zookeeper便会通知所有RegionServer节点进行任务抢占,抢占逻辑是通过SplitLogWorker线程来封装的,具体细节如下:

    首先对目标ZK节点的数据内容进行读取,获取其version信息和SplitLogTask对象信息,然后由SplitLogTask对象判断其是否处于Unassigned状态,如果不是说明该任务已被其他RegionServer抢占;否则将SplitLogTask的状态修改为OWN,并通过Zookeeper的setData(path,data,version)方法来重新设置目标节点的数据内容,如果setData方法在执行过程中发现当前version与目标数据的version不匹配,说明该任务已优先被其他RegionServer抢占,将放弃处理。而抢到任务的RegionServer节点通过开启WALSplitterHandler线程开始对目标HLog进行拆分。

    WALSplitter线程在实现上是基于生产者-消费者模式来设计的,其对内封装了buffers生产队列来存储所有待恢复的HLog.Entry实体。并对外提供了splitLogFile生产方法,来将目标HLog中符合以下要求的日志记录添加到buffers集合中去:

    HLogKey的logSeqNum属性值 > 其所在Region最后一次执行flush操作时的seqId

    其中,HLogKey所属Region可通过其encodingRegionName属性值来确定,而该Region最后执行flush时的seqId则记录在Zookeeper的/hbase/recovering-regions/[region]/[failed-regionserver]节点中(步骤1中所创建)。

    buffers集合产生数据之后,WALSplitterHandler线程默认会开启3个子线程来对其数据内容进行消费处理(hbase.regionserver.hlog.splitlog.writer.threads参数控制),每个子线程充当消费者的角色,通过WriterThread进行封装。

    buffers集合是通过如下数据结构进行组织的:

    Map<regionName, RegionEntryBuffer>

    消费者在消费过程中,会从集合中挑选出数据总量最大的RegionEntryBuffer,并将其传递给LogReplayOutputSink进行处理(通过调用其append方法),处理逻辑大致如下:

    • 将RegionEntryBuffer中的日志记录追加到serverToBufferQueueMap集合中

      serverToBufferQueueMap集合的存储结构大致如下:servername#tablename --> Queue<Row>

      通过key可定位到目标RegionServer上的目标表格,value为要在目标表格上执行LOG_REPLAY操作的日志数据。

    • 从serverToBufferQueueMap集合中挑选出Row数量最多的记录并进行如下判断:

      (1)Row个数是否大于hbase.regionserver.wal.logreplay.batch.size参数值;

      (2)所有Row的总数据量大于hbase.regionserver.hlog.splitlog.buffersize * 0.35

      如果满足以上任意一项条件,对其执行下个步骤中的操作,否则先将数据缓存在serverToBufferQueueMap集合中,待数据总量达到一定规模时在进行处理。

    • 对上个步骤中过滤成功的数据执行LOG_REPLAY操作

      通过RPC请求执行远端RSRpcServices服务的replay方法,来将待同步的日志数据传递过去进行数据恢复。

配置参数

  1. hbase.master.distributed.log.replay

    是否启用LOG_REPLAY策略,启用前提:hfile.format.version属性值不小于3。

  2. hbase.hlog.split.skip.errors

    默认值为false,表示如果在HLog读取过程中如果出现了问题,则打印异常信息,并放弃接下来的处理。

    如果将其属性值设置成true,则出现问题时会进行如下处理:首先打印错误信息,然后将出现问题的HLog文件移动到/hbase/.corrupt目录下,并继续接下来的处理。

  3. hbase.splitlog.report.interval.loglines

    默认值为1024,表示每处理1024行HLog日志记录时打印一次输出信息。

  4. hbase.regionserver.hlog.splitlog.buffersize

    默认值为128M,表示每次LOG_REPLAY操作的日志总量应大于128M * 0.35(固定百分比),或满足hbase.regionserver.wal.logreplay.batch.size参数。

  5. hbase.regionserver.wal.logreplay.batch.size

    默认值为64,表示每次执行LOG_REPLAY操作时应至少包含64条日志记录,或满足hbase.regionserver.hlog.splitlog.buffersize参数。

  6. hbase.regionserver.hlog.splitlog.writer.threads

    通过该参数来控制WALSplitter.WriterThread线程的数量。

 

http://blog.csdn.net/javaman_chen/article/details/47166141

分享到:
评论

相关推荐

    HBase官方文档中文版-HBase手册中文版

    4. Coprocessor:在Region服务器端实现业务逻辑,减少网络传输。 六、HBase监控与故障恢复 1. 监控指标:包括内存使用、磁盘I/O、网络流量等,通过JMX和Hadoop Metrics2提供。 2. 故障处理:Master节点和Region...

    HBase学习利器:HBase实战

    - **第5章:通过Coprocessors扩展HBase**:Coprocessors是HBase中的一个重要特性,用于在服务器端执行用户定义的逻辑,从而减少网络传输开销并提高性能。本章将详细介绍Coprocessors的工作原理及其应用场景。 - **...

    hbase所需要的包

    1. HMaster:负责全局协调,包括 Region 分配、Region 服务器的监控与故障恢复、元数据的更新等。HMaster并不参与数据存储和处理,而是专注于集群的管理和维护。 2. HRegionServer:实际存储和处理数据的节点,每个...

    HBase技术介绍.docx

    - **Zookeeper**: 提供协调服务和故障恢复机制,确保HBase的稳定运行。 ##### 2. **借鉴Google Bigtable的设计** HBase的设计灵感来源于Google的Bigtable论文。类似于Bigtable依赖于Google文件系统(GFS),HBase...

    hbase 的java代码 集合 hbase 0.96

    9. **故障恢复和容错**:HBase通过Zookeeper进行协调和故障恢复。当RegionServer失败时,Zookeeper可以帮助重新分配其负责的Region,保证系统的高可用性。 10. **批量操作**:`HTable`支持`Batch`操作,可以一次性...

    hbase 示例

    8. **备份与恢复**:HBase提供了数据备份和恢复机制,以应对数据丢失或错误。在Twitbase中,这部分可能涉及到如何备份和恢复推文数据。 9. **Zookeeper**:HBase依赖Zookeeper进行协调和服务发现,了解Zookeeper的...

    HBase架构图

    5. **Region**:Region是HBase的逻辑数据分区,由一个或多个列族组成。每个Region有唯一的开始和结束键,这些键定义了该Region的数据范围。 6. **Column Family**:列族是数据的物理存储单位,每个列族下可以有任意...

    HBase Introduction

    除了上述内容外,HBase还涉及许多其他高级主题,如压缩算法的选择、缓存策略、故障恢复机制等,这些都需要开发者根据具体的业务需求进行细致的考虑。 ### 结论 通过深入理解HBase的逻辑视图和物理视图,以及掌握...

    hbase指南 英文

    HBase 使用一种称为“Region”的逻辑单元来组织数据。每个 Region 包含一定数量的行,并且可以跨多个节点分布。Region 又被进一步划分为 Store 文件,每个 Store 文件对应于特定的列族。这种分层的存储结构使得 ...

    HBase实战源码

    2. **Region**:HBase的数据物理划分为多个Region,每个Region包含一个或多个Column Family。Region的大小可动态调整,随着数据增长而分裂。 3. **Column Family**:Column Family是逻辑上的数据集合,可以看作...

    hbase_常用配置参数_以及学习笔记讲解_以及各种原理图.zip

    Region是表的逻辑分区,随着数据增长,Region会自动分裂以保持性能。在Region内部,数据按行键排序,这样可以快速定位到特定的数据。 图片“Hbase.png”可能展示了HBase的架构,包括Master节点、Region Server、...

    hbase-0.92.1.tar.gz

    每个Region Server可以管理多个Region,Region是表的逻辑分片,随着数据的增长,Region会自动分裂以保持良好的性能。 2. **Master节点**:HBase集群的核心组件,负责管理Region Server,处理Region的分配和负载均衡...

    hbase原理和设计

    3. **HBase Coprocessor**:通过Coprocessor在服务器端执行复杂的查询逻辑,减少网络传输开销。 4. **HBase集成其他索引系统**:例如使用Apache Phoenix提供的SQL层或Apache Solr作为索引引擎。 #### 五、RowKey...

    hbase-0.98.24

    Region是表的逻辑分片,随着数据量的增长,Region会自动分裂,以确保性能和可扩展性。 3. 列族(Column Family):列族是一种预定义的数据结构,类似于关系数据库中的表。每个列族包含一系列列,列名由列族名和列...

    HBase.docx

    - Region(区域):HBase中的数据分区,一个Region包含一组连续的RowKey。 3. **HBase的架构** - ZooKeeper:负责元数据管理、协调和故障恢复。 - Master:管理Region服务器,处理表的创建、删除和Region的分配...

    Apache HBase ™ Reference Guide.zip

    HBase提供了多种备份和恢复策略,包括基于快照的备份、Region复制等,确保数据的安全性。 **九、扩展性与高可用性** HBase的设计使得它能够水平扩展,通过增加Region Server来处理更多数据和负载。其高可用性体现在...

    hbase权威指南源代码下载

    5. **故障恢复和高可用性**:通过研究源代码中的故障检测和恢复机制,了解HBase如何保证服务的连续性和数据的一致性。 6. **监控和调优**:源代码中包含了监控和性能调优的相关工具和方法,这对于大型生产环境的...

    hbase学习课件

    #### 二、HBase 表结构及逻辑视图 HBase 中的数据是以表的形式存储的,每个表由行和列组成,其中列被组织成若干个列族。 - **表结构**: - 大量数据:一张表可能包含数十亿行以及成千上万的列。 - 无模式:每一行...

Global site tag (gtag.js) - Google Analytics