掌桥专利:专业的专利平台
掌桥专利
首页

HBase的全量数据导入方法、装置、计算机设备及存储介质

文献发布时间:2023-06-19 10:00:31


HBase的全量数据导入方法、装置、计算机设备及存储介质

技术领域

本发明涉及数据处理技术领域,特别涉及一种HBase的全量数据导入方法、装置、计算机设备及存储介质。

背景技术

目前,开源HBase自带的数据离线导入功能,提供了两种不同的数据导入方式,第一种是直接导入离线数据,第二种是执行清表操作后再导入离线数据。

其中,第一种数据导入方式,在待导入数据的数据表中有大量的历史数据或频繁导入全量离线数据的情况下,会导致服务端做数据合并操作,进而导致服务器写放大问题,严重影响HBase集群的稳定性;第二种数据导入方式,需要在数据表清表后再导入离线数据,会导致在清表期间数据表的不可用,随着表历史数据的增加,服务中断时间也会随之变长。

综上所述,亟需提出一种新的数据导入方法,以解决上述问题。

发明内容

为了解决现有技术的问题,本发明实施例提供了一种HBase的全量数据导入方法、装置、计算机设备以及存储介质,以克服现有技术中存在的在数据表清表后再导入离线数据而导致的在清表期间数据表的不可用,以及随着表历史数据的增加,服务中断时间也会随之变长等问题。

为解决上述一个或多个技术问题,本发明采用的技术方案是:

第一方面,提供了一种HBase的全量数据导入方法,该方法包括如下步骤:

接收数据导入请求,根据所述数据导入请求在目标数据库中确定待导入数据对应的目标数据表,所述目标数据库包括HBase数据库;

将所述目标数据表对应的历史数据文件缓存至预设的内存容器中;

将待导入数据导入到目标数据库中;

将所述历史数据文件从所述内存容器删除。

进一步的,所述将所述目标数据表对应的历史数据文件缓存至预设的内存容器中包括:

在所述目标数据库中确定内存容器,将所述目标数据表对应的历史数据文件缓存至所述内存容器中。

进一步的,所述将所述历史数据文件从所述内存容器删除包括:

遍历所述内存容器中的所述历史数据文件,判断每一所述历史数据文件是否被占用,若未被占用则将所述历史数据文件进行物理删除,否则,放弃本次删除操作。

进一步的,所述将所述历史数据文件从所述内存容器删除包括:

给所述目标数据表的region添加写锁后,将所述历史数据文件从所述内存容器删除。

进一步的,所述数据导入请求包括清理历史数据参数,所述将所述目标数据表对应的历史数据文件缓存至预设的内存容器中包括:

当识别到所述数据导入请求中包括清理历史数据参数时,将所述目标数据表对应的历史数据文件缓存至预设的内存容器中。

进一步的,所述方法还包括:

定时检测所述目标数据库中的数据量,若所述数据量超过预设阈值,则对所述目标数据库中的数据文件执行合并操作,所述数据文件包括所述历史数据文件以及已导入所述目标数据库中的待导入数据。

进一步的,所述将待导入数据导入到目标数据库中包括:

将待导入数据写入到所述目标数据表对应的region目录下。

第二方面,提供了一种HBase的全量数据导入装置,所述装置包括:

数据表确定模块,用于接收数据导入请求,根据所述数据导入请求在目标数据库中确定待导入数据对应的目标数据表,所述目标数据库包括HBase数据库;

数据缓存模块,用于将所述目标数据表对应的历史数据文件缓存至预设的内存容器中;

数据导入模块,用于将待导入数据导入到目标数据库中;

数据删除模块,用于将所述历史数据文件从所述内存容器删除。

第三方面,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如下步骤:

接收数据导入请求,根据所述数据导入请求在目标数据库中确定待导入数据对应的目标数据表,所述目标数据库包括HBase数据库;

将所述目标数据表对应的历史数据文件缓存至预设的内存容器中;

将待导入数据导入到目标数据库中;

将所述历史数据文件从所述内存容器删除。

第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现如下步骤:

接收数据导入请求,根据所述数据导入请求在目标数据库中确定待导入数据对应的目标数据表,所述目标数据库包括HBase数据库;

将所述目标数据表对应的历史数据文件缓存至预设的内存容器中;

将待导入数据导入到目标数据库中;

将所述历史数据文件从所述内存容器删除。

本发明实施例提供的技术方案带来的有益效果是:

