一种Flink框架运行ETL的流程分解方法和装置制造方法及图纸

技术编号:33202974 阅读:16 留言:0更新日期:2022-04-24 00:43
本发明专利技术涉及数据处理技术领域,提供了一种Flink框架运行ETL的流程分解方法和装置。本发明专利技术专利就ETL流程翻译转化成flink API语句操作算子链提供了一种高效稳定便利方法。不用在操作算子Function重新实现数据处理逻辑代码,不破坏流程的完整性,基本保存单服务器版ETL流程原有的顺序性,并且与单服务器ETL DAG运行逻辑一致,完全重用ETL运行流程逻辑实现;既可以使用Flink内置的算子提供的Function或内置的connector提供的Function,又可以完全使用ETL组件进行数据的计算处理;任何ETL流程都可以翻译转化成Flink API语句的操作算子链,提交给Flink框架执行,具备通用便利性,完全避免flink算子函数中人工编写数据处理逻辑代码。码。码。

【技术实现步骤摘要】
一种Flink框架运行ETL的流程分解方法和装置


[0001]本专利技术涉及数据处理
,特别是涉及一种Flink框架运行ETL的流程分解方法和装置。

技术介绍

[0002]ETL是数据处理、构建数据仓库的一个重要工具软件,它完成异构数据源的抽取、清洗转换,然后加载的一个过程。传统的ETL一般是把流程发布到一个集中的ETL服务器节点上运行,所有的流程或流程内组件的运行采用多线程机制,再多的流程也只能在一个单一节点运行,并且一个大数据的处理流程,也无法提高数据处理的性能。
[0003]Flink大数据平台在大数据处理中已经取得相当广泛的应用,是一个分布式处理引擎框架,用于对无界和有界数据流进行有状态计算,具备极高的故障恢复性能和容错性能。
[0004]如果ETL流程能够提交到Flink框架运行,可以极大提高流程并发执行能力,并且可以充分利用流式处理的有状态计算来提高流程运行稳定可靠性。
[0005]由于Flink提交任务需要构建一个Source Stream

>transform Stream

>Stream Sink的操作,因此,现有技术中若要将ETL流程直接在Flink的Source Stream

>transform Stream

>Stream Sink的操作中实现,必定会涉及重新实现数据处理逻辑代码,需要破坏ETL流程的完整性。
[0006]鉴于此,克服该现有技术所存在的缺陷是本
亟待解决的问题。

技术实现思路

