一种hive离线同步校验方法、装置及电子设备与流程

文档序号:19906745发布日期:2020-02-11 14:35阅读:327来源:国知局
一种hive离线同步校验方法、装置及电子设备与流程

本发明涉及计算机信息处理领域,具体而言,涉及一种hive离线同步校验方法、装置、电子设备及计算机可读介质。



背景技术:

随着计算机技术的不断发展和信息化程度的不断提高,互联网快速发展,网络信息呈指数级增长,海量数据存储及应用也随之蓬勃发展。

在大数据处理领域中,hive作为建立在hadoop上的开源数据仓库框架有着较为广泛的使用,其可以将结构化的数据文件映射为一张数据库表,并提供类sql语言hql的查询,可以方便的读取、写入和管理hadoop中的海量数据集,越来越多的数据存储电子设备以hive作为数据管理仓库和数据处理分析工具。hive采用的hql与数据库sql最大的区别就是数据库sql支持数据更新,hql却不支持,也就是hql无法对数据进行update(更新)、delete(删除),只能通过insert(插入)变相实现update、delete。这个变相的实现过程容易导致数据丢失,也因此会导致现有的hive离线同步工具在同步过程中在数据丢失的问题。



技术实现要素:

本发明旨在解决现有技术中hive离线同步过程中存在数据丢失的技术问题。

为了解决上述技术问题,本发明第一方面提出一种hive离线同步校验方法,所述方法包括:

分别获取hive表的增量流水数据表和增量数据表;

根据所述增量流水数据表和增量数据表对hive同步业务库数据进行校验。

在一种较佳的实施方式中,所述获取hive表的增量流水数据表包括:

通过canal同步业务库binlog到kafka;

通过流计算将binlog实时写到hive表中生成增量数据变更log;

根据所述增量数据变更log生成增量流水数据表。

在一种较佳的实施方式中,所述获取增量数据表包括:

通过datax/sqoop离线同步获取增量数据表。

在一种较佳的实施方式中,所述根据所述增量流水数据表和增量数据表对hive同步业务库数据进行校验包括:

对比所述增量流水数据表和增量数据表是否有差异;

若所述增量流水数据表和增量数据表有差异,确定所述增量数据表是否有数据缺失;

若所述增量数据表中有数据缺失,根据所述增量流水表补充所述增量数据表中的缺失数据。

在一种较佳的实施方式中,所述方法还包括:

根据补充后的增量数据表更新hive同步业务库数据。

在一种较佳的实施方式中,若所述增量流水数据表和增量数据表有差异,提示报警信息。

为解决上述技术问题,本发明第二方面提供一种hive离线同步校验装置,所述装置包括:

第一获取模块,用于获取hive表的增量流水数据表;

第二获取模块,用于获取hive表的增量数据表;

校验模块,用于根据所述增量流水数据表和增量数据表对hive同步业务库数据进行校验。

在一种较佳的实施方式中,所述第一获取模块包括:

同步模块,用于通过canal同步业务库binlog到kafka;

第一生成模块,用于通过流计算将binlog实时写到hive表中生成增量数据变更log;

第二生成模块,用于根据所述增量数据变更log生成增量流水数据表。

在一种较佳的实施方式中,所述第二获取模块具体用于通过datax/sqoop离线同步获取增量数据表。

在一种较佳的实施方式中,所述校验模块包括:

对比模块,用于对比所述增量流水数据表和增量数据表是否有差异;

确定模块,用于若所述增量流水数据表和增量数据表有差异,确定所述增量数据表是否有数据缺失;

补充模块,用于若所述增量数据表中有数据缺失,根据所述增量流水表补充所述增量数据表中的缺失数据。

在一种较佳的实施方式中,所述校验模块还包括:

更新模块,用于根据补充后的增量数据表更新hive同步业务库数据。

在一种较佳的实施方式中,所述校验模块还包括报警模块,用于若所述增量流水数据表和增量数据表有差异,提示报警信息。

为解决上述技术问题,本发明第三方面提供一种电子设备,包括:

处理器;以及

存储计算机可执行指令的存储器,所述计算机可执行指令在被执行时使所述处理器执行上述的方法。

为了解决上述技术问题,本发明第四方面提出一种计算机可读存储介质,其中,所述计算机可读存储介质存储一个或多个程序,当所述一个或多个程序被处理器执行时,实现上述方法。

