实时计算任务处理方法、装置、设备及存储介质与流程

文档序号:25168559发布日期:2021-05-25 14:36阅读:74来源:国知局
实时计算任务处理方法、装置、设备及存储介质与流程

本申请涉及大数据处理技术领域,具体而言,涉及一种实时计算任务处理方法、装置、设备及存储介质。



背景技术:

flink是一种集批量数据和流式数据处理的分布式计算框架,具有高吞吐和低延迟的特性。随着企业级对于实时数据要求的不断提高,越来越多的公司开始采用flink实时计算框架,但是,现有的实时计算平台缺乏完善的语法语义支持,难以满足实际应用中复杂多样的业务需求,开发代码难度比较大,对开发人员的要求比较高,开发效率低并且不具有普适性。



技术实现要素:

本申请实施例的目的在于提供一种实时计算任务处理方法、装置、设备及存储介质,用以实现降低实时计算任务开发门槛,提高实时计算开发效率。

本申请实施例第一方面提供了一种实时计算任务处理方法,包括:根据用户输入的业务指令,获取对应的任务文件,所述任务文件包括sql语句定义的预设配置信息;基于所述任务文件,生成实时计算任务;执行所述实时计算任务。

于一实施例中,所述根据用户输入的业务指令,获取对应的任务文件,包括:判断预设模板数据库中是否存在对应于所述业务指令的任务文件;当预设模板数据库中存在对应于所述业务指令的任务文件时,获取所述任务文件。

于一实施例中,所述根据用户输入的业务指令,获取对应的任务文件,还包括:当预设模板数据库中不存在对应于所述业务指令的任务文件时,获取用户配置信息,所述用户配置信息包括sql语句定义的元数据信息、维表类型、维表加载策略和目标函数;基于所述用户配置信息,生成所述任务文件。

于一实施例中,所述基于所述任务文件,生成实时计算任务,包括:对所述任务文件中的sql语句进行解析,得到多个语法树节点;基于预设语法规则,对所述语法树节点进行校验,生成语法树;将所述语法树转换成逻辑计划;基于预设优化规则,对所述逻辑计划进行优化;将优化后的所述逻辑计划转换成物理计划;基于所述物理计划,生成所述实时计算任务。

于一实施例中,所述对所述任务文件中的sql语句进行解析,包括:通过正则匹配将所述sql语句分为第一类型语句和第二类型语句;解析所述第一类型语句,得到原始数据源与flink内部表的第一映射关系;解析所述第二类型语句,得到原始数据源与flink内部表的第二映射关系;基于所述第一映射关系和第二映射关系,生成数据血缘图。

于一实施例中,在所述执行所述实时计算任务之后,还包括:监控所述实时计算任务的执行状态;当所述实时计算任务失败时,按照预设方式发送告警信息。

本申请实施例第二方面提供了一种实时计算任务处理装置,包括:获取模块,用于根据用户输入的业务指令,获取对应的任务文件,所述任务文件包括sql语句定义的预设配置信息;生成模块,用于基于所述任务文件,生成实时计算任务;执行模块,用于执行所述实时计算任务。

于一实施例中,还包括:监控模块,用于监控所述实时计算任务的状态;告警模块,用于当所述实时计算任务失败时,按照预设方式发送告警信息。

于一实施例中,所述获取模块用于:判断预设模板数据库中是否存在对应于所述业务指令的任务文件;当预设模板数据库中存在对应于所述业务指令的任务文件时,获取所述任务文件。

于一实施例中,所述获取模块还用于:当预设模板数据库中不存在对应于所述业务指令的任务文件时,获取用户配置信息,所述用户配置信息包括sql语句定义的元数据信息、维表类型、维表加载策略和目标函数;基于所述用户配置信息,生成所述任务文件。

于一实施例中,所述生成模块用于:对所述任务文件中的sql语句进行解析,得到多个语法树节点;基于预设语法规则,对所述语法树节点进行校验,生成语法树;将所述语法树转换成逻辑计划;基于预设优化规则,对所述逻辑计划进行优化;将优化后的所述逻辑计划转换成物理计划;基于所述物理计划,生成所述实时计算任务。

