任务执行方法、装置和服务器与流程

文档序号:14940810发布日期:2018-07-13 20:42阅读:136来源:国知局

本发明涉及计算机技术领域,尤其涉及一种任务执行方法、装置和服务器。



背景技术:

spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架:通过在数据处理过程中成本更低的suffle(数据清洗算法)方式,将mapreduce(一种编程模型)提升到一个更高的层次;利用内存数据存储和接近实时的处理能力,其性能比其他大数据处理技术要快很多倍。

传统数据清洗任务,往往需要开发大量的代码来支撑,当清洗任务很多的时候,往往工程包会变得臃肿不堪,从而带来各种弊端。例如:1.代码重复率高,人力浪费严重。当工程很大的时候,不同的开发人员之间会存在相当一部分的重复功能代码,再合并代码复杂度,将会大大浪费人力资源。2.代码维护成本太高。若当工程运行时发现某个任务存在漏洞,需要调整,势必要停掉整个工程,这样将导致大多数良好任务等待一个问题任务的情况,造成环境资源的严重浪费。3.代码灵活性差。当需要交付时,若某几个任务代码存在问题,会导致项目整体无法交付。4.代码调试、运行、转移等不便。由于任务多而导致的工程变大,会使代码的调试、运行时间变得更长,会使代码转移变得艰难。



技术实现要素:

本发明的目的在于提供一种任务执行方法、装置和服务器,以解决传统清洗任务代码重复、工程过大、任务管理不便中的至少一个难题。

本发明解决上述技术问题所采用的技术方案如下:

提供的一种任务执行方法,包括:读取任务对应的任务描述文件,所述任务描述文件中记录用于执行所述任务的数据库公共包的路径、用于表示所述任务的实体的数据库脚本文件的路径、以及所述任务对应的第一参数,所述第一参数用于替换所述数据库脚本文件中的变量将所述数据库脚本文件推送到计算节点,所述计算节点处具有所述数据库公共包;根据所述数据库公共包的路径调用所述数据库公共包,通过所述数据库公共包按所述数据库脚本文件的路径,获取所述数据库脚本文件并使用所述第一参数替换所述数据库脚本文件中的变量,以及执行所述数据库脚本文件,得到所述任务的执行结果。

可选地,前述的方法,所述任务描述文件中还记录任务配置文件的路径,所述任务配置文件记录用于替换所述数据库脚本文件的门限值的第二参数;所述方法还包括:将所述任务配置文件推送到所述计算节点;通过所述数据库公共包按获取所述任务配置文件中的所述第二参数来替换所述数据库脚本文件中的门限值。

可选地,前述的方法,获取所述数据库脚本文件并使用所述第一参数替换所述数据库脚本文件中的变量,具体包括:根据预设的数据交换语言,将所述任务描述文件生成相应的数据交换文件,从所述数据交换文件中提取所述第一参数来替换所述数据库脚本文件中的变量。

可选地,前述的方法,还包括:根据所述任务的优先级、所述任务所需数据是否已获取,将所述任务添加到记录有按顺序排列的一个或多个任务的任务列表中;根据所述任务在所述任务列表中的顺序,从所述任务列表中读取所述任务后,执行获取所述数据库脚本文件并使用所述第一参数替换所述数据库脚本文件中的变量,以及根据所述数据库公共包的路径调用所述数据库公共包执行所述数据库脚本文件,得到所述任务的执行结果。

可选地,前述的方法,所述任务描述文件中包括所述任务对应的输入表的信息、输出表的信息;调用所述数据库公共包执行所述数据库脚本文件,具体包括:从所述输入表获取所述数据库脚本的输入数据并执行所述数据库脚本文件,将得到的结果加入所述输出表中。

