首页> 中国专利> 一种基于远程日志备份的HBase数据可用性及持久性的方法

一种基于远程日志备份的HBase数据可用性及持久性的方法

摘要

本发明公开了一种基于远程日志备份的HBase数据可用性及持久性的方法,HBase的数据节点写入时,首先通过分布式系统封装日志记录,并通过网络把日志备份到预先指定的远程节点,保证数据的可用性和持久性,并以此为基础,把大量用户数据和日志记录暂存在内存中,减少数据处理过程中的数据持久化进程;当HBase的数据节点处于空闲的时候,主动把内存中的数据持久化到文件系统,减轻内存存储压力,减少写操作过程中发生持久化进程的频率,提高数据写入的时间性能。这种基于远程日志备份的HBase数据可用性及持久性的方法保证了数据的可用性、持久性,大大提高数据写入速度、提高系统性能。

著录项

  • 公开/公告号CN103870570A

    专利类型发明专利

  • 公开/公告日2014-06-18

    原文格式PDF

  • 申请/专利权人 广州携智信息科技有限公司;

    申请/专利号CN201410095611.9

  • 申请日2014-03-14

  • 分类号G06F17/30(20060101);G06F11/14(20060101);G06F11/34(20060101);

  • 代理机构44302 广州圣理华知识产权代理有限公司;

  • 代理人陈业胜;张春耀

  • 地址 510000 广东省广州市天河区黄埔大道西路33号23楼BCD1房

  • 入库时间 2024-02-20 00:20:11

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-04-27

    授权

    授权

  • 2015-04-15

    专利申请权的转移 IPC(主分类):G06F17/30 变更前: 变更后: 登记生效日:20150323 申请日:20140314

    专利申请权、专利权的转移

  • 2014-07-16

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20140314

    实质审查的生效

  • 2014-06-18

    公开

    公开

说明书

技术领域

本发明涉及一种基于远程日志备份的非关系型数据库数据可用性和持久性 的解决方案,尤其涉及一种基于远程日志备份的HBase数据可用性及持久性的 方法。

背景技术

非关系型数据库是指有别于传统的关系型数据库的一种新型数据库,在海 量数据存储、高并发访问支持等方面表现出很好的性能。HBase,也就是Hadoop  Database,是一种基于列存储的非关系型数据库。HBase是Apache Hadoop的子 项目,在Hadoop架构中处于结构化存储层:下层需要=依托分布式文件系统HDFS; 为上层的MapReduce计算模块提供高性能、高可靠、高可扩展性、基于列存储 的分布式存储系统。HBase可以存储结构化数据,也可以存储半结构化或者非结 构化的数据。此外,HBase中表会被分割为子表,即HRegion;MemStore为HRegion 所拥有的实例;WALEdit主体为KeyValue的List,记录了系统的日志信息; applyFamilyMapToMemstore方法为数据写入内存Memstore的方法;WALEdit类 主体为KeyValue的List,记录了系统的日志信息;addFamilyMapToWALEdit方 法为构造数据并写入WALEdit的方法;append方法为添加信息的方法;startRLP 方法为将日志数据通过备份进程接口备份到远程节点的方法。

当前HBase采用数据持久化保证数据持久性和基本可用性,并用预写日志 机制进一步保证数据可用性。虽然这套可用性、持久性解决方案能够保证数据 持久性和基本可用性,但是其在数据处理过程中引入大量的持久化进程,这些 持久化进程是磁盘写操作,会大大降低了系统写操作的时间性能和用户体验。 所以更加高效的可用性、持久性方案非常需要关注。

发明内容

本发明所要解决的技术问题是,提供一种能够提高写操作的时间性能的基 于远程日志备份的HBase数据可用性及持久性的方法。

为了解决上述技术问题,本发明是通过以下技术方案实现的:

一种基于远程日志备份的HBase数据可用性及持久性的方法,HBase的数 据节点写入时,首先把数据暂存在内存中,通过分布式系统封装日志记录,并 通过网络把日志备份到预先指定的远程节点,保证数据的可用性和持久性,并 以此为基础,把大量用户数据和日志记录暂存在内存中,减少数据处理过程中 的数据持久化进程;当HBase的数据节点处于空闲状态的时候,主动把内存中 暂存的数据持久化到文件系统,减轻内存存储压力,减少写操作过程中发生持 久化进程的频率,提高数据写入的时间性能。