于一实施例中,所述生成模块具体用于:通过正则匹配将所述sql语句分为第一类型语句和第二类型语句;解析所述第一类型语句,得到原始数据源与flink内部表的第一映射关系;解析所述第二类型语句,得到原始数据源与flink内部表的第二映射关系;基于所述第一映射关系和第二映射关系,生成数据血缘图。

本申请实施例第三方面提供了一种电子设备,包括:存储器,用以存储计算机程序;处理器,用以执行本申请实施例第一方面及其任一实施例的方法。

本申请实施例第四方面提供了一种非暂态电子设备可读存储介质,包括:程序,当其藉由电子设备运行时,使得所述电子设备执行本申请实施例第一方面及其任一实施例的方法。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本申请一实施例的电子设备的结构示意图;

图2为本申请一实施例的实时计算任务处理方法的流程示意图;

图3为本申请另一实施例的实时计算任务处理方法的流程示意图;

图4为本申请一实施例中步骤210的子步骤的流程示意图;

图5为本申请一实施例中步骤220的子步骤的流程示意图;

图6为本申请一实施例的实时计算任务处理装置的流程示意图;

图7为本申请一实施例的实时计算系统的架构示意图。

附图标记:

100-电子设备,110-总线,120-处理器,130-存储器,500-实时计算任务处理装置,510-获取模块,520-生成模块,530-执行模块,540-监控模块,550-告警模块。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。

在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,并不表示排列序号,也不能理解为指示或暗示相对重要性。

在本申请的描述中,术语“包括”、“包含”等表示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其他特征、步骤、操作、元素、组件和/或其集合的存在或添加。

在本申请的描述中,除非另有明确的规定和限定,术语“安装”、“设置”、“设有”、“连接”、“配置为”应做广义理解。例如,可以是固定连接,也可以是可拆卸连接,或整体式构造;可以是机械连接,也可以是电连接;可以是直接相连,也可以是通过中间媒介间接相连,又或者是两个装置、元件或组成部分之间内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本申请中的具体含义。

请参看图1,其为本申请一实施例的电子设备100的结构示意图,包括至少一个处理器120和存储器130,图1中以一个处理器为例。处理器120和存储器130通过总线110连接,存储器130存储有可被至少一个处理器120执行的指令,指令被至少一个处理器120执行,以使至少一个处理器120执行如下述实施例中的实时计算任务处理方法。