提供了一种任务执行装置,包括:读取模块,用于读取任务对应的任务描述文件,所述任务描述文件中记录用于执行所述任务的数据库公共包的路径、用于表示所述任务的实体的数据库脚本文件的路径、以及所述任务对应的第一参数,所述第一参数用于替换所述数据库脚本文件中的变量;推送模块,用于将所述数据库脚本文件推送到计算节点,所述计算节点处具有所述数据库公共包;执行模块,用于根据所述数据库公共包的路径调用所述数据库公共包,通过所述数据库公共包按所述数据库脚本文件的路径,获取所述数据库脚本文件并使用所述第一参数替换所述数据库脚本文件中的变量,以及执行所述数据库脚本文件,得到所述任务的执行结果。

可选地,前述的装置,所述任务描述文件中还记录任务配置文件的路径,所述任务配置文件记录用于替换所述数据库脚本文件的门限值的第二参数;所述推送模块还将所述任务配置文件推送到所述计算节点;所述执行模块还通过所述数据库公共包按所述任务配置文件的路径,获取所述任务配置文件中的所述第二参数来替换所述数据库脚本文件中的门限值。

可选地,前述的装置,所述执行模块根据预设的数据交换语言,将所述任务描述文件生成相应的数据交换文件,从所述数据交换文件中提取所述第一参数来替换所述数据库脚本文件中的变量。

可选地,前述的装置,还包括:任务列表模块,根据所述任务的优先级、所述任务所需数据是否已获取,将所述任务添加到记录有按顺序排列的一个或多个任务的任务列表中;根据所述任务在所述任务列表中的顺序,从所述任务列表中读取所述任务后,执行获取所述数据库脚本文件并使用所述第一参数替换所述数据库脚本文件中的变量,以及根据所述数据库公共包的路径调用所述数据库公共包执行所述数据库脚本文件,得到所述任务的执行结果。

可选地,前述的装置,所述任务描述文件中包括所述任务对应的输入表的信息、输出表的信息;所述执行模块从所述输入表获取所述数据库脚本的输入数据并执行所述数据库脚本文件,将得到的结果加入所述输出表中。

提供了一种服务器,包括:根据前述的任务执行装置。

根据以上技术方案,可知本发明的任务执行方法、装置和服务器至少具有以下优点:

与现有技术相比,任务基于多个文件来执行,多个文件彼此独立化可以有效提升代码灵活性,且充分解耦,使代码维护变得简洁方便;将数据库文本分离解决了主程序庞大不易维护的弊端;公共包的使用,大大降低代码重复的同时,让任务变得更加简单,节约人力。

附图说明

图1为本发明实施例的一种任务执行方法的流程图;

图2为本发明实施例的一种任务执行方法的流程图;

图3为本发明实施例的一种任务执行装置的框图;

图4为本发明实施例的一种任务执行装置的框图;

图5为本发明实施例的一种任务执行方法的文件结构图;

图6为本发明实施例的一种任务执行方法的原理图;

图7为本发明实施例的一种任务执行方法的工作流程图;

图8为本发明实施例的一种任务执行方法的工作流程图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚、明白,以下结合附图和实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

实施例一

如图1所示,本发明的一个实施例中提供了一种任务执行方法,包括:

步骤s110,读取任务对应的任务描述文件,任务描述文件中记录用于执行任务的数据库公共包的路径、用于表示任务的实体的数据库脚本文件的路径、以及任务对应的第一参数,第一参数用于替换数据库脚本文件中的变量。在本实施例中,任务描述文件可以采用xml格式文件,数据库脚本文件可以是sql格式文件,所进行的任务包括但不限于数据清洗任务,该数据库公共包可以是公共jar包。

步骤s120,将数据库脚本文件推送到计算节点,计算节点处具有数据库公共包。

步骤s130,根据数据库公共包的路径调用数据库公共包,通过数据库公共包按数据库脚本文件的路径,获取数据库脚本文件并使用第一参数替换数据库脚本文件中的变量,以及执行数据库脚本文件,得到任务的执行结果。

根据本实施例的技术方案,可以将每个数据清洗任务写成单独算法,使用spark-submit提交任务;将数据源为数据库表结构的清洗任务提取出来,做成通用的公共jar包文件,开发人员可以通过配置任务对应的xml描述文件来描述任务的输入、输出。本实施例的这些实现特点,可以有效控制传统清洗任务代码重复、工程过大、任务管理不便等难题,同时也可以大大降低以数据源为数据库表结构的清洗任务的开发成本和维护成本。