本发明通过分别获取hive表的增量流水数据表和增量数据表;根据增量流水数据表和增量数据表对hive同步业务库数据进行校验,通过对比增量流水表和增量数据表的数据的差异,一旦发现数据丢失可及时补充hive同步业务库对应的数据,从校验机制上保证hive数据仓库的数据质量,达到金融业对数据一致性的要求。本发明的hive离线同步校验方法,根据增量流水数据表和增量数据表对hive同步业务库数据进行校验,能有效防止hive离线同步过程中数据的丢失,提高hive数据的一致性。

附图说明

为了使本发明所解决的技术问题、采用的技术手段及取得的技术效果更加清楚,下面将参照附图详细描述本发明的具体实施例。但需声明的是,下面描述的附图仅仅是本发明的示例性实施例的附图,对于本领域的技术人员来讲,在不付出创造性劳动的前提下,可以根据这些附图获得其他实施例的附图。

图1是本发明一种hive离线同步校验方法的流程图;

图2是本发明获取hive表的增量流水数据表的流程图;

图3a是本发明实施例源hive表示意图;

图3b是本发明实施例获取图3a中源hive表的增量流水数据表示意图;

图3c是本发明实施例获取图3a中源hive表的增量数据表示意图;

图3d是本发明实施例对图3c补充后的增量数据表示意图;

图4是本发明根据所述增量流水数据表和增量数据表对hive同步业务库数据进行校验步骤的流程图;

图5是本发明一种hive离线同步校验装置的结构框架示意图;

图6是根据本发明的一种电子设备的示例性实施例的结构框图;

图7是本发明一个计算机可读介质实施例的示意图。

具体实施方式

现在将参考附图来更加全面地描述本发明的示例性实施例,虽然各示例性实施例能够以多种具体的方式实施,但不应理解为本发明仅限于在此阐述的实施例。相反,提供这些示例性实施例是为了使本发明的内容更加完整,更加便于将发明构思全面地传达给本领域的技术人员。

在符合本发明的技术构思的前提下,在某个特定的实施例中描述的结构、性能、效果或者其他特征可以以任何合适的方式结合到一个或更多其他的实施例中。

在对于具体实施例的介绍过程中,对结构、性能、效果或者其他特征的细节描述是为了使本领域的技术人员对实施例能够充分理解。但是,并不排除本领域技术人员可以在特定情况下,以不含有上述结构、性能、效果或者其他特征的技术方案来实施本发明。

附图中的流程图仅是一种示例性的流程演示,不代表本发明的方案中必须包括流程图中的所有的内容、操作和步骤,也不代表必须按照图中所显示的的顺序执行。例如,流程图中有的操作/步骤可以分解,有的操作/步骤可以合并或部分合并,等等,在不脱离本发明的发明主旨的情况下,流程图中显示的执行顺序可以根据实际情况改变。

附图中的框图一般表示的是功能实体,并不一定必然与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。

各附图中相同的附图标记表示相同或类似的元件、组件或部分,因而下文中可能省略了对相同或类似的元件、组件或部分的重复描述。还应理解,虽然本文中可能使用第一、第二、第三等表示编号的定语来描述各种器件、元件、组件或部分,但是这些器件、元件、组件或部分不应受这些定语的限制。也就是说,这些定语仅是用来将一者与另一者区分。例如,第一器件亦可称为第二器件,但不偏离本发明实质的技术方案。此外,术语“和/或”、“及/或”是指包括所列出项目中的任一个或多个的所有组合。

如图1是本发明提供的一种hive离线同步校验方法的流程图,如图1所示,所述方法包括:

s1、分别获取hive表的增量流水数据表和增量数据表;

其中,hive是一种数据库技术,可以定义数据库和表来分析结构化数据。对结构化数据的分析是以hive表方式存储数据,并通过查询hive表来分析。因此,hive数据仓的数据是以hive表的方式存储和更新的。本实施例中,所述增量流水数据表用于记录对hive表的每一个修改,可以用于反映实际hive表的数据变更。所述增量数据表用于记录hive表的新增数据,增量数据是上次导出之后的新数据。

示例性的,如图2所示,所述获取hive表的增量流水数据表包括:

s201、通过canal同步业务库binlog到kafka;

其中,canal是一款开源项目,基于对数据库增量日志的解析,提供增量数据订阅&消费,根据增量数据订阅&消费获取增量变更实现数据同步。

binlog是记录业务库更改的二进制日志,可以用来查看业务库的变更历史(如在某一具体时间点所有的hql操作)、业务库增量备份和恢复(增量备份和基于时间点的恢复)、业务的复制(如主主业务库的复制、主从业务库的复制)。