于一实施例中,处理器120可以是通用处理器,包括但不限于中央处理器(centralprocessingunit,cpu)、网络处理器(networkprocessor,np)等,还可以是数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(fieldprogrammablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,处理器120是电子设备100的控制中心,利用各种接口和线路连接整个电子设备100的各个部分。处理器120可以实现或者执行本申请实施例中公开的各方法、步骤及逻辑框图。

于一实施例中,存储器130可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,包括但不限于,随机存取存储器(randomaccessmemory,ram),只读存储器(readonlymemory,rom),静态随机存取存储器(staticrandomaccessmemory,简称sram),可编程只读存储器(programmableread-onlymemory,prom),可擦除只读存储器(erasableprogrammableread-onlymemory,eprom),电可擦除只读存储器(electricerasableprogrammableread-onlymemory,eeprom)等。

于一实施例中,电子设备100也可以与一个或多个外部设备通信,例如键盘、鼠标、蓝牙设备、指向设备等,以使用户可以与电子设备100进行交互。

图1所示的电子设备100的结构仅为示意,电子设备100还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。图1中所示的各组件可以采用硬件、软件或其组合实现。

如图2所示,其为本申请一实施例的实时计算任务处理方法的流程示意图,该方法可由图1所示的电子设备100来执行,以实现降低开发难度,提高开发效率。该方法包括如下步骤:

步骤210:根据用户输入的业务指令,获取对应的任务文件。

在上述步骤中,用户可以根据当前的业务场景或业务需求,通过可视化交互界面输入相应的业务指令,获取对应于该业务指令的任务文件,任务文件包括sql(structuredquerylanguage,结构化查询语言)语句定义的预设配置信息。

于一实施例中,可以直接从预设模板数据库中获取对应于业务指令的任务文件,若预设模板数据库中不存在对应于业务指令的任务文件,也可以通过获取用户输入的用户配置信息,按照预设模板自动打包生成任务文件。于一实施例中,用户可以通过可视化交互界面输入/选择元数据信息、维表类型、维表加载策略、目标函数等用户配置信息。

步骤220:基于任务文件,生成实时计算任务。

在上述步骤中,对任务文件进行自动编译,解析任务文件中的sql语句,生成可执行的flink程序,作为实时计算任务。

步骤230:执行实时计算任务。

在上述步骤中,可以调用flink引擎执行实时计算任务,flink是由apache软件基金会开发的开源流处理框架,其核心是用java和scala编写的分布式流数据流引擎。flink以数据并行和流水线方式执行任意流数据程序,flink的流水线运行时系统可以执行批处理和流处理程序。

现有的开源的flink程序在编写任务时,一般需要经过编写代码、本地调试、本地打包、上传程序、提交程序这一系列过程,而在本申请中,不需要建立代码工程,可以通过sql的方式编写任务文件,降低了任务开发的难度和复杂程度,并且可以自动解析sql语句生成实时计算任务,自动完成编译、执行等操作,无需技术人员手动进行编译,提高了开发效率。

如图3所示,其为本申请一实施例的实时计算任务处理方法的流程示意图,该方法可由图1所示的电子设备100来执行,以实现降低开发难度,提高开发效率。该方法包括如下步骤:

步骤310:根据用户输入的业务指令,获取对应的任务文件。详细内容参见上述实施例中步骤210的描述。

步骤320:基于任务文件,生成实时计算任务。详细内容参见上述实施例中步骤220的描述。

步骤330:执行实时计算任务。详细内容参见上述实施例中步骤230的描述。

步骤340:监控实时计算任务的执行状态。

在上述步骤中,实时计算任务的执行状态包括但不限于已生成、未执行、执行中、失败、已完成等,可以预先配置不同的监控指标,例如当kafka的lag值大于1000条时给出电话报警,当消费延迟比率大于1%时给出报警。

于一实施例中,可以通过日志中心解析日志获取预设监控指标,也可以通过解析上报信息(report)获取预设监控指标。

步骤350:当实时计算任务失败时,按照预设方式发送告警信息。

在上述步骤中,当实时计算任务失败时,按照预设方式发送告警信息,该预设方式包括但不限于:电话、短信、邮件等。

于一实施例中,可以预设失败重启规则,例如失败后重新启动任务,失败重启次数超过阈值后停止任务,重启恢复时从checkpoint或者从savepoint恢复等。当实时计算任务失败时,按照预设方式发送告警信息之后,按照预设失败重启规则执行相关步骤。

如图4所示,其为本申请一实施例中步骤210的子步骤的流程示意图,

步骤210:根据用户输入的业务指令,获取对应的任务文件,可以包括:

步骤211:判断预设模板数据库中是否存在对应于业务指令的任务文件。

在上述步骤中,预设模板数据库可以预存有多个任务文件,每个任务文件对应于不同业务指令。判断预设模板数据库中是否存在对应于业务指令的任务文件,若预设模板数据库中存在对应于业务指令的任务文件,则执行步骤212,若预设模板数据库中不存在对应于业务指令的任务文件,则执行步骤213。

步骤212:获取任务文件。

在上述步骤中,任务文件包括sql语句定义的预设配置信息,预设配置信息可以包括但不限于元数据信息、维表类型、维表加载策略和目标函数,例如,任务文件可以通过sql语句定义数据源、执行的操作、写入源。

于一实施例中,从预设模板数据库获取预存的任务文件后,可以根据实际业务需求,从中选取部分或全部元数据。

步骤213:获取用户配置信息。

在上述步骤中,用户配置信息包括sql语句定义的元数据信息、维表类型、维表加载策略和目标函数。元数据信息包括计算中需要用到的kafka地址、mysql链接地址、数据库名、数据表名、字段等。维表加载策略包括但不限于:定时重新加载、lru(leastrecentlyused,最近最少使用)策略加载等。

目标函数可以之间从系统函数中选取,若系统函数无法满足需求,也可以通过自定义函数引入依赖的资源,自定义函数支持一对一的函数、一对多的函数,以及多对多的函数。可以根据用户选择的自定义函数的输入和输出类型,以及编写的自定义函数的处理逻辑,利用codegen(代码生成器)生产对应的代码,并根据需要选择依赖的资源,自定义函数经过注册校验可以存储至预设模板数据库中,以便于下次使用时可以直接调用。

于一实施例中,可以预设一个维表库,该维表库中预存有多种维表类型、多种加载策略,以及不同维表类型和加载策略的适用场景和优缺点,以使用户可以根据业务场景选取维表类型和维表加载测量。例如:把维表的数据一次性加载到内存中,该加载策略的优点为查询实时性较强,缺点为维表不能更新,并且需要的内存大。

于一实施例中,用户可以在sql编辑器等交互界面输入用户配置信息,并对用户配置信息,以及从预设模板数据库中获取的任务文件进行修改、添加、删除等操作。

步骤214:基于用户配置信息,生成任务文件。

在上述步骤中,可以通过预设的maven模板对用户配置信息进行打包,于一实施例中,maven模板包括第一目录、第二目录和第三目录,其中,第一目录主要存储用户编写的代码,第二目录主要存储用户依赖的配置文件,第三目录主要存储用户依赖的第三方jar包。于一实施例中,用户也可以创建自定义的目录,用来存放自己要生成的实时计算任务的配置信息。

于一实施例中,生成的任务文件可以存储至预设模板数据库,以便于再次使用。

如图5所示,其为本申请一实施例中步骤220的子步骤的流程示意图,

步骤220:基于任务文件,生成实时计算任务,可以包括:

步骤221:对任务文件中的sql语句进行解析,得到多个语法树节点。

在上述步骤中,任务文件中的sql语句可以包括定义数据源表的语句,用于定义数据的来源,数据源表包括探查表(事实表)和维度表。sql语句还可以包括定义操作数据的语句,用于定义sql的处理逻辑,例如对事实表和维度表通过某个字段关联,求出每分钟内的最大值等。sql语句还可以包括定义数据落地表的语句,用于定义查询到的数据的存放位置。可以通过java解析器(javacc)对sql语句进行解析,得到多个语法树节点。

于一实施例中,对任务文件中的sql语句进行解析,可以包括:通过正则匹配将sql语句分为第一类型语句和第二类型语句;解析第一类型语句,得到原始数据源与flink内部表的第一映射关系;解析第二类型语句,得到原始数据源与flink内部表的第二映射关系;基于第一映射关系和第二映射关系,生成数据血缘图。

在上述步骤中,可以利用calcite工具对任务文件中的sql语句进行解析,第一类型语句可以为ddl语句,ddl语句是数据定义语言,用于定义数据库数据表机构,第二类型语句可以为dml语句,dml语句是数据操作语言,用于定于对数据的增添、删除、修改、查询等操作逻辑。可以通过正则匹配方法对两者进行区分,例如“create”,“drop”开头的都是ddl语句,“select”,“update”,“insert”,“delete”开头的都是dml语句。数据血缘图可以为dag图(directedacyclicgraph,无回路有向图)。

步骤222:基于预设语法规则,对语法树节点进行校验,生成语法树。

在上述步骤中,基于预设语法规则,利用数字字典(catalog)去验证每个语法树节点的语句,校验通过则生成语法树(ast)。

步骤223:将语法树转换成逻辑计划。

在上述步骤中,将语法树节点表示的语法树转换成逻辑计划(logicalplan),逻辑计划可以通过关系表达式(relnode)来表示。

步骤224:基于预设优化规则,对逻辑计划进行优化。

在上述步骤中,预设优化规则可以包括基于calcite工具的优化规则以及基于flink的优化规则。

步骤225:将优化后的逻辑计划转换成物理计划。

在上述步骤中,将优化后的逻辑计划转换成flink的物理计划(physicalplan)。

步骤226:基于物理计划,生成实时计算任务。

在上述步骤中,利用代码生成器(codegen),根据物理计划,生成flink可执行的实时计算任务。

于一实施例中,生成实时计算任务还包括:获取用户输入的任务名称,需要执行的主类名称,以及用户选择的job参数,比如分区数量,内存等。选择资源的依赖。

如图6所示,其为本申请一实施例的实时计算任务处理装置500的结构示意图,该装置可应用于图1所示的电子设备100,包括:获取模块510、生成模块520和执行模块530。各个模块的原理关系如下:

获取模块510,用于根据用户输入的业务指令,获取对应的任务文件。

生成模块520,用于基于任务文件,生成实时计算任务,所述任务文件包括sql语句定义的预设配置信息。

执行模块530,用于执行实时计算任务。

于一实施例中,实时计算任务处理装置500还包括:监控模块540和告警模块550,其中,监控模块540用于监控实时计算任务的状态。告警模块550用于当实时计算任务失败时,按照预设方式发送告警信息。

于一实施例中,获取模块510用于:判断预设模板数据库中是否存在对应于业务指令的任务文件;当预设模板数据库中存在对应于业务指令的任务文件时,获取任务文件。

于一实施例中,获取模块510还用于:当预设模板数据库中不存在对应于业务指令的任务文件时,获取用户配置信息,用户配置信息包括sql语句定义的元数据信息、维表类型、维表加载策略和目标函数;基于用户配置信息,生成任务文件。

于一实施例中,生成模块520用于:对任务文件中的sql语句进行解析,得到多个语法树节点;基于预设语法规则,对语法树节点进行校验,生成语法树;将语法树转换成逻辑计划;基于预设优化规则,对逻辑计划进行优化;将优化后的逻辑计划转换成物理计划;基于物理计划,生成实时计算任务。

于一实施例中,生成模块520具体用于:通过正则匹配将sql语句分为第一类型语句和第二类型语句;解析第一类型语句,得到原始数据源与flink内部表的第一映射关系;解析第二类型语句,得到原始数据源与flink内部表的第二映射关系;基于第一映射关系和第二映射关系,生成数据血缘图。

上述实时计算任务处理装置500的详细描述,请参见上述实施例中相关方法步骤的描述。

如图7所示,其为本申请一实施例的实时计算系统的架构示意图,包括:接入层、服务层和存储层,其中,接入层可以为前端页面请求后端服务的api(applicationprogramminginterface,应用程序接口),并且可以通过虚拟ip保证高可用性。服务层可以提供所有服务的api,例如任务管理、元数据管理、日志管理等,服务层还可以进行后端处理,例如监控告警、任务文件解析校验等。存储层可以存储元数据,其中,rds(relationaldatabaseservice,关系型数据库服务)通过云备份保证高可用性,hdfs(hadoopdistributedfilesystem,分布式文件系统)可以用于存储多版本的任务jar包和配置文件。

本申请的实时计算系统提供了一个可视化的实时计算任务交互界面,用户可以通过交互界面输入用户配置信息,并对用户配置信息,以及从预设模板数据库中的任务文件进行修改、添加、删除等操作。

本申请的实时计算系统可以支持作业开发,作业运维,模版管理,元数据管理等功能,作业开发是指对于实时计算任务进行基于jar作业,sql作业等的开发,作业运维是指对于已经完成编辑的作业进行提交运行或停止运行等管理操作,模版管理是指对于一些通用的作业方案,底层抽象出具体的框架,使得业务人员只需要关注自身业务逻辑的实现,元数据管理是指管理计算中所用到的一系列的元数据信息比如kafka的地址、topic等信息、mysql的链接地址、数据库名、表名以及字段等信息。

于一实施例中,上层可以支持web端的服务,通过公司的统一认证登陆系统做鉴权。后端服务通过nginx和虚拟ip的方式保证高可用性。后端服务可以部署多台,每台可以部署两个api的实例,每台机器上的实例可以通过zookeeper的临时节点来保证高可用性。后端api通过api管理系统进行管理,配置文件通过配置中心进行管理,相关日志通过日志中心进行管理,监控中心负责每个api服务的监控。

通过bootadmin对于springboot应用进行监控管理。用户在web界面上进行提交jar或者设置git地址,进行自动打包,或者通过在线sql编辑,进行任务的开发测试,通过kafka进行日志搜集,在测试界面上进行展示,供排查问题使用。

本发明实施例还提供了一种电子设备可读存储介质,包括:程序,当其在电子设备上运行时,使得电子设备可执行上述实施例中方法的全部或部分流程。其中,存储介质可为磁盘、光盘、只读存储记忆体(read-onlymemory,rom)、随机存储记忆体(randomaccessmemory,ram)、快闪存储器(flashmemory)、硬盘(harddiskdrive,缩写:hdd)或固态硬盘(solid-statedrive,ssd)等。存储介质还可以包括上述种类的存储器的组合。

在本申请所提供的几个实施例中,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。

在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。以上仅为本申请的优选实施例而已,仅用于说明本申请的技术方案,并不用于限制本申请。对于本技术领域的普通技术人员而言,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

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