实施例二

如图2所示,本发明的一个实施例中提供了一种任务执行方法,包括:

步骤s210,读取任务对应的任务描述文件,任务描述文件中记录用于执行任务的数据库公共包的路径、用于表示任务的实体的数据库脚本文件的路径、以及任务对应的第一参数,第一参数用于替换数据库脚本文件中的变量,任务描述文件中还记录任务配置文件的路径,任务配置中文件记录用于替换数据库脚本文件的门限值的第二参数,任务描述文件中包括任务对应的输入表的信息、输出表的信息。

在本实施例中,一个原始任务由三部分组成:任务.xml文件、任务.sql文件、任务.conf文件(若没有门限值可以省略)。任务.xml文件中,保存了任务类型(sql任务/rdd任务),输入(表所在数据库、表名称、类型、分区等信息/文件),输出(表所在数据库、表名称、类型、分区等信息/文件),执行时间(定时任务),执行任务的jar包路径、任务.conf文件、任务.sql文件路径等。任务.sql文件中保存任务实体,即带有变量的sql语句。任务.conf文件中保存了任务门限值等常量信息。

步骤s220,将数据库脚本文件推送到计算节点,将任务配置文件推送到计算节点,计算节点处具有数据库公共包。基于本实施例的技术方案,可实现一种主程序,启动主程序,主程序会将任务.xml文件中的信息读取到内存的任务元数据列表,并将任务.sql文件、任务.conf文件推送到各spark计算节点。

步骤s230,根据任务的优先级、任务所需数据是否已获取,将任务添加到记录有按顺序排列的一个或多个任务的任务列表中;根据任务在任务列表中的顺序,从任务列表中读取任务后,根据预设的数据交换语言,将任务描述文件生成相应的数据交换文件,从数据交换文件中提取第一参数来替换数据库脚本文件中的变量,以及根据数据库公共包的路径调用数据库公共包执行数据库脚本文件,得到任务的执行结果。在本实施例中,主程序根据任务元数据描述情况(数据驱动/时间驱动)、数据到达情况、任务优先级情况等,将任务加入到任务调度列表。

在本实施例中,主程序使用spark-submit提交任务到spark集群并在spark集群计算节点上执行任务。主程序监控spark环境资源使用情况,当资源允许时,主程序根据任务元数据中所需参数,生成任务.json文件,sql公共jar包读取任务.json文件中的参数和任务.conf文件中的门限值将任务.sql文件中变量替换掉,生成完整的任务sql语句(任务实体)。根据输入表类型获取json文件中对应的数据库连接信息(spark/gbase/mysql/其他),从而连接到对应数据库并执行任务实体sql。根据输出类型,保存任务执行结果到对应的数据库或文件中。

步骤s240,通过数据库公共包按获取任务配置文件中的第二参数来替换数据库脚本文件中的门限值,以及从输入表获取数据库脚本的输入数据并执行数据库脚本文件,将得到的结果加入输出表中。在本实施例中,公共jar包将执行任务的结果返回给主程序,主程序判断任务最终执行结果。

根据本实施例的技术方案,采用本发明的方法,与现有技术相比,任务独立化可以有效提升代码灵活性,且充分解耦,使代码维护变得简洁方便;将主程序与算法分离解决了主程序庞大不易维护的弊端;公共jar包的提取,大大降低代码重复的同时,让数据清洗任务变得更加简单,节约人力。

实施例三

如图3所示,本发明的一个实施例中提供了一种任务执行装置,包括:

读取模块310,读取任务对应的任务描述文件,任务描述文件中记录用于执行任务的数据库公共包的路径、用于表示任务的实体的数据库脚本文件的路径、以及任务对应的第一参数,第一参数用于替换数据库脚本文件中的变量。在本实施例中,任务描述文件可以采用xml格式文件,数据库脚本文件可以是sql格式文件,所进行的任务包括但不限于数据清洗任务,该数据库公共包可以是公共jar包。