本发明实施例提供的HBase的全量数据导入方法、装置、计算机设备及存储介质,通过接收数据导入请求,根据所述数据导入请求在目标数据库中确定待导入数据对应的目标数据表,所述目标数据库包括HBase数据库,将所述目标数据表对应的历史数据文件缓存至预设的内存容器中,将待导入数据导入到目标数据库中,将所述历史数据文件从所述内存容器删除,不需要对待导入数据的数据表执行清表操作,保证数据表始终在线一直对外提供服务,对于用户服务无感知,避免了服务中断问题,同时减少了数据库中的合并操作,大大降低了服务端的IO压力,防止出现写入放大的问题,保证了服务的稳定性。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是根据一示例性实施例示出现有技术中的全量数据导入方法的工作原理图;

图2是根据一示例性实施例示出的本发明的全量数据导入方法的工作原理图;

图3是根据一示例性实施例示出的HBase的全量数据导入方法的流程图;

图4是根据一示例性实施例示出的HBase的全量数据导入方法的流程图;

图5是根据一示例性实施例示出的HBase的全量数据导入装置的结构示意图;

图6是根据一示例性实施例示出的计算机设备的内部结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

如背景技术所述,HBase上用户需要定时导入大量的全量离线数据,目前的数据导入方式有两种,一种是直接导入,一种是清表后再导入。一方面,直接导入全量数据,会触发相关数据表的合并(Compaction)操作,占用服务器大量的IO的资源,导致请求高延迟甚至阻塞;另一方面,图1是根据一示例性实施例示出现有技术中的全量数据导入方法的工作原理图,参照图1所示,由于清表操作需要将数据表先下线,清表完成后再上线,因此,若是清表后再导入,会导致在清表期间数据表的不可用,从而使得服务中断。

为解决上述问题,本发明实施例中创造性的提出了一种HBase的全量数据导入方法,该方法在HBase数据库中执行全量数据导入操作时,先将历史数据文件缓存在一个预先定义的内存容器中,然后再执行全量离线数据的导入,导入完成后将内存容器中的历史数据文件清除,这样操作,一方面能直接避免服务端进行合并(Compaction)操作,另一方面,也不需要对数据表进行清表操作,可以保证待导入数据的数据表一直对外提供服务,保证了服务的稳定性。图2是根据一示例性实施例示出的本发明的全量数据导入方法的工作原理图,参照图2所示,该系统包括但不限于客户端和HBase集群,其中,图1和图2中的部分名词解释如下

Client:客户端,这里指的是用户导入离线数据的执行机器;

rpc:客户端向RegionServer发起的离线数据导入请求,采用rpc的方式实现;

RegionServer:HBase集群的一个角色,负责table数据的实际读写,管理表的region;

bulkload:服务端RegionServer执行的具体方法总称;

save:保存当前的历史数据文件;

move:文件转移操作,将用户需要导入的离线数据转移到region目录下面;

load:打开并加载本次导入文件;

clear:删除之前save所保存的历史数据文件。

实施例一

图3是根据一示例性实施例示出的HBase的全量数据导入方法的流程图,参照图3所示,上述方案可通过如下步骤实现:

步骤一:客户端导入离线数据设置清除历史数据参数开关,开关默认关闭;

具体的,可以通过客户端设置清除历史数据参数开关,该清除历史数据参数开关可以在数据导入请求中一起发送至服务端。该参数开关用于指示是否需要清除历史数据,参数开关为开启时说明需要清除历史数据,参数开关为关闭时说明不需要清除历史数据。本发明实施例中,当需要执行全量数据导入操作时,清除历史数据参数开关为开启,其他数据导入操作(如增量数据导入)时清除历史数据参数开关为关闭。

步骤二、客户端发起离线数据导入请求;

具体的,当需要导入离线数据时,用户可以通过客户端向HBase集群发起离线数据导入请求,若是全量数据,则在数据导入请求中携带的清除历史数据参数开关为开启。

进一步参照图2可知,作为一种较优的实施方式,本发明实施例中,数据导入请求可以采用rpc方式实现,即在客户端和服务端之间可以通过bulkload的对应rpc请求进行相互通信的,因而首先需要修改该rpc请求,使得它可以支持清除历史数据参数设置。其次用户提交数据导入时间时是通过命令行的方式,故需要在命令行的入口方法中添加对应清除历史数据参数的设置方式。

步骤三、服务端接收到用户离线数据导入请求,检查该请求中携带的清除历史数据开关。