[0007]本专利技术要解决的技术问题是提供一种Flink框架运行ETL的流程分解方法。
[0008]本专利技术进一步要解决的技术问题是提供一种Flink框架运行ETL的流程分解装置。
[0009]本专利技术采用如下技术方案:
[0010]第一方面,一种Flink框架运行ETL的流程分解方法和装置,流程分解方法包括:
[0011]遍历ETL的有向无环图DAG,识别出一个或者多个Splitting属性的节点;其中,所述Splitting属性节点包括数据源节点、FLINK_MESSAGE_SHARED_NODE属性的节点与需要转化为Flink算子的节点中的一个或者多个;
[0012]按照ETL流程DAG有向无环图节点先后顺序,从数据源节点开始,以相邻的两个所述Splitting属性的节点作为依据,生成由相邻的两个所述Splitting属性的节点之间的一个或者多个ETL节点以及节点之间的连接线构成的ETL流程子集,在Flink算子中使用;构造所述两个相邻Splitting属性的节点之间所对应的flink API语句操作算子链;
[0013]其中,在生成所述子集过程中,为每一个所述ETL流程子集分别构建TYPE_FLINK_PROCESS_SOURCE节点用于接收上一个Flink算子输出的数据集或者数据流,以及TYPE_FLINK_PROCESS_SINK节点用于将ETL流程子集转换处理后的数据发送给下一个flink算子;从而将ETL的处理过程承载到Flink框架中完成。
[0014]优选的,所述的需要转化为Flink算子的节点具体包括FLINK_REDUCE_NODE属性的节点与FLINK_CONNECTOR_NODE属性的节点;
[0015]搜索出ETL流程中所有的需要转化为Flink算子的节点,所述节点的上游一直到数据源节点的路由线设置为FLINK_MESSAGE_SHARED_ROUTER属性。
[0016]优选的,数据源节点开始,如果节点存在至少两个分支路由线,并且有至少两个分支路由线被设置为FLINK_MESSAGE_SHARED_ROUTER属性,则所述节点为FLINK_MESSAGE_SHARED_NODE属性的节点,设置FLINK_MESSAGE_SHARED_NODE属性;
[0017]其中需要转化为Flink算子的节点不设置为FLINK_MESSAGE_SHARED_NODE节点。
[0018]优选的,遍历ETL的有向无环图DAG,识别出数据源节点、FLINK_REDUCE_NODE属性的节点与FLINK_CONNECTOR_NODE属性的节点,并根据所述FLINK_REDUCE_NODE属性的节点与FLINK_CONNECTOR_NODE属性的节点识别出所有FLINK_MESSAGE_SHARED_NODE属性的节点,将所述数据源节点、FLINK_REDUCE_NODE属性的节点、FLINK_CONNECTOR_NODE属性的节点与FLINK_MESSAGE_SHARED_NODE属性的节点设置为Splitting属性的节点
[0019]以相邻的两个所述Splitting属性的节点作为依据,生成由相邻的两个所述Splitting属性的节点之间的一个或者多个ETL节点构成的子集。
[0020]优选的,所述Flink算子被调用时,构造所述ETL流程子集的DAG并运行;所述相邻Splitting属性的节点之间构造一条flink API操作算子链,所述相邻Splitting属性的节点中的前一个Splitting属性的节点对应的flink算子的输出数据流或数据集作为所述flink API操作算子链的输入,所述flink API操作算子链的输入后续构造一个使用所述ETL流程子集的Flink算子。
[0021]优选的,当所述相邻Splitting属性的节点中的后一个Splitting属性的节点为FLINK_MESSAGE_SHARED_NODE属性的节点时,所述后一个Splitting属性的节点不转化为对应的Flink算子;
[0022]当所述相邻Splitting属性的节点中的后一个Splitting属性的节点不为FLINK_MESSAGE_SHARED_NODE属性的节点时,所述后一个Splitting属性的节点需要转化为对应的flink算子,所述flink算子输入为两个相邻Splitting属性的节点之间ETL流程子集的Flink算子的输出。
[0023]优选的,当所述Flink算子输出的是数据集类型时,相应ETL流程子集在flatMap算子的ETLDataSetProcessFunction中处理,方法具体包括:
[0024]所述ETLDataSetProcessFunction派生于Flink的RichFlatMapFunction;重定义RichFlatMapFunction的flatMap函数功能,所述RichFlatMapFunction接收一条数据消息message后,直接通过消息队列存取的方式发送给所述ETLDataSetProcessFunction在open函数初始化并启动的ETL流程子集运行中的数据源节点TYPE_FLINK_PROCESS_SOURCE组件,然后由ETL流程子集进行计本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种Flink框架运行ETL的流程分解方法,其特征在于,流程分解方法包括:遍历ETL的有向无环图DAG,识别出一个或者多个Splitting属性的节点;其中,所述Splitting属性节点包括数据源节点、FLINK_MESSAGE_SHARED_NODE属性的节点与需要转化为Flink算子的节点中的一个或者多个;按照ETL流程DAG有向无环图节点先后顺序,从数据源节点开始,以相邻的两个所述Splitting属性的节点作为依据,生成由相邻的两个所述Splitting属性的节点之间的一个或者多个ETL节点以及节点之间的连接线构成的ETL流程子集,在Flink算子中使用;构造所述两个相邻Splitting属性的节点之间所对应的flink API语句操作算子链;其中,在生成所述子集过程中,为每一个所述ETL流程子集分别构建TYPE_FLINK_PROCESS_SOURCE节点用于接收上一个Flink算子输出的数据集或者数据流,以及TYPE_FLINK_PROCESS_SINK节点用于将ETL流程子集转换处理后的数据发送给下一个flink算子;从而将ETL的处理过程承载到Flink框架中完成。2.根据权利要求1所述的Flink框架运行ETL的流程分解方法,其特征在于,所述的需要转化为Flink算子的节点具体包括FLINK_REDUCE_NODE属性的节点与FLINK_CONNECTOR_NODE属性的节点;搜索出ETL流程中所有的需要转化为Flink算子的节点,所述节点的上游一直到数据源节点的路由线设置为FLINK_MESSAGE_SHARED_ROUTER属性。3.根据权利要求2所述的Flink框架运行ETL的流程分解方法,其特征在于,数据源节点开始,如果节点存在至少两个分支路由线,并且有至少两个分支路由线被设置为FLINK_MESSAGE_SHARED_ROUTER属性,则所述节点为FLINK_MESSAGE_SHARED_NODE属性的节点,设置FLINK_MESSAGE_SHARED_NODE属性;其中需要转化为Flink算子的节点不设置为FLINK_MESSAGE_SHARED_NODE节点。4.根据权利要求1所述的Flink框架运行ETL的流程分解方法,其特征在于,遍历ETL的有向无环图DAG,识别出数据源节点、FLINK_REDUCE_NODE属性的节点与FLINK_CONNECTOR_NODE属性的节点,并根据所述FLINK_REDUCE_NODE属性的节点与FLINK_CONNECTOR_NODE属性的节点识别出所有FLINK_MESSAGE_SHARED_NODE属性的节点,将所述数据源节点、FLINK_REDUCE_NODE属性的节点、FLINK_CONNECTOR_NODE属性的节点与FLINK_MESSAGE_SHARED_NODE属性的节点设置为Splitting属性的节点;以相邻的两个所述Splitting属性的节点作为依据,生成由相邻的两个所述Splitting属性的节点之间的一个或者多个ETL节点构成的子集。5.根据权利要求1所述的Flink框架运行ETL的流程分解方法,其特征在于,所述Flink算子被调用时,构造所述ETL流程子集的DAG并运行;所述相邻Splitting属性的节点之间构造一条flink API操作算子链,所述相邻Splitting属性的节点中的前一个Splitting属性的节点对应的flink算子的输出数据流或数据集作为所述flink API操作算子链的输入,所述flink API操作算子链的输入后续构造一个使用所述ETL流程子集的Flink算子。6.根据权利要求1所述的Flink框架运行ETL的流程分解方法,其特征在于,当所述相邻Splitting属性的节点中的后一个Splitting属性的节点...

【专利技术属性】
技术研发人员:高东升梅纲吴鑫胡高坤付晨玺
申请(专利权)人:武汉达梦数据库股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1