推送模块320,将数据库脚本文件推送到计算节点,计算节点处具有数据库公共包。

执行模块330,根据数据库公共包的路径调用数据库公共包,通过数据库公共包按数据库脚本文件的路径,获取数据库脚本文件并使用第一参数替换数据库脚本文件中的变量,以及执行数据库脚本文件,得到任务的执行结果。

根据本实施例的技术方案,可以将每个数据清洗任务写成单独算法,使用spark-submit提交任务;将数据源为数据库表结构的清洗任务提取出来,做成通用的公共jar包文件,开发人员可以通过配置任务对应的xml描述文件来描述任务的输入、输出。本实施例的这些实现特点,可以有效控制传统清洗任务代码重复、工程过大、任务管理不便等难题,同时也可以大大降低以数据源为数据库表结构的清洗任务的开发成本和维护成本。

实施例四

如图4所示,本发明的一个实施例中提供了一种任务执行装置,包括:

读取模块410,读取任务对应的任务描述文件,任务描述文件中记录用于执行任务的数据库公共包的路径、用于表示任务的实体的数据库脚本文件的路径、以及任务对应的第一参数,第一参数用于替换数据库脚本文件中的变量,任务描述文件中还记录任务配置文件的路径,任务配置中文件记录用于替换数据库脚本文件的门限值的第二参数,任务描述文件中包括任务对应的输入表的信息、输出表的信息。

在本实施例中,一个原始任务由三部分组成:任务.xml文件、任务.sql文件、任务.conf文件(若没有门限值可以省略)。任务.xml文件中,保存了任务类型(sql任务/rdd任务),输入(表所在数据库、表名称、类型、分区等信息/文件),输出(表所在数据库、表名称、类型、分区等信息/文件),执行时间(定时任务),执行任务的jar包路径、任务.conf文件、任务.sql文件路径等。任务.sql文件中保存任务实体,即带有变量的sql语句。任务.conf文件中保存了任务门限值等常量信息。

推送模块420,将数据库脚本文件推送到计算节点,将任务配置文件推送到计算节点,计算节点处具有数据库公共包。基于本实施例的技术方案,可实现一种主程序,启动主程序,主程序会将任务.xml文件中的信息读取到内存的任务元数据列表,并将任务.sql文件、任务.conf文件推送到各spark计算节点。

任务列表模块430,根据任务的优先级、任务所需数据是否已获取,将任务添加到记录有按顺序排列的一个或多个任务的任务列表中;根据任务在任务列表中的顺序,从任务列表中读取任务后,根据预设的数据交换语言,将任务描述文件生成相应的数据交换文件,从数据交换文件中提取第一参数来替换数据库脚本文件中的变量,以及根据数据库公共包的路径调用数据库公共包执行数据库脚本文件,得到任务的执行结果。在本实施例中,主程序根据任务元数据描述情况(数据驱动/时间驱动)、数据到达情况、任务优先级情况等,将任务加入到任务调度列表。

在本实施例中,主程序使用spark-submit提交任务到spark集群并在spark集群计算节点上执行任务。主程序监控spark环境资源使用情况,当资源允许时,主程序根据任务元数据中所需参数,生成任务.json文件,sql公共jar包读取任务.json文件中的参数和任务.conf文件中的门限值将任务.sql文件中变量替换掉,生成完整的任务sql语句(任务实体)。根据输入表类型获取json文件中对应的数据库连接信息(spark/gbase/mysql/其他),从而连接到对应数据库并执行任务实体sql。根据输出类型,保存任务执行结果到对应的数据库或文件中。

执行模块440,通过数据库公共包按获取任务配置文件中的第二参数来替换数据库脚本文件中的门限值,以及从输入表获取数据库脚本的输入数据并执行数据库脚本文件,将得到的结果加入输出表中。在本实施例中,公共jar包将执行任务的结果返回给主程序,主程序判断任务最终执行结果。

