一种基于插件化异构数据源的数仓海量数据的传输方法与流程

文档序号:33330538发布日期:2023-03-04 00:20阅读:41来源:国知局
一种基于插件化异构数据源的数仓海量数据的传输方法与流程

1.本发明涉及一种数据传输方法,特别是一种基于插件化异构数据源的数仓海量数据的传输方法,属于数仓技术领域。


背景技术:

2.数据批量传输场景是数仓和数据中台建设过程中重点场景之一,承载着源表汇聚贴源层,以及数仓向下游推送数据的任务,是数仓数据出入的核心工具。
3.现有技术中,数仓贴原层数据汇聚方案主要包含以datastage、kettle等工具为代表的技术方案,以dataloader+ftp/scp为代表的技术方案以及以datax、sqoop、flume为代表的技术方案。其中,以datastage、kettle等工具为代表的技术方案,是通过直连数据库的单机运行方式,是一种c/s的形式,适用于传统数据库迁移集成工作。以dataloader+ftp/scp为代表的技术方案,是通过数据库自带的数据卸载装载工具(dataloader),外加数据文件远程传输协议(ftp/scp),进行数仓的数据汇聚工作,这种方式是数仓业务的较为常用的方案之一。以datax,sqoop,flume为代表的技术方案,是通过多线程jdbc的方式进行数据的传输,具备通用性,但针对数仓贴源/增量剥离层的数据汇聚无专项优化操作。
4.现有技术的数据汇聚方案贴源层建设的效率低下,有必要针对现有技术的缺陷提供一种全新的数据传输方法,以提高数仓贴源层建设的效率。


技术实现要素:

5.本发明所要解决的技术问题是提供一种基于插件化异构数据源的数仓海量数据的传输方法,实现任务在集群运行并行度的灵活控制。
6.为解决上述技术问题,本发明所采用的技术方案是:一种基于插件化异构数据源的数仓海量数据的传输方法,其特征在于包含以下步骤:s1、生成统一的任务执行参数;s2、任务提交;s3、执行任务并将库表数据注册为内存映射表;s4、将数据进行清洗转换生成全新的内存映射表;s5、将数据写入hive表数据。
7.进一步地,所述步骤s1具体为:规定统一的json报文格式并进行任务执行参数的创建。
8.进一步地,所述步骤s2具体为:通过flink-framework.jar中的runjob主函数接收任务传参,解析json数据,确定本次传输任务的详细信息,组装flink-submit参数后,调用 flink提交命令进行任务提交。
9.进一步地,所述步骤s3具体为:flink集群接收到flink-submit的执行任务后,按照core主工程的jobstart的主函数逻辑进行运行,在执行reader函数前,通过classloader
动态加载机制和java的反射机制,加载mysql-reader.jar插件,然后以mysql-reader.jar实现reader函数的执行,读取mysql中的库表数据,并将其注册为flink集群中的内存映射表,方便使用flink-sql函数。
10.进一步地,所述步骤s4具体为:core主工程建立reader管道后,然后执行清洗转换函数transform,将json中的transform参数进行解析,并拼接成数据清洗的sql,内存映射表通过该转换函数的sql进行数据转换清洗操作,并生成全新的内存映射表。
11.进一步地,所述步骤s5具体为:清洗转换后的内存映射表中的数据按照core主工程的jobstart的主函数逻辑继续进行运行,并执行writer函数,通过classloader动态加载机制和java的反射机制,加载hive-writer.jar插件,然后以hive-writer.jar插件实现write函数的执行,写入hive表数据。
12.进一步地,当库表数据的源表为无日期字段时,无法通过sql的where条件确定每次入仓的增量数据的业务情况,flink-framework.jar在确认增量剥离标志为true的情况下,执行内存式增量剥离逻辑,修改flink-submit参数。
13.进一步地,修改flink-submit参数具体为:core的incrementstart主方法,首选执行reader函数,加载最新的源表数据t1,并同时执行snapshoot函数读取贴源层相同表名称的最新全量数据t2,使用flink-sql的差集计算函数(t1) except (t2),计算出t1相对于t2的增量,并将计算结果数据加载为内存映射表,然后执行transform函数进行数据清洗,最后执行writer函数进行数据的写入。
14.进一步地,依托于flink集群的运算节点,以及flink框架的分布式运算能力,任务执行的过程中进行多节点集群化运算。
15.进一步地,所述多节点集群化运算具体为:flink-framework.jar提交core工程,通过flink的client端执行flink-submit命令,将任务提交给集群运行;jobmanager集群管理器接收core工程以及任务参数后,通过并行度进行任务的task分配;taskmanager是task任务的管理器,负责具体任务的资源管理,以及分布在不同节点间的task任务通讯;task负责具体的运行core工程里的代码逻辑,并将结果最终返回给jobmanager。
16.本发明与现有技术相比,具有以下优点和效果:本发明提供了一种基于插件化异构数据源的数仓海量数据的传输方法,其能够多节点运行并且支持内存式增量剥离,有效提升了数仓贴源层建设的效率。
附图说明
17.图1是本发明的一种基于插件化异构数据源的数仓海量数据的传输方法的逻辑架构图。
18.图2是本发明的多节点集群化运算的示意图。
具体实施方式
19.为了详细阐述本发明为达到预定技术目的而所采取的技术方案,下面将结合本发
明实施例中的附图,对本发明实施例中的技术方案进行清晰、完整地描述,显然,所描述的实施例仅仅是本发明的部分实施例,而不是全部的实施例,并且,在不付出创造性劳动的前提下,本发明的实施例中的技术手段或技术特征可以替换,下面将参考附图并结合实施例来详细说明本发明。
20.如图1所示是本发明的一种基于插件化异构数据源的数仓海量数据的传输方法逻辑架构图。
21.其中,前端业务源库:核心系统、crm客户管理系统等面向业务的数据库,因数仓对接前置系统众多,数据库类型多样,本发明支持多种数据库的数据入仓功能,包含且不局限于:mysql,oracle,db2,sqlserver,file数据文件等。
22.数仓贴源层:数仓建设的特点是分层,贴源层要求数据与来源表保存高度一致性,方便业务人员追踪最初的数据情况。
23.flink集群:本发明代码使用flink框架进行编写,flink流行的分布式内存数据处理流式引擎,具有高吞吐、高可用、高性能的特点;flink集群是flink代码运行的环境。
24.数据传输通道:通过flink-submit提交的数据入仓任务,会在flink集群中进行实例化集群任务,并创建数据传输通道,进行数据的抽取、转换、写入的逻辑。
25.本发明的一种基于插件化异构数据源的数仓海量数据的传输方法,包含以下步骤:s1、生成统一的任务执行参数。
26.规定统一的json报文格式并进行任务执行参数的创建,创建的任务执行参数具有清晰的数据结构,并且可以自定义执行内容和方式,有效的提高任务的灵活程度。
27.s2、任务提交。
28.通过flink-framework.jar中的runjob主函数接收任务传参,解析json数据,确定本次传输任务的详细信息,组装flink-submit参数后,调用 flink提交命令进行任务提交。
29.s3、执行任务并将库表数据注册为内存映射表。
30.flink集群接收到flink-submit的执行任务后,按照core主工程的jobstart的主函数逻辑进行运行,在执行reader函数前,通过classloader动态加载机制和java的反射机制,加载mysql-reader.jar插件,然后以mysql-reader.jar实现reader函数的执行,读取mysql中的库表数据,并将其注册为flink集群中的内存映射表,方便使用flink-sql函数。
31.s4、将数据进行清洗转换生成全新的内存映射表。
32.core主工程建立reader管道后,然后执行清洗转换函数transform,将json中的transform参数进行解析,并拼接成数据清洗的sql,内存映射表通过该转换函数的sql进行数据转换清洗操作,并生成全新的内存映射表。
33.当库表数据的源表为无日期字段时,无法通过sql的where条件确定每次入仓的增量数据的业务情况,flink-framework.jar在确认增量剥离标志为true的情况下,执行内存式增量剥离逻辑,修改flink-submit参数。
34.修改flink-submit参数具体为:core的incrementstart主方法,首选执行reader函数,加载最新的源表数据t1,并同时执行snapshoot函数读取贴源层相同表名称的最新全量数据t2,使用flink-sql的差集计算函数(t1) except (t2),计算出t1相对于t2的增量,并将计算结果数据加载为内存映射表,然后执行transform函数进行数据清洗,最后执行
writer函数进行数据的写入。
35.s5、将数据写入hive表数据。
36.清洗转换后的内存映射表中的数据按照core主工程的jobstart的主函数逻辑继续进行运行,并执行writer函数,通过classloader动态加载机制和java的反射机制,加载hive-writer.jar插件,然后以hive-writer.jar插件实现write函数的执行,写入hive表数据。
37.本发明依托于flink集群的运算节点,以及flink框架的分布式运算能力,任务执行的过程中进行多节点集群化运算。
38.如图2所示,多节点集群化运算具体为:flink-framework.jar提交core工程,通过flink的client端执行flink-submit命令,将任务提交给集群运行;jobmanager集群管理器接收core工程以及任务参数后,通过并行度进行任务的task分配;taskmanager是task任务的管理器,负责具体任务的资源管理,以及分布在不同节点间的task任务通讯;task负责具体的运行core工程里的代码逻辑,并将结果最终返回给jobmanager。
39.本发明使用flink流式数据引擎作为底层数据处理框架,可通过数仓调度生成统一任务执行参数命令,并使用flink-sbmit提交任务参数至flink集群进行数据汇聚任务执行。任务执行逻辑由自研jar包工具实现,该工具使用flink编程框架,以插件化形式开发,主体分为core核心包,reader插件,writer插件,针对异构数据库的读写需要开发对应插件,这样做的好处是代码模块耦合度极大降低,聚合度高,并极大解决jar依赖冲突的问题。
40.本发明整个过程可以灵活控制任务在集群运行的并行度,读取数据源的连接数量,集群清洗规则以flink-sql形式进行编写,较大限度的保障任务执行的灵活性。本发明在业务领域上属于金融业数仓建设的贴源层应用,是数仓数据汇聚的底层技术支撑。海量数据是数仓的特点之一,海量数据的持续稳定的汇聚是数仓建设的关键,该方法在高效率、稳定性、易用性、拓展性上均有不俗的表现,是金融业数据汇聚的有效方法。
41.以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容做出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案内容,依据本发明的技术实质,在本发明的精神和原则之内,对以上实施例所作的任何简单的修改、等同替换与改进等,均仍属于本发明技术方案的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1