基于Airflow的数据计算调度方法
技术领域
本发明涉及一种计算调度方法,特别是涉及一种基于Airflow的数据计算调度方法,属于Airflow技术领域。
背景技术
Airflow是一个Airbnb的Workflow开源项目,Airflow即有向无环图DAGS,数据调度在电力系统中应用广泛,但是数据计算是一个复杂的过程,传统的数据调度方法无法进行扩展,并且没有自己的调度任务web监控服务,需要依赖其他程序才能进行,同时调度程序只能做到单一的对应。
发明内容
本发明的主要目的是为了解决现有技术的不足而提供基于Airflow的数据计算调度方法。
本发明的目的可以通过采用如下技术方案达到:
基于Airflow的数据计算调度方法,包括以下步骤:
步骤一:开始任务,生成树,任务实例并导出原始数据;
步骤二:生成树,任务实例接着进行scheduler安排定时服务同时,Dag生成定义任务和依赖与scheduler扫描定时服务同时输入至所有任务存储在数据库中判断是否满足定时条件,当满足定时条件时解析模型;
步骤三:当导出原始数据成功时向下进行数据计算1同时将数据存储到HDFS且HDFS获取数据,当导出原始数据失败时定时任务失败同时任务日志记录到源数据库中;
步骤四:当数据计算1成功时既向下进行数据计算2、数据计算3、数据计算4和数据计算5,又将数据计算1的计算结果保存到HDFS,及mpp;
步骤五:HDFS获取结果数据与数据计算2、数据计算3、数据计算4和数据计算5同时并行任务,同时将存储过程入库并数据存储至HDFS及Mpp。
优选的,完整架构包含以下组件:
(1)作业定义,包含在源代码控制中;
(2)一个丰富的命令行工具或者命令行接口用来测试、运行、回填、描述和清理你的Airflow的组成部件;
(3)一个web应用程序,用来浏览Airflow的定义、依赖项、进度、元数据和日志,Web服务器打包在Airflow里面并且是基于Python框架Flask构建;
(4)一个元数据仓库,通常是一个MySQL或者Postgres数据库,Airflow可以用它来记录任务作业状态和其他持久化的信息;
(5)一组工作节点,以分布式的方式运行作业的任务实例;
(6)调度程序,触发准备运行的任务实例;
(7)RBAC权限管理,高强度的对用户权限进行了划分,可以细致到页面上的每个页面、每个按钮和每个任务。
优选的,Airflow推动处理的工序:
(1)数据仓库;
(2)增长分析;
(3)试验;
(4)定向邮件;
(5)会话;
(6)搜索;
(7)数据基础架构维护。
优选的,Airflow可提供1对1,1对多,多对1的依赖关系,并可通过trigger_rule来设置上下游节点的运行规则。
优选的,trigger_rule对应的参数如下:
(1)All_success:上级依赖全部执行成功,执行下级;
(2)All_failed:上级依赖全部执行失败,执行下级;
(3)One_success:一个上级依赖执行成功,执行下级;
(4)One_failed:一个上级依赖执行失败,执行下级;
(5)All_done:上级依赖全部执行完毕,无论success或failed,执行下级;
(6)None_failed:所有的上级依赖,没有failed及upstream_failed状态,执行下级;
(7)none_skipped:上级处于skipped状态,执行下级;
相互依赖的任务将会根据其上下游关系,按照配置的trigger_rule从上游向下游有序执行。
优选的,在步骤五中的并行任务为:
场景一All_success;
场景二All_done;
场景三All_failed。
优选的,调度程序基于依赖关系,定时执行一整套的流程任务,Airflow在每个实例会通过向程序提供相同的参数,控制各个程序依赖于同一个数据源和同一批数据,并且维持上下级的数据依赖关系。
优选的,Airflow自带各种与Hive、Presto、MySQL、HDFS、Postgres和S3这些常用系统交互的方法。
优选的,生成一个实例包括:数据导入日冻结、计算分析对象电量和计算分析对象电量。
优选的,步骤三和步骤四之间还进行以下步骤:
a通过kafka采集各省数据;
b通过调度程序从kafka中导出数据并存储到HDFS;
c计算程序通过调度程序配置的参数找到HDFS的参数或者结果进行计算;
d通过调度程序将HDFS上的结果数据存储至mpp数据库;
e通过调度程序执行存储过程将数据统计到相应的库表;
f前端展示。
本发明的有益技术效果:
1、具有强大的依赖关系设计和强大的拓展性,Airflow自带各种与Hive,Presto,MySQL,HDFS,Postgres和S3这些常用系统交互的方法,并且允许触发任意的脚本,基础模块也被设计的非常容易拓展。
2、拥有自己的调度任务web监控服务,这是很多调度程序都不具备的,节约研发的时间成本和技术成本;而Airflow自带的web监控服务,可直观的监控每一个调度流程中各个节点的任务执行情况,并提供详细的任务日志,并会对任务执行的各方面数据进行统计,并形成报表展现出来,同时web还提供一系列可对节点任务进行的操作,可通过UI直接对每个节点进行重跑,并能同时进行上游或下游的批量操作。
3、可实现高可用的搭建,Airflow结合celery,rabbitmq/redis,mysql/postgres可搭建出稳定的一套调度架构,并能随时横向的拓展架构的资源。
4、拥有自己的权限管理系统,通过RBAC权限框架集成到web服务中,权限细化到每个按钮的操作,及每个页面的浏览,可通过管理员账号自定义不同的角色。
5、代码维护简单易用,提供丰富的任务执行方式,Airflow可对Bash脚本,python程序,spark程序,存储过程,Http请求,Hive等进行依赖的编写和定时的调度。
附图说明
图1为按照本发明的基于Airflow的数据计算调度方法的一优选实施例的方法流程示意图;
图2为按照本发明的基于Airflow的数据计算调度方法的一优选实施例的系统程序执行示意图。
具体实施方式
为使本领域技术人员更加清楚和明确本发明的技术方案,下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
实施例一:
如图1-图2所示,本实施例提供的基于Airflow的数据计算调度方法,包括以下步骤:
步骤一:开始任务,生成树,任务实例并导出原始数据;步骤二:生成树,任务实例接着进行scheduler安排定时服务同时,Dag生成定义任务和依赖与scheduler扫描定时服务同时输入至所有任务存储在数据库中判断是否满足定时条件,当满足定时条件时解析模型;步骤三:当导出原始数据成功时向下进行数据计算1同时将数据存储到HDFS且HDFS获取数据,当导出原始数据失败时定时任务失败同时任务日志记录到源数据库中;步骤四:当数据计算1成功时既向下进行数据计算2、数据计算3、数据计算4和数据计算5,又将数据计算1的计算结果保存到HDFS,及mpp;步骤五:HDFS获取结果数据与数据计算2、数据计算3、数据计算4和数据计算5同时并行任务,同时将存储过程入库并数据存储至HDFS及Mpp,1、强大的依赖关系设计和强大的拓展性,Airflow自带各种与Hive,Presto,MySQL,HDFS,Postgres和S3这些常用系统交互的方法,并且允许你触发任意的脚本,基础模块也被设计的非常容易拓展;拥有自己的调度任务web监控服务,这是很多调度程序都不具备的,节约研发的时间成本和技术成本;而Airflow自带的web监控服务,可直观的监控每一个调度流程中各个节点的任务执行情况,并提供详细的任务日志,并会对任务执行的各方面数据进行统计,并形成报表展现出来,同时web还提供一系列可对节点任务进行的操作,可通过UI直接对每个节点进行重跑,并能同时进行上游或下游的批量操作;可实现高可用的搭建,Airflow结合celery,rabbitmq/redis,mysql/postgres可搭建出稳定的一套调度架构,并能随时横向的拓展架构的资源;拥有自己的权限管理系统,通过RBAC权限框架集成到web服务中,权限细化到每个按钮的操作,及每个页面的浏览,可通过管理员账号自定义不同的角色;代码维护简单易用,提供丰富的任务执行方式,Airflow可对Bash脚本,python程序,spark程序,存储过程,Http请求,Hive等进行依赖的编写和定时的调度。
在本实施例中,如图1所示,完整架构包含以下组件:作业定义,包含在源代码控制中;一个丰富的命令行工具或者命令行接口用来测试、运行、回填、描述和清理你的Airflow的组成部件;一个web应用程序,用来浏览Airflow的定义、依赖项、进度、元数据和日志,Web服务器打包在Airflow里面并且是基于Python框架Flask构建;一个元数据仓库,通常是一个MySQL或者Postgres数据库,Airflow可以用它来记录任务作业状态和其他持久化的信息;一组工作节点,以分布式的方式运行作业的任务实例;调度程序,触发准备运行的任务实例;RBAC权限管理,高强度的对用户权限进行了划分,可以细致到页面上的每个页面、每个按钮和每个任务,拥有自己的权限管理系统,通过RBAC权限框架集成到web服务中,权限细化到每个按钮的操作,及每个页面的浏览,可通过管理员账号自定义不同的角色,可实现高可用的搭建,这是是否适合进入生产的关键因素,Airflow结合celery,rabbitmq/redis,mysql/postgres可搭建出稳定的一套调度架构,并能随时横向的拓展架构的资源。
在本实施例中,如图1所示,Airflow推动处理的工序:数据仓库;增长分析;试验;定向邮件;会话;搜索;数据基础架构维护,Airflow可提供1对1,1对多,多对1的依赖关系,并可通过trigger_rule来设置上下游节点的运行规则,trigger_rule对应的参数如下:All_success:上级依赖全部执行成功,执行下级;All_failed:上级依赖全部执行失败,执行下级;One_success:一个上级依赖执行成功,执行下级;One_failed:一个上级依赖执行失败,执行下级;All_done:上级依赖全部执行完毕,无论success或failed,执行下级;None_failed:所有的上级依赖,没有failed及upstream_failed状态,执行下级;none_skipped:上级处于skipped状态,执行下级;相互依赖的任务将会根据其上下游关系,按照配置的trigger_rule从上游向下游有序执行,代码维护简单易用,调度程序以DSL模板语言实现,可将程序中的各项参数配置在Web UI中,并通过权限系统管理起来,部署起来相比于同类的调度程序,不需要复杂的编译过程,只需通过DSL模板语言配置好任务,将任务同步到指定的目录中,执行airflow提供的指令即可。
在本实施例中,如图1和图2所示,在步骤五中的并行任务为:场景一All_success;场景二All_done;场景三All_failed,调度程序基于依赖关系,定时执行一整套的流程任务,Airflow在每个实例会通过向程序提供相同的参数,控制各个程序依赖于同一个数据源和同一批数据,并且维持上下级的数据依赖关系,Airflow自带各种与Hive、Presto、MySQL、HDFS、Postgres和S3这些常用系统交互的方法,生成一个实例包括:数据导入日冻结、计算分析对象电量和计算分析对象电量,步骤三和步骤四之间还进行以下步骤:a通过kafka采集各省数据;b通过调度程序从kafka中导出数据并存储到HDFS;c计算程序通过调度程序配置的参数找到HDFS的参数或者结果进行计算;d通过调度程序将HDFS上的结果数据存储至mpp数据库;e通过调度程序执行存储过程将数据统计到相应的库表;f前端展示,提供丰富的任务执行方式,Airflow可对Bash脚本,python程序,spark程序,存储过程,Http请求,Hive等进行依赖的编写和定时的调度,Airflow生成一个实例,并向所有程序传递统一的调度时间A,数据导入日冻结,程序通过参数,导入相应日期的数据分别计算出厂站终端抄表率明细、用户终端抄表率明细、厂站终端抄表率和低压级超终端抄表率;计算:运行电能表,将数据导入日冻结中的数据进行计量点电量计算,当数据导入完成,任务被标记为success;后续计算会根据A找到这批数据并开始计算,计算完后会将计算结果会根据A命名并保存在相应的地方;下一级依赖会在上一级success后根据A找到上一级的结果继续后续的计算;计算:分析对象电量,当多个计算需要用到同一个数据源时,开始执行分析对象电量,当分析对象电量执行完毕后开始计算数据,在4个程序都success后会进入到下一个依赖进行数据的汇总并且存储到数据库中。
综上所述,在本实施例中,按照本实施例的基于Airflow的数据计算调度方法,强大的依赖关系设计和强大的拓展性,Airflow自带各种与Hive,Presto,MySQL,HDFS,Postgres和S3这些常用系统交互的方法,并且允许你触发任意的脚本,基础模块也被设计的非常容易拓展拥有自己的调度任务web监控服务,这是很多调度程序都不具备的,节约研发的时间成本和技术成本;而Airflow自带的web监控服务,可直观的监控每一个调度流程中各个节点的任务执行情况,并提供详细的任务日志,并会对任务执行的各方面数据进行统计,并形成报表展现出来,同时web还提供一系列可对节点任务进行的操作,可通过UI直接对每个节点进行重跑,并能同时进行上游或下游的批量操作可实现高可用的搭建,Airflow结合celery,rabbitmq/redis,mysql/postgres可搭建出稳定的一套调度架构,并能随时横向的拓展架构的资源拥有自己的权限管理系统,通过RBAC权限框架集成到web服务中,权限细化到每个按钮的操作,及每个页面的浏览,可通过管理员账号自定义不同的角色代码维护简单易用,提供丰富的任务执行方式,Airflow可对Bash脚本,python程序,spark程序,存储过程,Http请求,Hive等进行依赖的编写和定时的调度,数据导入日冻结,程序通过参数,导入相应日期的数据分别计算出厂站终端抄表率明细、用户终端抄表率明细、厂站终端抄表率和低压级超终端抄表率;计算:运行电能表,将数据导入日冻结中的数据进行计量点电量计算,当数据导入完成,任务被标记为success;后续计算会根据A找到这批数据并开始计算,计算完后会将计算结果会根据A命名并保存在相应的地方;下一级依赖会在上一级success后根据A找到上一级的结果继续后续的计算;计算:分析对象电量,当多个计算需要用到同一个数据源时,开始执行分析对象电量,当分析对象电量执行完毕后开始计算数据,在4个程序都success后会进入到下一个依赖进行数据的汇总并且存储到数据库中。
以上所述,仅为本发明进一步的实施例,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明所公开的范围内,根据本发明的技术方案及其构思加以等同替换或改变,都属于本发明的保护范围。