具体的,服务端在接收到用户通过客户端发送来的数据导入请求后,对该请求进行解析,从解析结果中获取其携带的清除历史数据开关,若是为开启,则说明需要清除历史数据,若是为关闭,则说明不需要清除历史数据。除此之外,还需要根据数据导入请求确定待导入数据对应的目标数据表。

步骤四、若是检测到清除历史数据开关为开启,则将历史数据文件存储于预设的内存容器中;

具体的,若是检测到清除历史数据开关为开启,则说明此次数据导入请求对应的是全量数据导入,需要清除历史数据文件。一方面,由于直接导入全量数据会使服务端做大量的合并操作,从而导致服务器写放大问题,影响服务的稳定性,另一方面,由于清表后再执行数据导入会导致数据表在清表期间的不可用,使得服务中断。解决上述问题,本发明实施例中,在执行全量数据导入时,会先将历史数据文件存储于预设的内存容器中。具体实施时,可以在服务端开辟内存容器(filesToClear),将历史数据文件缓存至该内存容器中,避免历史数据文件和当前导入的离线数据混淆。在将历史数据文件缓存至内存容器中时,可以遍历目标数据表在当前节点region中的所有历史数据文件并保存至内存容器中。

步骤五、执行离线数据导入;

具体的,将待导入数据(hfile)转移到目标数据表当前的region下面,同时加载hfile。

步骤六、将历史数据文件从内存容器中删除;

具体的,数据导入完成后,遍历内存容器中的历史数据文件,处理每个历史数据文件。

由于合并操作(compaction)是异步的,在保存历史数据文件列表和删除文件之间可能会被触发。因此,具体实施时,首先检查该历史数据文件是否还存在,因为有可能在离线数据导入期间自动触发合并操作,已经被regionsever自动删除。其次,剔除已被加入到待合并文件容器中的历史数据文件。在离线数据导入期间,有可能regionsever触发了合并操作,此时待合并的历史数据文件会被合并操作引用,就会被加入到待合并文件容器中,此时,不能直接删除该历史数据文件,需等其完成合并后再将其删除,防止出错。最后,将所有历史数据文件进行关闭操作后再删除。

步骤七、服务端向客户端反馈执行成功。

具体的,在完成离线数据导入以及历史数据清除后,服务端向客户端返回执行成功的反馈信息。

这里需要说明的是,通常HBase中的合并(Compaction)操作的触发有两种方式,一种是客户端主动调用admin相关的接口,另外一种是服务端的定时任务自动检测(例如,默认每10s执行一次)。如果在Compaction的定时任务中发现本次需要执行Compaction(比如当文件个数超过预设数量,或者文件总大小超过预设阈值时),将会生成一个合并任务并异步提交到线程池中执行。数据导入操作和历史数据清理操作之间的间隔越短,那么触发Compaction的几率就越低,根据上面的步骤我们可以知道,在步骤五和步骤六之间的操作是毫秒级别的,故Compaction的触发几率会大大降低,因而大大降低了服务端的IO压力,防止出现写入放大问题,提升了服务的稳定性。

图4是根据一示例性实施例示出的HBase的全量数据导入方法的流程图,参照图4所示,该方法包括如下步骤:

S1:接收数据导入请求,根据所述数据导入请求在目标数据库中确定待导入数据对应的目标数据表,所述目标数据库包括HBase数据库;

S2:将所述目标数据表对应的历史数据文件缓存至预设的内存容器中;

S3:将待导入数据导入到目标数据库中;

S4:将所述历史数据文件从所述内存容器删除.

具体的,本发明实施例中,再执行全量数据导入操作时,将待导入数据对应的目标数据表对应的历史数据文件缓存至预设的内存容器中,避免历史数据文件与和当前导入的离线数据混淆,一方面可以减少服务端合并操作的触发,另一方面,不需要先执行清表操作,从而避免数据表的不可用导致的服务中断。

作为一种较优的实施方式,本发明实施例中,所述将所述目标数据表对应的历史数据文件缓存至预设的内存容器中包括:

在所述目标数据库中确定内存容器,将所述目标数据表对应的历史数据文件缓存至所述内存容器中。

具体的,内存容器可以实在目标数据库中(即服务端)开辟的一存储空间,后续在将历史数据文件删除后,可再将该内存容器释放掉。

作为一种较优的实施方式,本发明实施例中,所述将所述历史数据文件从所述内存容器删除包括:

遍历所述内存容器中的所述历史数据文件,判断每一所述历史数据文件是否被占用,若未被占用则将所述历史数据文件进行物理删除,否则,放弃本次删除操作。