优选的,所述HBase的数据节点写入并备份包括以下流程:

a、HBase的数据节点启动,并且初始化远程日志备份进程,即启动远程日 志备份服务,作为集群中某个或多个节点远程备份日志的目标节点;同时获取 当前节点备份日志的目标节点或节点群的IP,作为整个HBase的数据节点上所 有HRegion发起远程日志备份时共享的变量;

b、当HRegion调用写操作处理过程时,把用户数据写入内存存储单元,然 后构造日志记录WAL写入本地节点内存,不发起不等待日志持久化进程;而是 把WAL及相关信息发送到远程备份节点,并等待备份节点发来的写入确认;

c、当HBase的数据节点接收到集群中某个节点发来的WAL时,把它写入本 地日志文件,立即返回写入确认,日志同步进程稍后会把日志及时写入文件 系统;

d、如果HRegion的写操作进程在规定时间内收到超过一半的目标节点返回 的写确认就认为远程日志备份成功,并返回写操作成功;否则认为备份失败, 并返回写操作失败。

优选的,所述步骤b和步骤d中HRegion的写操作包括以下步骤:

1、首先尝试获取需要的锁;

2、检查HRegion和HBase的数据节点状态,此时检查是否需要持久化;

3、更新时间戳;

4、数据写入内存MemStore,即执行applyFamilyMapToMemstore方法;

5、随后构造并写WALEdit,执行addFamilyMapToWALEdit方法;

6、通过append方法把WAL日志写入本地日志系统,但不会持久化;

7、构造远程日志备份数据,调用startRLP方法把日志数据通过备份进程 接口备份到远程节点;如果返回true则写操作执行成功,否则执行失 败,且无论成功与否都要释放行锁定。

优选的,所述日志备份过程中传输的数据包括日志数据单元、确认数据及 日志同步通知。

优选的,所述HBase的数据节点包括空存储状态、存储状态、预备持久化 状态和持久化状态四种状态;所述HBase的数据节点处于空存储状态时,如果 接收到的是读操作请求,HBase的数据节点承载的MemStore中没有写入数据、 还是空置的,所以HBase的数据节点仍然处在空存储状态;当HBase的数据节 点处于空存储状态时,如果HBase的数据节点接收到写操作请求,就会有用户 数据写入某个或某几个MemStore,此时HBase的数据节点转入存储状态,若处 于存储状态的HBase的数据节点没有任何的操作正在进行,也没有任何的请求 需要响应,则进入预备持久化状态;如果HBase的数据节点处于预备持久化状 态,则会判断当前待持久化队列是否为空,如果待持久化队列为空,则直接转 入空存储状态,如果队列不为空则启动等待计时器,如果等待计时器时间到达, 节点仍然没有正在运行的任务或者没有收到任何操作请求,节点会启动持久化 进程,把日志写入文件系统,当前的HBase的数据节点进入持久化状态;当处 于预备持久化状态的HBase的数据节点在等待计时的过程中,如果有读写请求 或者节点需要运行其他任务,则立即停止等待计时,节点终止预备持久化状态、 重新进入存储状态;而处于持久化状态的HBase的数据节点不会被中断,直至 完成了一个持久化过程,比如把日志文件或者某个HRegion的MemStore数据全 部写入了文件系统,则重新转入预备持久化状态。

与现有技术相比,本发明的有益之处在于:这种基于远程日志备份的HBase 数据可用性及持久性的方法通过节点间日志备份,保证了数据的可用性、持久 性,通过把数据暂存在内存中、减少数据处理过程中的持久化频率,可以大大 提高数据写入速度、提高系统性能,同时能够改善数据写入时间对MemStore大 小的敏感度;通过节点空闲时主动把内存数据持久化到文件系统,减轻内存压 力,减少数据写入过程中的持久化频率,提高系统写操作的时间性能。

附图说明

下面结合附图对本发明进一步说明。

图1是基于远程日志备份的HBase数据可用性及持久性的方法示意图;