根据本实施例的技术方案,采用本发明所述的方法,与现有技术相比,任务独立化可以有效提升代码灵活性,且充分解耦,使代码维护变得简洁方便;将主程序与算法分离解决了主程序庞大不易维护的弊端;公共jar包的提取,大大降低代码重复的同时,让数据清洗任务变得更加简单,节约人力。

实施例五

本发明的一个实施例中提供了一种服务器,该服务器包括实施例三或实施例四中记载的任务执行装置。本领域技术人员应当理解,目前的服务器上可以运行上述的任务执行装置,即基于目前服务器的软件和/或硬件可实现上述任务执行装置的各个功能模块,及通过本实施例的服务器可以实现上述实施例的任务执行装置的技术效果。

根据本发明的实施例的一个具体应用示例如下:

1)编写原始任务描述文件,即图5所示的三个文件。

例如lte_subject_poorquality_cell_day任务,首先根据模板编辑好任务lte_subject_poorquality_cell_day.xml文件。该xml文件记载了以下内容:任务名称;执行粒度,为每天执行;指示信息,表示任务存在sql语句;sql公共jar包入口类和入口函数(可以省略掉,会在主程序中有默认值);任务实体sql文件在spark计算节点上的路径;任务配置文件在spark计算节点上的路径;以下为任务中对依赖表信息的描述;输入表的信息描述;输出表信息描述;计算所需核数和内存;删除陈旧信息模式。

其次编辑lte_subject_poorquality_cell_day.sql文件。变量替换规则是使用两个‘$’包围起来的名称;门限值替换规则是使用两个‘#’包围起来的名称,具体可以包括:输出表别名,对应任务.xml文件中的别名,在算法公共jar包执行时替换成输出表实际名称;输出表分区值,对应任务.xml文件中的别名,在算法公共jar包执行时替换成实际值;门限值,对应任务.conf文件中的值,在算法公共jar包执行时替换成实际值;最后,根据上述sql文件是否有门限值决定是否编写lte_subject_poorquality_cell_day.conf文件,本示例存在门限值,则提取门限值到单独的配置文件时方便之后对门限值的修改操作。

2)将原始任务文件导入主程序。主程序在启动时会扫描所有约定目录下的任务,单独增加、修改的任务也可以用特殊接口单独以补丁的形式加入。主程序加载原始任务文件的过程如图6,主程序会将任务.xml文件读取到内存,加入任务元数据列表,供之后生成任务json文件时使用;将任务.conf、任务.sql文件推送到各计算节点上,供任务执行时sql公共jar包的使用。

3)等待任务执行。有数据的任务才是可以执行的任务、有spark环境需要存在计算资源才能真正执行任务,当所有准备条件都成立后,任务会被提交。

4)sql公共jar包的执行。如图7,当任务被提交时sql公共jar包读取主程序产生的任务json文件,获取任务sql文件路径、任务conf文件路径,从而读取sql文件中的sql语句。每个任务的sql语句可以是多条,这些语句中的时间条件、输入、输出表、门限值都是按照框架约束格式的变量,需要在sqljar包中进行替换,替换值是通过读取任务json文件中相关参数,整理后完成。替换完全后的sql语句即为可以直接运行的sql语句。这时根据输入表对应数据库类型,建立链接,执行sql。如果输出与输入为相同数据库下的表,任务结束(insert语句);如果输出为文件,对应保存;如果输出为其他数据库表,则生成相应文件,执行对应该数据库的存储过程入库,本示例的整体流程如图8所示,其中通过任务列表控制任务全部执行。

5)sql公共jar包将最后的执行结果传给主程序。

开发人员实际工作只是1)、2)两步。

根据本发明的技术方案,还提供一种存储介质,该存储介质上记录了计算机程序,该计算机程序在运行后可以实现前述的实施例的任务执行装置。

以上参照附图说明了本发明的优选实施例,并非因此局限本发明的权利范围。本领域技术人员不脱离本发明的范围和实质,可以有多种变型方案实现本发明,比如作为一个实施例的特征可用于另一实施例而得到又一实施例。凡在运用本发明的技术构思之内所作的任何修改、等同替换和改进,均应在本发明的权利范围之内。

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