具体的,由于合并操作(compaction)是异步的,因此在保存历史数据文件列表和删除文件之间可能会被触发。在清除历史数据文件前,需要先判断该历史数据文件是否被合并操作占用,若有,则放弃本次删除操作,保留所述历史数据文件,防止出错。被合并操作占用的历史数据文件在合并操作完成后,会被自动被删除。这里需要说明的是,本发明实施例中,物理删除指文件存储所用到的磁存储区域被真正的擦除或清零,这样删除的文件是不可以恢复的。

作为一种较优的实施方式,本发明实施例中,所述将所述历史数据文件从所述内存容器删除包括:

给所述目标数据表的region添加写锁后,将所述历史数据文件从所述内存容器删除。

具体的,在删除文件之前需要获取写锁,同时阻塞用户读取,防止用户误读待会将被删除的历史数据文件。

作为一种较优的实施方式,本发明实施例中,所述数据导入请求包括清理历史数据参数,所述将所述目标数据表对应的历史数据文件缓存至预设的内存容器中包括:

当识别到所述数据导入请求中包括清理历史数据参数时,将所述目标数据表对应的历史数据文件缓存至预设的内存容器中。

具体的,可以在数据导入请求中设置清除历史数据参数开关,该参数开关用于指示是否需要清除历史数据,参数开关为开启时说明需要清除历史数据,参数开关为关闭时说明不需要清除历史数据。本发明实施例中,当需要执行全量数据导入操作时,清除历史数据参数开关为开启,其他数据导入操作(如增量数据导入)时清除历史数据参数开关为关闭。

作为一种较优的实施方式,本发明实施例中,所述方法还包括:

定时检测所述目标数据库中的数据量,若所述数据量超过预设阈值,则对所述目标数据库中的数据文件执行合并操作,所述数据文件包括所述历史数据文件以及已导入所述目标数据库中的待导入数据。

作为一种较优的实施方式,本发明实施例中,所述将待导入数据导入到目标数据库中包括:

将待导入数据写入到所述目标数据表对应的region目录下。

图5是根据一示例性实施例示出的HBase的全量数据导入装置的结构示意图,该装置包括:

数据表确定模块,用于接收数据导入请求,根据所述数据导入请求在目标数据库中确定待导入数据对应的目标数据表,所述目标数据库包括HBase数据库;

数据缓存模块,用于将所述目标数据表对应的历史数据文件缓存至预设的内存容器中;

数据导入模块,用于将待导入数据导入到目标数据库中;

数据删除模块,用于将所述历史数据文件从所述内存容器删除。

作为一种较优的实施方式,本发明实施例中,所述数据缓存模块具体用于:

在所述目标数据库中确定内存容器,将所述目标数据表对应的历史数据文件缓存至所述内存容器中。

作为一种较优的实施方式,本发明实施例中,所述数据删除模块具体用于:

遍历所述内存容器中的所述历史数据文件,判断每一所述历史数据文件是否被占用,若未被占用则将所述历史数据文件进行物理删除,否则,放弃本次删除操作。

作为一种较优的实施方式,本发明实施例中,所述数据删除模块还具体用于:

给所述目标数据表的region添加写锁后,将所述历史数据文件从所述内存容器删除。

作为一种较优的实施方式,本发明实施例中,所述数据缓存模块还具体用于:

当识别到所述数据导入请求中包括清理历史数据参数时,将所述目标数据表对应的历史数据文件缓存至预设的内存容器中。

作为一种较优的实施方式,本发明实施例中,所述装置还包括:

数据合并模块,用于定时检测所述目标数据库中的数据量,若所述数据量超过预设阈值,则对所述目标数据库中的数据文件执行合并操作,所述数据文件包括所述历史数据文件以及已导入所述目标数据库中的待导入数据。

作为一种较优的实施方式,本发明实施例中,所述数据导入模块具体用于:

将待导入数据写入到所述目标数据表对应的region目录下。

图6是根据一示例性实施例示出的计算机设备的内部结构示意图,参照图6所示,该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种执行计划的优化方法。

本领域技术人员可以理解,图6中示出的结构,仅仅是与本发明方案相关的部分结构的框图,并不构成对本发明方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

作为一种较优的实施方式,本发明实施例中,计算机设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:

接收数据导入请求,根据所述数据导入请求在目标数据库中确定待导入数据对应的目标数据表,所述目标数据库包括HBase数据库;

将所述目标数据表对应的历史数据文件缓存至预设的内存容器中;

将待导入数据导入到目标数据库中;

将所述历史数据文件从所述内存容器删除。