图2是基于远程日志备份的HBase数据可用性及持久性的方法中的数据写 入过程流程图;

图3是基于远程日志备份的HBase数据可用性及持久性的方法中日志备份 的节点通信示意图;

图4是基于远程日志备份的HBase数据可用性及持久性的方法中节点状态 和状态转换示意图。

具体实施方式

下面结合附图和具体实施方式对本发明进行详细描述。

如图1所示一种基于远程日志备份的HBase数据可用性及持久性的方法, HBase的数据节点写入时,首先通过分布式系统封装日志记录,并通过网络把日 志备份到预先指定的远程节点,保证数据的可用性和持久性,并以此为基础, 把大量用户数据和日志记录暂存在内存中,减少数据处理过程中的数据持久化 进程;当HBase的数据节点处于空闲的时候,主动把内存中的数据持久化到文 件系统,减轻内存存储压力,减少写操作过程中发生持久化进程的频率,提高 数据写入的时间性能。所述HBase的数据节点处理分为两个阶段;第一阶段时, HBase的数据节点把数据暂存在内存中,并封装日志记录备份到远程节点;第二 阶段时,HBase的数据节点处于空闲状态时,主动把内存中的暂存的数据持久化 到文件系统。

所述HBase的数据节点写入并备份包括以下流程:

a、HBase的数据节点启动,并且初始化远程日志备份进程,即启动远程日 志备份服务,作为集群中某个或多个节点远程备份日志的目标节点;同时获取 当前节点备份日志的目标节点或节点群的IP,作为整个HBase的数据节点上所 有HRegion发起远程日志备份时共享的变量;

b、当HRegion调用写操作处理过程时,把用户数据写入内存存储单元,然 后构造日志记录WAL写入本地节点内存,不发起不等待日志持久化进程;而是 把WAL及相关信息发送到远程备份节点,并等待备份节点发来的写入确认;

c、当HBase的数据节点接收到集群中某个节点发来的WAL时,把它写入本 地日志文件,立即返回写入确认,日志同步进程稍后会把日志及时写入文件 系统;

d、如果HRegion的写操作进程在规定时间内收到超过一半的目标节点返回 的写确认就认为远程日志备份成功,并返回写操作成功;否则认为备份失败, 并返回写操作失败。

如图2所示,所述HRegion的写操作包括以下步骤:

1、首先尝试获取需要的锁;

2、检查HRegion和HBase的数据节点状态,此时检查是否需要持久化;

3、更新时间戳;

4、数据写入内存MemStore,即执行applyFamilyMapToMemstore方法;

5、随后构造并写WALEdit,执行addFamilyMapToWALEdit方法;

6、通过append方法把WAL日志写入本地日志系统,但不会持久化;

7、构造远程日志备份数据,调用startRLP方法把日志数据通过备份进程 接口备份到远程节点;如果返回true则写操作执行成功,否则执行失败,且无 论成功与否都要释放行锁定。

结合本发明所构筑的平台体系结构来看,在日志备份过程中需要设计一个 轻型的客户端,所述客户端程序需要完成如下功能:

一、封装并备份日志记录及相关信息。HBase节点处理写操作请求的过程中, 需要封装日志记录及相关信息,包括日志记录WAL,数据表信息、HRegion信息、 集群信息等。随后HBase节点需要通过网络程序接口把封装好的日志数据立即 备份到预先指定的远程节点。远程备份节点有系统预先分配,通常这些远程备 份节点不止一个。

二、等待远程备份节点返回的确认信息。备份节点接收到日志数据后会为 源节点构造并返回一个确认信息。所以HBase客户端节点还需要等待来自远程 备份节点的确认信息,并根据确认信息的状态判断写操作的最终状态:至少要 有一半以上的节点备份成功才能认为写操作是成功的,否则写操作返回失败。

三、发送同步信息到远程备份节点。当HBase节点发起了持久化进程,其 部分日志数据就可以删除,所以节点需要以客户端的身份把持久化信息告知自 己的备份节点。

所述服务器端程序需要完成如下功能:

一、存储远程节点备份的日志记录。服务端接收远程节点发送过来的日志 数据,并把它们写入本地日志系统,随后立即向源节点返回确认信息:告知源 节点是否成功接收了备份的日志数据。写入日志记录的时候需要表信息、 HRegion信息等数据,所以接收到的日志数据必须包括这些信息。

二、响应远程节点的同步信息。向客户端软件分发密钥及哈希函数:服务器 端为每位客户生成2个哈希函数及2个主密钥,发送给客户端服务程序。

三、响应远程节点的日志读取操作。HBase的备份节点要有效的响应远程 节点的日志读取请求:即把本节点为指定表和HRegion保存的日志记录按照给 定的序列数要求读出并通过网络接口返回给源节点。

当上述客户端与服务器端进行通信时,在基于远程日志备份的数据可用性、 持久性方案中,日志备份时的节点通信通过网络传输方式实现。

所述日志备份过程中传输的数据主要包括:

1、日志数据单元(Log Data Unit)。日志数据单元是包含了HBase预写日 志WAL信息的数据,是远程备份过程中由客户端封装并发往远程节点保存的日 志数据。它的数据包括数据帧序号、日志记录、表的名称、HRegion信息等。具 体描述如下:

数据帧序号ID:也是该日志数据的唯一标识符,用于客户端和服务端通信 时进行数据帧的确认;

日志记录单元:记录了HBase日志信息WALEdit,WALEdit封装了一个 KeyValue键值对列表,里面记录了系统的日志信息,是日志数据单元的核心数 据;

表的名称:被操作的数据表名称,是一个字节数组;

HRegion信息:是HRegionInfo的一个对象,描述了被操作HRegion的信息, 包括Region名称、Region的ID、Region的起始和结束键值、是否离线等信息;

集群ID:ClusterId;

isDeferredLog:布尔型变量,表示日志是否是延迟日志;

时间信息now:当前毫秒数,为了保证数据的一直,时间信息在客户端发起 RLP过程的时候写入。

2、确认数据(ACK)。确认数据ACK用于远程备份过程中的服务端向客户端 确认已经收到发来的日志数据。当服务端接收了来自源节点的日志数据后,会 在写入日志系统后直接构造并发送一个确认数据:数据类型即确认帧ACK,然后 把源节点日志数据中数据帧序号取出作为确认数据帧的序号,随后发回源节点。 确认数据帧的结构很简单,包括一个类型标识符、一个数据帧序号和一个成功 与否的标识:

数据帧序号ID:告诉源节点确认的具体对象,从接收到的日志数据单元中 直接取出。

isSucc:布尔型变量,接收到的日志记录是否成功写入内存。

3、日志同步通知(Log Sync Notification)。日志同步通知是节点执行持 久化进程后主动的构造并发送给远程备份节点的同志信息,告知备份节点序列 数小于给定值的日志记录都可以弃置。其数据字段如下:

序列数:与已经持久化数据相关的最大日志记录序列数。

HRegion名称:执行持久化进程的HRegion名称,用字节数组表示。

表名称:执行持久化进程的表的名称,用字节数组表示。

isMetaRegion:布尔类型变量,标识是否是元数据Region。

如图3所示,所述客户端和服务端的通信过程主要分为两种,远程备份日 志和日志持久化同步通知,具体地:

所述远程备份日志,即处理写操作的过程中,客户端把日志记录封装成日 志数据单元(LDU)并备份到预先指定的远程节点;服务端接收到日志数据单元 后会把具体数据取出,写入本地日志文件;随后服务端构造确认数据ACK返回 给客户端节点。

所述日志持久化同步通知,即节点成功执行一次持久化进程后,日志中的 相关记录就可以考虑清理,所以此时节点需要以客户端的身份构造日志同步通 知(LSN)告知远程备份节点相关的持久化信息;远程节点接收到日志同步通知 后取出其中的序列数,并把持久化信息写入本地日志文件。

这种基于远程日志备份的HBase数据可用性及持久性的方法其节点处于空 闲状态时,会主动发起节点日志和数据的持久化进程,减轻节点内存存储压力, 减少写操作过程中因为内存压力执行持久化进程的频率。

如图4所示,所述HBase的数据节点分为空存储状态、存储状态、预备持 久化状态和持久化状态;具体的:

所述空存储状态即节点承载的所有HRegion包含的MemStore都是空的,内 存里面没有任何用户数据需要持久化。

所述存储状态即节点承载的HRegion中有部分或者全部的MemStore存储有 用户数据,与空存储状态的区别就是节点的MemStore是否存储有数据。节点处 于存储状态时,节点需要持久化但是当前有任务需要运行所以不应该执行持久 化进程。

所述预备持久化状态即存储状态的节点,如果没有任务正在进行或者需要 被调度运行,那么节点进入预备持久化状态:首先节点承载的HRegion中有数 据是存储在内存中的,其次当前节点没有任何的任务在运行或者需要运行。

所述持久化状态即持久化状态下的节点正在进行日志文件或者用户数据持 久化。此时是数据库写文件系统的时候,不可以被打断直到一次持久化进程完 全结束。

所述HBase的数据节点之间空存储状态、存储状态、预备持久化状态和持 久化状态的转换如下:

处于空存储状态的节点如果接收到的是读操作请求,节点承载的MemStore 中没有写入数据、还是空置的,所以节点仍然处在空存储状态。

处于空存储状态的节点如果接收到写操作请求,就会有用户数据写入某个 或某几个MemStore,此时节点转入存储状态。

处于存储状态的节点如果没有任何的操作正在进行,也没有任何的请求需 要响应,则进入预备持久化状态。

处于预备持久化状态的节点,会判断当前待持久化队列是否为空。如果待 持久化队列为空,则直接转入空存储状态。如果队列不为空则启动等待计时器。 如果等待计时器时间到达,节点仍然没有正在运行的任务或者没有收到任何操 作请求,节点会启动持久化进程,把日志写入文件系统,当前的HRegionServer 节点进入持久化状态。

处于预备持久化状态的节点在等待计时的过程中,如果有读写请求或者节 点需要运行其他任务,则立即停止等待计时,节点终止预备持久化状态、重新 进入存储状态。

处于持久化状态的节点不会被中断,直至完成了一个持久化过程,比如把 日志文件或者某个HRegion的MemStore数据全部写入了文件系统,则重新转入 预备持久化状态。

HBase的数据节点在不同状态下执行的具体流程描述如下:

1、HBase的数据节点正常启动后,启动属于当前节点的持久化线程Flusher, 并把节点状态设置为空存储状态,随后开始侦听当前节点是否处于空闲状态, 进入步骤2;

2、等待并处理操作请求,如果HBase的数据节点收到写操作请求后,转入 步骤4;如果收到的是读操作请求,则转入步骤3;

3、把节点状态置为忙,响应读操作请求,保持节点原有状态不变;如果 原来状态为空存储状态,则转入步骤2;如果原来状态为预备持久化状态,则进 入步骤5;

4、把节点状态置为忙;随后处理写操作流程;写操作结束后节点状态变 成存储状态,如果没有读写请求,则开启一个新的空闲写过程,进入步骤5;如 果还有读写操作请求,执行步骤2;

5、进入预备持久化状态,如果当前待持久化队列为空,进入步骤2;否则 启动等待计时器,并继续侦听等待读写操作请求:如果有接收到读写操作请求, 重置Flusher线程包含的所有状态为初始值,结束当前的空闲写过程,执行步 骤2;如果计时器已经到时仍然没有操作请求和正在运行的任务,则继续进行当 前空闲写过程,重新执行步骤6。

6、进入持久化状态,执行持久化进程。根据Flusher线程当前状态,决定 需要写文件系统的对象:如果当前是一个新的空闲写过程,则把日志文件持久 化;如果正在继续运行一个原有的空闲写过程,则选择一个HRegion把其内存 中的数据持久化到文件系统。持久化进程结束后,进入步骤5。

根据上述说明书的揭示和教导,本发明所属领域的技术人员还可以对上述 实施方式进行变更和修改。因此,本发明并不局限于上面揭示和描述的具体实 施方式,对本发明的一些修改和变更也应当落入本发明的权利要求的保护范围 内。此外,尽管本说明书中使用了一些特定的术语,但这些术语只是为了方便 说明,并不对本发明构成任何限制。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号