kafka是一个分布式、分区的、多副本的、多订阅者的分布式日志系统。主要应用于日志收集系统和消息系统中。kafka采用发布-订阅模式基于可靠的消息队列,在客户端应用和消息系统之间异步传递消息。

具体的,本步骤通过canal解析binlog的数据,由同步客户端syncclient订阅,然后实时推送到kafka。如果kafka服务异常,syncclient会进行回滚操作;这样,canal、kafka的异常退出,都不会影响数据的传输。

s202、通过流计算将binlog实时写到hive表中生成增量数据变更log;

流计算实时获取binlog的海量数据,经过实时分析处理,获得有价值的信息,将该信息实时写到hive表中生成增量数据变更log。流计算秉承数据的价值随着时间的流逝而降低的理念(如用户点击流),当事件或数据出现时立即进行处理,而不是缓存起来进行批量处理。本发明通过流计算可保证增量数据变更log的实时性,进而保证增量流水数据表的实时性。

s203、根据所述增量数据变更log生成增量流水数据表。

具体的,根据增量数据变更log及源hive表形成对应于源hive表的增量流水数据表。其中,增量流水数据表记录源hive表增量数据变更情况,即记录对源hive表的修改情况。示例性的,图3a为源hive表,时间点a的数据记录abc、时间点b的数据记录abcrd、时间点c的数据记录abcdef,图3b为通过步骤s201~s203获取的增量流水数据表,记录了源hive表时间点a到时间点b的数据变更情况:删除c,增加crd,源hive表时间点b到时间点c的数据变更情况:插入ef。

本实施例中,所述增量数据表通过datax/sqoop离线同步获取。datax是一个异构数据源离线同步工具,致力于实现包括关系型数据库(mysql、oracle等)、hdfs、hive、odps、hbase、ftp等各种异构数据源之间稳定高效的数据同步功能。datax将复杂的网状的同步链路变成了星型数据链路,datax作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到datax,便能跟已有的数据源做到无缝数据同步。sqoop是一个用于在hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如mysql,oracle)导入数据到hadoophdfs,并从hadoop文件系统导出到关系数据库。

本实施例中,所述离线同步是指在预定时间点对hive源数据同步。具体的,datax直接在运行datax的机器上进行增量数据的抽取及加载,其主要原理为:通过reader插件读取源数据,writer插件写入数据到目标,使用job来控制同步作业。sqoop使用sql语句获取关系型数据库中的数据后,通过hadoop的mapreduce把数据从关系型数据库中导入数据到hdfs,其通过指定递增列或者根据时间戳达到增量数据导入的目的。图3c为通过datax/sqoop离线同步获取的增量数据表,记录了源hive表时间点a到时间点b的增加数据:d,源hive表时间点b到时间点c的增加数据:ef。

s2、根据所述增量流水数据表和增量数据表对hive同步业务库数据进行校验。

本步骤进行校验的目的是防止hive离线同步过程中的数据丢失,如图4所示,本步骤具体包括:

s401、对比所述增量流水数据表和增量数据表是否有差异;

以图3b中增量流水数据表和图3c中的增量数据表为例,图3b记录了源hive表时间点a到时间点b的数据变更情况:删除c,增加crd,图3c记录了源hive表时间点a到时间点b的增加数据:d;图3b记录源hive表时间点b到时间点c的数据变更情况:插入ef。图3c记录源hive表时间点b到时间点c的增加数据:ef。显然,在时间点b增量流水数据表和增量数据表记录有差异。

s402、若所述增量流水数据表和增量数据表有差异,确定所述增量数据表是否有数据缺失;

对比图3b与3c,在时间点b:增量流水数据表记录了数据r,而增量数据表未记录r,表明增量数据表有数据缺失。

s403、若所述增量流水数据表和增量数据表有差异,提示报警信息,

通过报警信息可以提示hive数据表同步过程中有数据错误或丢失。

上述步骤s402与步骤s403可同步执行也可异步执行,本发明不做具体限定。

s404、若所述增量数据表中有数据缺失,根据所述增量流水表补充所述增量数据表中的缺失数据。

具体的,将图3b中的数据r补充到图3c时间点b的数据位置,补充后的增量数据表如图3d所示。

s405、根据补充后的增量数据表更新hive同步业务库数据,实现hive数据同步的一致性。

图5是本发明一种hive离线同步校验装置的架构示意图,如图5所示,所述装置包括:

第一获取模块51,用于获取hive表的增量流水数据表;