作为一种较优的实施方式,本发明实施例中,处理器执行计算机程序时还实现以下步骤:

在所述目标数据库中确定内存容器,将所述目标数据表对应的历史数据文件缓存至所述内存容器中。

作为一种较优的实施方式,本发明实施例中,处理器执行计算机程序时还实现以下步骤:

遍历所述内存容器中的所述历史数据文件,判断每一所述历史数据文件是否被占用,若未被占用则将所述历史数据文件进行物理删除,否则,放弃本次删除操作。

作为一种较优的实施方式,本发明实施例中,处理器执行计算机程序时还实现以下步骤:

给所述目标数据表的region添加写锁后,将所述历史数据文件从所述内存容器删除。

作为一种较优的实施方式,本发明实施例中,处理器执行计算机程序时还实现以下步骤:

当识别到所述数据导入请求中包括清理历史数据参数时,将所述目标数据表对应的历史数据文件缓存至预设的内存容器中。

作为一种较优的实施方式,本发明实施例中,处理器执行计算机程序时还实现以下步骤:

定时检测所述目标数据库中的数据量,若所述数据量超过预设阈值,则对所述目标数据库中的数据文件执行合并操作,所述数据文件包括所述历史数据文件以及已导入所述目标数据库中的待导入数据。

作为一种较优的实施方式,本发明实施例中,处理器执行计算机程序时还实现以下步骤:

将待导入数据写入到所述目标数据表对应的region目录下。

本发明实施例中,还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现如下步骤:

接收数据导入请求,根据所述数据导入请求在目标数据库中确定待导入数据对应的目标数据表,所述目标数据库包括HBase数据库;

将所述目标数据表对应的历史数据文件缓存至预设的内存容器中;

将待导入数据导入到目标数据库中;

将所述历史数据文件从所述内存容器删除。

作为一种较优的实施方式,本发明实施例中,所述计算机程序被处理器执行时,还实现如下步骤:

在所述目标数据库中确定内存容器,将所述目标数据表对应的历史数据文件缓存至所述内存容器中。

作为一种较优的实施方式,本发明实施例中,所述计算机程序被处理器执行时,还实现如下步骤:

遍历所述内存容器中的所述历史数据文件,判断每一所述历史数据文件是否被占用,若未被占用则将所述历史数据文件进行物理删除,否则,放弃本次删除操作。

作为一种较优的实施方式,本发明实施例中,所述计算机程序被处理器执行时,还实现如下步骤:

给所述目标数据表的region添加写锁后,将所述历史数据文件从所述内存容器删除。

作为一种较优的实施方式,本发明实施例中,所述计算机程序被处理器执行时,还实现如下步骤:

当识别到所述数据导入请求中包括清理历史数据参数时,将所述目标数据表对应的历史数据文件缓存至预设的内存容器中。

作为一种较优的实施方式,本发明实施例中,所述计算机程序被处理器执行时,还实现如下步骤:

定时检测所述目标数据库中的数据量,若所述数据量超过预设阈值,则对所述目标数据库中的数据文件执行合并操作,所述数据文件包括所述历史数据文件以及已导入所述目标数据库中的待导入数据。

作为一种较优的实施方式,本发明实施例中,所述计算机程序被处理器执行时,还实现如下步骤:

将待导入数据写入到所述目标数据表对应的region目录下。

综上所述,本发明实施例提供的技术方案带来的有益效果是:

本发明实施例提供的HBase的全量数据导入方法、装置、计算机设备及存储介质,通过接收数据导入请求,根据所述数据导入请求在目标数据库中确定待导入数据对应的目标数据表,所述目标数据库包括HBase数据库,将所述目标数据表对应的历史数据文件缓存至预设的内存容器中,将待导入数据导入到目标数据库中,将所述历史数据文件从所述内存容器删除,不需要对待导入数据的数据表执行清表操作,保证数据表始终在线一直对外提供服务,对于用户服务无感知,避免了服务中断问题,同时减少了数据库中的合并操作,大大降低了服务端的IO压力,防止出现写入放大的问题,保证了服务的稳定性。

需要说明的是:上述实施例提供的HBase的全量数据导入装置在触发数据导入业务时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的HBase的全量数据导入装置与HBase的全量数据导入方法实施例属于同一构思,即该装置是基于该HBase的全量数据导入方法的,其具体实现过程详见方法实施例,这里不再赘述。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

相关技术
  • HBase的全量数据导入方法、装置、计算机设备及存储介质
  • 全量数据迁移方法、装置、设备及计算机可读存储介质
技术分类

06120112379764