第二获取模块52,用于获取hive表的增量数据表;

校验模块53,用于根据所述增量流水数据表和增量数据表对hive同步业务库数据进行校验。

在一种具体实施方式中,所述第一获取模块51进一步包括:

同步模块511,用于通过canal同步业务库binlog到kafka;

第一生成模块512,用于通过流计算将binlog实时写到hive表中生成增量数据变更log;

第二生成模块513,用于根据所述增量数据变更log生成增量流水数据表。

所述第二获取模块52具体用于通过datax/sqoop离线同步获取增量数据表。

所述校验模块53进一步的包括:

对比模块531,用于对比所述增量流水数据表和增量数据表是否有差异;

确定模块532,用于若所述增量流水数据表和增量数据表有差异,确定所述增量数据表是否有数据缺失;

补充模块533,用于若所述增量数据表中有数据缺失,根据所述增量流水表补充所述增量数据表中的缺失数据。

报警模块534,用于若所述增量流水数据表和增量数据表有差异,提示报警信息。

更新模块535,用于根据补充后的增量数据表更新hive同步业务库数据。

本领域技术人员可以理解,上述装置实施例中的各模块可以按照描述分布于装置中,也可以进行相应变化,分布于不同于上述实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。

下面描述本发明的电子设备实施例,该电子设备可以视为对于上述本发明的方法和装置实施例的实体形式的实施方式。对于本发明电子设备实施例中描述的细节,应视为对于上述方法或装置实施例的补充;对于在本发明电子设备实施例中未披露的细节,可以参照上述方法或装置实施例来实现。

图6是根据本发明的一种电子设备的示例性实施例的结构框图。图6显示的电子设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。

如图6所示,该示例性实施例的电子设备600以通用数据处理设备的形式表现。电子设备600的组件可以包括但不限于:至少一个处理单元610、至少一个存储单元620、连接不同电子设备组件(包括存储单元620和处理单元610)的总线630、显示单元640等。

其中,所述存储单元620存储有计算机可读程序,其可以是源程序或都只读程序的代码。所述程序可以被处理单元610执行,使得所述处理单元610执行本发明各种实施方式的步骤。例如,所述处理单元610可以执行如图1所示的步骤。

所述存储单元620可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(ram)6201和/或高速缓存存储单元6202,还可以进一步包括只读存储单元(rom)6203。所述存储单元620还可以包括具有一组(至少一个)程序模块6205的程序/实用工具6204,这样的程序模块6205包括但不限于:操作电子设备、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。

总线630可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。

电子设备600也可以与一个或多个外部设备300(例如键盘、显示器、网络设备、蓝牙设备等)通信,使得用户能经由这些外部设备600与该电子设备600交互,和/或使得该电子设备600能与一个或多个其它数据处理设备(例如路由器、调制解调器等等)进行通信。这种通信可以通过输入/输出(i/o)接口650进行,还可以通过网络适配器660与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)进行。网络适配器660可以通过总线630与电子设备600的其它模块通信。应当明白,尽管图6中未示出,电子设备600中可使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid电子设备、磁带驱动器以及数据备份存储电子设备等。

图7是本发明的一个计算机可读介质实施例的示意图。如图7所示,所述计算机程序可以存储于一个或多个计算机可读介质上。计算机可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的电子设备、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。当所述计算机程序被一个或多个数据处理设备执行时,使得该计算机可读介质能够实现本发明的上述方法,即:分别获取hive表的增量流水数据表和增量数据表;根据所述增量流水数据表和增量数据表对hive同步业务库数据进行校验。

通过以上的实施方式的描述,本领域的技术人员易于理解,本发明描述的示例性实施例可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本发明实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个计算机可读的存储介质(可以是cd-rom,u盘,移动硬盘等)中或网络上,包括若干指令以使得一台数据处理设备(可以是个人计算机、服务器、或者网络设备等)执行根据本发明的上述方法。

所述计算机可读存储介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读存储介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行电子设备、装置或者器件使用或者与其结合使用的程序。可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、rf等等,或者上述的任意合适的组合。

可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、c++等,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(lan)或广域网(wan),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。

综上所述,本发明可以执行计算机程序的方法、装置、电子设备或计算机可读介质来实现。可以在实践中使用微处理器或者数字信号处理器(dsp)等通用数据处理设备来实现本发明的一些或者全部功能。

以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,应理解的是,本发明不与任何特定计算机、虚拟装置或者电子设备固有相关,各种通用装置也可以实现本发明。以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1