一种批量调度方法、装置和设备
文献发布时间:2023-06-19 11:22:42
技术领域
本说明书实施例涉及大数据处理技术领域,特别涉及一种批量调度方法、装置和设备。
背景技术
目前大数据平台通常以数据仓库、数据湖或其它数据源为基础,通过ETL(Extraction Transformation Loading,数据抽取、转换和加载)调度系统将异构分散的数据进行加工处理,形成有用的有价值的数据或知识,为数据分析师或经营管理人员进行分析决策提供支撑。为进行快速分析和统计,大数据平台可采用小批量的计算模式,支持一日之内几十个批次,从而实现准实时计算。
现有技术中通常采用轮询的方式进行ETL批量调度,通过轮询查找符合条件的作业需要逐个检查作业的上游作业的对应批次是否执行完毕,从而确定作业能执行的批次,当系统中部署的作业较多时,逐个检查作业这一过程会消耗大量的资源,在检查过程中也会形成大量无用的检查(检查后发现上游作业的对应批次没有到位),从而导致系统负载较高。并且当某个上游作业的相应批次完成后,必须等到下游作业被检查到才能加入就绪队列,从而无法及时调起下游作业。由此可见,采用现有技术中的批量调度方式无法高效地进行批量调度。
针对上述问题,目前尚未提出有效的解决方案。
发明内容
本说明书实施例提供了一种批量调度方法、装置和设备,以解决现有技术中无法高效地进行批量调度的问题。
本说明书实施例提供了一种批量调度方法,包括:获取目标调度系统对应的目标有向图;其中,所述目标有向图用于表征目标调度系统调度的多个作业之间的依赖关系;基于所述目标有向图,确定起始作业的第一批次号;其中,所述起始作业为所述目标有向图中指定入度的作业;获取第二批次号;其中,所述第二批次号为已加载的业务数据对应的最大批次号;在确定所述第二批次号大于所述第一批次号的情况下,调度所述起始作业执行所述起始作业的第一批次号对应的业务数据;在确定所述第一批次号对应的业务数据处理完成的情况下,根据所述目标有向图执行所述起始作业的第一批次号的下一批次号对应的业务数据和与所述起始作业关联的作业的第一批次号对应的业务数据,直至所述目标有向图中各个作业的批次号等于所述第二批次号。
本说明书实施例还提供了一种批量调度装置,包括:第一获取模块,用于获取目标调度系统对应的目标有向图;其中,所述目标有向图用于表征目标调度系统调度的多个作业之间的依赖关系;确定模块,用于基于所述目标有向图,确定起始作业的第一批次号;其中,所述起始作业为所述目标有向图中指定入度的作业;第二获取模块,用于获取第二批次号;其中,所述第二批次号为已获取到的业务数据对应的最大批次号;调度模块,用于在确定所述第二批次号大于所述第一批次号的情况下,调度所述起始作业执行所述起始作业的第一批次号对应的业务数据;处理模块,用于在确定所述第一批次号对应的业务数据处理完成的情况下,根据所述目标有向图执行所述起始作业的第一批次号的下一批次号对应的业务数据和与所述起始作业关联的作业的第一批次号对应的业务数据,直至所述目标有向图中各个作业的批次号等于所述第二批次号。
本说明书实施例还提供了一种批量调度设备,包括处理器以及用于存储处理器可执行指令的存储器,所述处理器执行所述指令时实现所述批量调度方法的步骤。
本说明书实施例还提供了一种计算机可读存储介质,其上存储有计算机指令,所述指令被执行时实现所述批量调度方法的步骤。
本说明书实施例提供了一种批量调度方法,可以通过获取表征目标调度系统调度的多个作业之间的依赖关系的目标有向图,确定目标有向图中指定入度的起始作业的第一批次号。为了确定起始作业当前是都可以调度执行,可以获取已加载的业务数据对应的第二批次号,并在确定第二批次号大于第一批次号的情况下,调度起始作业执行起始作业的第一批次号对应的业务数据。在第二批次号不变的情况下可以将第二批次号作为起始作业需要执行的最终批次号,在确定第一批次号对应的业务数据处理完成的情况下,根据目标有向图执行起始作业的第一批次号的下一批次号对应的业务数据和与起始作业关联的作业的第一批次号对应的业务数据,直至目标有向图中各个作业的批次号等于第二批次号。以作业为基本调度单位,基于表征目标调度系统调度的多个作业之间的依赖关系的目标有向图进行调度,可以使具有依赖关系的各个作业可以串行处理同一批次的数据,而在同一时刻支持这些作业并行处理不同批次的数据。从而使得作业可以按上下游依赖关系有序执行,同时在具有依赖关系的作业流中形成流水线,充分利用了系统资源,降低了批量处理最终结果的延迟。
附图说明
此处所说明的附图用来提供对本说明书实施例的进一步理解,构成本说明书实施例的一部分,并不构成对本说明书实施例的限定。在附图中:
图1是根据本说明书实施例提供的批量调度系统的结构示意图;
图2是根据本说明书实施例提供的批量调度方法的步骤示意图;
图3是根据本说明书实施例提供的批量调度装置的结构示意图;
图4是根据本说明书实施例提供的批量调度设备的结构示意图。
具体实施方式
下面将参考若干示例性实施方式来描述本说明书实施例的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本说明书实施例,而并非以任何方式限制本说明书实施例的范围。相反,提供这些实施方式是为了使本说明书实施例公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域的技术人员知道,本说明书实施例的实施方式可以实现为一种系统、装置设备、方法或计算机程序产品。因此,本说明书实施例公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
虽然下文描述流程包括以特定顺序出现的多个操作,但是应该清楚了解,这些过程可以包括更多或更少的操作,这些操作可以顺序执行或并行执行(例如使用并行处理器或多线程环境)。
在本申请的一个场景示例中提供了一种批量调度系统,如图1所示,可以包括:作业部署系统1、ETL批量调度系统2、异步执行系统3、数据入湖作业调度系统5、数据湖集群4。其中,作业部署系统1是批量作业的来源,为数据分析师提供了部署分析态作业、设置分析态作业的依赖关系、启用停用分析态作业等功能,也为开发人员部署生产态作业提供了入口。上述分析态作业与生产态作业都是作业,是一种分类方式,分析态作业是指由分析师(用户)部署的数据分析处理加工作业,包含抽取、转换、加载等过程,目的是为了进行数据分析或数据统计(这种数据分析或数据统计任务往往是临时的,或者由分析师根据需要进行灵活变更);生产态作业是指开发人员或技术人员通过发版部署的数据分析处理加工作业,也包含抽取、转换、加载等过程,这些作业往往是固定的、稳定的。
在本场景示例中,上述ETL批量调度系统2用于对作业部署系统1部署的作业按照既定的依赖关系进行调度,包括ETL批量调度装置21和外部依赖监控装置22。其中,ETL批量调度装置21具体负责调度,外部依赖监控装置22负责监控其它调度系统的作业的批次信息,为ETL批量调度装置21调度具有外部依赖的作业提供支持。
在本场景示例中,上述异步执行系统3负责作业的具体执行将作业的调度和执行进行分离,ETL批量调度装置21的调度使作业按前后依赖关系有序进行,同时使不具有依赖关系的作业并行。而异步执行系统3则对并行执行的不具有依赖关系的作业分配计算资源,并监控作业执行的情况,在作业执行完毕后通知ETL批量调度装置21。
在本场景示例中,上述数据湖集群4用于存储业务系统产生的原始数据,并提供对这些原始数据进行处理加工的计算资源。作业由ETL批量调度装置21调度后,作业的脚本信息和批次信息将提交给异步执行系统3,并由异步执行系统3下推至数据湖集群4对数据进行处理加工。除数据湖集群外,大数据平台亦可使用其它存储计算的集群。
在本场景示例中,上述数据入湖作业调度系统5是由外部依赖监控装置22监控的其它调度系统,数据入湖作业按批次号将业务系统产生的原始数据纳入数据湖集群4,作业部署系统1所部署的作业A可以依赖数据入湖作业,由ETL批量调度系统2在原始数据的某一批次入湖完成后及时调度作业A该批次的执行。除数据入湖作业外,其它调度系统的作业亦可作为作业部署系统1所部署作业的外部依赖,并由ETL批量调度装置21监控其批次信息。
请参阅图2,本实施方式可以提供一种批量调度方法。该批量调度方法可以用于利用有向图高效地进行批量调度。上述批量调度方法可以包括以下步骤。
S201:获取目标调度系统对应的目标有向图;其中,目标有向图用于表征目标调度系统调度的多个作业之间的依赖关系。
在本实施方式中,可以获取目标调度系统对应的目标有向图。其中,上述目标调度系统可以为需要进行批量调度的系统,上述目标有向图可以用于表征目标调度系统调度的多个作业之间的依赖关系,也可以表征目标调度系统调度的多个作业与其它调度系统的作业之间的依赖关系,具体的可以根据实际情况确定,本说明书实施例对此不作限定。
在本实施方式中,作业部署系统在部署作业时可以在关系型数据库中以邻接表的形式(或使用图数据库)维护目标调度系统中所有作业的依赖关系,上述目标有向图可以为调度系统所有作业的总图。无论是否具有依赖关系只要是目标调度系统需要调度的作业均包含在目标有向图中,因此,目标有向图中可以包含多个顶点,每个顶点对应一个作业。顶点之间可以通过有向边连接,有向边可以用于表征作业之间的依赖关系,在一些实施例中,可以通过作业解析、血缘分析等方法确定作业间的依赖关系。
在本实施方式中,作业之间的依赖关系可以分为内部依赖关系和外部依赖关系,内部依赖关系是指目标调度系统内的作业之间的依赖关系,外部依赖关系表示一个作业的调度执行依赖其它调度系统的作业。可以将内部依赖关系作为上述目标有向图的边,将外部依赖关系作为目标有向图中顶点的属性。具体的可以根据实际情况确定,本说明书实施例对此不作限定。
S202:基于目标有向图,确定起始作业的第一批次号;其中,起始作业为目标有向图中指定入度的作业。
在本实施方式中,可以基于上述目标有向图,确定起始作业的第一批次号。其中,上述起始作业可以为目标有向图中指定入度的作业,入度是指有向图中某点作为图中边的终点的次数之和。其中,上述指定入度可以是入度为0,入度为0则表示该顶点不作为任何边的终点,意味着该顶点对应的作业不依赖目标调度系统中的作业,可以将该顶点对应的作业作为起始作业。当然,指定入度不限于上述举例,所属领域技术人员在本说明书实施例技术精髓的启示下,还可能做出其它变更,但只要其实现的功能和效果与本说明书实施例相同或相似,均应涵盖于本说明书实施例保护范围内。
在本实施方式中,目标有向图中可以包含至少一个入度为0的顶点,上述起始作业可以为一个或多个,各个起始作业可以并行执行步骤S204-S205,以提高批量调度的指向效率。
在本实施方式中,上述起始作业的第一批次号可以为起始作业当前最新的批次号,可以第一批次号可以确定起始作业执行到那个批次对应的业务数据,进而可以根据业务数据的加载情况确定起始作业当前是否可以执行。
在本实施方式中,日频作业可采用“日期”作为批次号(也可称为批量日),多批次作业可采用“日期-批次”作为批次号,例如:批量调度每15分钟一个批次,每日共96批次时批次号可以为“2021-02-08-02”、“2021-02-08-03”等。当然可以理解的是,也可以采用其它形式记录批次号,例如:A-01、B-01等,具体的可以根据实际情况确定,本说明书实施例对此不作限定。
在本实施方式中,作业部署系统使用的关系型数据库中可以维护有作业表,作业表用于记录每个作业的主键、脚本内容、每日总批次、批次号等信息,可以通过作业表确定起始作业的第一批次号。在起始作业的第一批次号为T时表示前一批次号(T-1)已经执行完毕,本次应当执行的批次号为T。
S203:获取第二批次号;其中,第二批次号为已加载的业务数据对应的最大批次号。
在本实施方式中,可以获取第二批次号,上述第二批次号可以为已加载的业务数据对应的最大批次号,上述第二批次号可以用于表征起始作业当前可以调度执行到的最大批次号。在上述起始作业有外部依赖作业时,上述第二批次号可以为该外部依赖作业的当前批次号;在上述起始作业没有外部依赖作业时,上述第二批次号可以为全局最大批次号,具体的可以根据实际情况确定,本说明书实施对此不作限定。
在本实施方式中,由于起始作业外部依赖作业是其它调度系统的作业,由其它调度系统负责调度,因此,目标调度系统并不会调用数据加载外部依赖作业,只会获取数据加载外部依赖作业最新的批次号。从而可以确定上游数据最新的批次,进而可以确定起始作业当前是否具备被调起的条件。
在本实施方式中,由于调度作业是用于处理对应批次的业务数据,如果业务系统产生的第一批次号对应的业务数据仍未加载至数据湖集群,则意味着起始作业还不具备执行第一批次号的条件,因此,可以预先获取第二批次号。例如:目标调度系统共有3个作业(作业1,作业2,作业3),其中作业1为起始作业具有一个外部依赖作业(数据加载作业A),数据加载作业A的批次号为“2021-02-08-11”,表示2021年2月8日的01-10批次的业务数据已经加载完毕,可以执行01-10批次的作业。
S204:在确定第二批次号大于第一批次号的情况下,调度起始作业执行起始作业的第一批次号对应的业务数据。
在本实施方式中,可以在确定第二批次号大于第一批次号的情况下,调度起始作业执行起始作业的第一批次号对应的业务数据。第二批次号大于第一批次号可以表示数据准备工作已完成,起始作业当前具备执行的条件。
在一个实施例中,在上述第二批次号为起始作业的外部依赖作业的批次号的情况下,假设起始设作业的外部依赖作业的批次号为T,则表示该外部依赖作业T-1的批次已经执行完毕,但T的批次尚未开始。因此,当起始设作业的批次号为T时(即表示将要执行的批次为T),由于上游作业批次T还未执行起始设作业批次T也不能执行。必须当上游作业批次号为T+1,起始作业批次T才能执行。
S205:在确定第一批次号对应的业务数据处理完成的情况下,根据目标有向图执行起始作业的第一批次号的下一批次号对应的业务数据和与起始作业关联的作业的第一批次号对应的业务数据,直至目标有向图中各个作业的批次号等于第二批次号。
在本实施方式中,在确定第一批次号对应的业务数据处理完成的情况下,可以根据目标有向图执行起始作业的第一批次号的下一批次号对应的业务数据和与起始作业关联的作业的第一批次号对应的业务数据,直至目标有向图中各个作业的批次号等于第二批次号。从而可以按照目标有向图按照批次号顺次执行有依赖关系的作业以及相同作业的下一批次号的作业,并且可以将没有依赖关系的作业并行执行,即多个作业串行处理同一批次的数据,而在同一时刻支持这些作业同时处理不同批次的数据,进而有效提高了批量调度的效率。
在本实施方式中,目标调度系统共有3个作业(作业1,作业2,作业3),其中作业1为起始作业具有一个外部依赖作业(数据加载作业A),设有某金融交易系统,数据加载作业A每15分钟将该金融交易系统产生的交易数据存入数据湖集群中的某张表a(即数据加载作业A每15分钟一个批次,每日共96批次)。2月8日凌晨,数据加载作业A的批次号为“2021-02-08-11”,表示2021年2月8日的01-10批次的业务数据已经加载完毕,可以执行01-10批次的作业。由于系统维护或其它原因,作业1的批次号仍为“2021-02-08-01”,即表示作业1只处理到2月7日最后一个批次的交易数据,2月8日第1个批次的交易数据还未处理。此时,目标调度系统可以开始调度,调度执行作业1“2021-02-08-01”,在作业1“2021-02-08-01”批次完成后,调度执行作业1“2021-02-08-02”批次和作业2“2021-02-08-01”批次;在作业2“2021-02-08-01”批次完成后,调度执行作业2“2021-02-08-02”批次和作业3“2021-02-08-01”批次;在作业1“2021-02-08-02”批次完成后,调度执行作业1“2021-02-08-03”批次和作业2“2021-02-08-02”批次……理想情况下将形成如表1中所示的流水线。在数据加载作业A的批次号不变的情况下,最终作业1“2021-02-08-10”批次完毕后,调度执行作业2“2021-02-08-10”批次,接着调度执行作业3“2021-02-08-10”批次。最终作业1、作业2、作业3的批次号均为“2021-02-08-11”,表示作业1、作业2、作业3下一次要执行“2021-02-08-11”批次。当数据加载作业A的批次号变为“2021-02-08-12”后,表示表a中“2021-02-08-11”批次的数据已到位,目标调度系统可以依次调度执行作业1“2021-02-08-11”批次、作业2“2021-02-08-11”批次、作业3“2021-02-08-11”批次,以此循环。
在本实施例中,假设作业1、作业2、作业3每个批次的执行所需的时间相同(理想情况),则可形成如表1中所示的流水线机制,具有依赖关系的各个作业可以串行处理同一批次的数据,而在同一时刻支持这些作业并行处理不同批次的数据。
表1
在本实施方式中,本说明书实施例优选的可以应用于小批量准实时的场景。其中,小批量指作业单次处理的数据较少,同时,小批量则意味着多批次,比如某业务系统每日产生大量数据,约定每5分钟产生的数据为一个批量,则每日有288个批次;大批量则指作业单次处理的数据较多,比如对某业务系统,可约定每天产生的数据为一个批量。准实时其实就是小批量(小批量是手段,准实时是目的),实时处理通常使用流式计算,流式计算相对的是批量计算,而在批量计算中,采用小批量,使得每个批次数据足够少,单个批次的处理足够块,此时得到最终处理结果的时刻虽然与产生的时刻有一定延迟,但最终处理结果的刷新速度很快。比如,在理想情况下,每5分钟产生的数据为一个批量,每个批次处理的最终结果在10分钟后得到,但最终结果也可以支持每隔5分钟就可得到10分钟之前产生数据的处理结果。
从以上的描述中,可以看出,本说明书实施例实现了如下技术效果:可以通过获取表征目标调度系统调度的多个作业之间的依赖关系的目标有向图,确定目标有向图中指定入度的起始作业的第一批次号。为了确定起始作业当前是都可以调度执行,可以获取已加载的业务数据对应的第二批次号,并在确定第二批次号大于第一批次号的情况下,调度起始作业执行起始作业的第一批次号对应的业务数据。在第二批次号不变的情况下可以将第二批次号作为起始作业需要执行的最终批次号,在确定第一批次号对应的业务数据处理完成的情况下,根据目标有向图执行起始作业的第一批次号的下一批次号对应的业务数据和与起始作业关联的作业的第一批次号对应的业务数据,直至目标有向图中各个作业的批次号等于第二批次号。以作业为基本调度单位,基于表征目标调度系统调度的多个作业之间的依赖关系的目标有向图进行调度,可以使具有依赖关系的各个作业可以串行处理同一批次的数据,而在同一时刻支持这些作业并行处理不同批次的数据。从而使得作业可以按上下游依赖关系有序执行,同时在具有依赖关系的作业流中形成流水线,充分利用了系统资源,降低了批量处理最终结果的延迟。
在一个实施方式中,在调度起始作业执行起始作业的第一批次号对应的业务数据之前,还可以包括:按照预设时间间隔将目标有向图中入度为0的至少一个起始作业的特征信息添加至待调度作业集合中,在确定待调度作业集合不为空的情况下,从待调度作业集合中抽取目标起始作业的特征信息,并将目标起始作业的特征信息从待调度作业集合中删除。在确定目标起始作业的调度状态为不在调度中的情况下,可以标记目标起始作业的调度状态为调度中。进一步的,可以创建目标作业控制块,将目标起始作业的特征信息和第一批次号写入目标作业控制块中。在确定目标起始作业的第一批次号能运行的情况下,可以生成目标异步执行任务;其中,目标异步执行任务中可以包含目标起始作业的脚本信息和第一批次号。
在本实施方式中,可以通过阻塞线程等待一段时间后,再恢复执行将目标有向图中入度为0的至少一个起始作业的特征信息添加至待调度作业集合中。按照预设时间间隔将目标有向图中入度为0的至少一个起始作业的特征信息添加至待调度作业集合中是为了控制了入度为0的起始作业被调起的频度。上述预设时间间隔可以为大于0的数值,可以为起始作业执行完成需要的时间,当然还可以为其它数值,具体的可以根据实际情况确定,本说明书实施例对此不作限定。
在本实施方式中,目标有向图中入度为0的顶点可以为至少一个,可以利用定时任务确定待调度作业集合是否为空,若为空则阻塞线程,直到待调度作业集合不为空。若不为空则从待调度作业集合中抽取目标起始作业的特征信息,并将目标起始作业的特征信息从待调度作业集合中删除。其中,目标起始作业可以为待调度作业集合的任意一个起始作业,上述特征信息可以为目标起始作业的主键,可以用于唯一确定一个作业,上述特征信息可以为作业的名词或编号等,具体的可以根据实际情况确定,本说明书实施例对此不作限定。
在本实施方式中,如果目标起始作业的调度状态为“调度中”,则可以重新从待调度作业集合抽取一个起始作业的特征信息;目标起始作业的调度状态为“不在调度中”,则可以更新目标起始作业的调度状态为“调度中”,从而可以有效避免作业被重复调度。
在本实施方式中,作业控制块是一种数据结构,存放调度系统用于描述作业的一次运行活动的情况及控制该次活动所需的全部信息。因此,可以针对目标起始作业创建目标作业控制块,并利用目标作业控制块存放目标起始作业的特征信息和第一批次号。
在本实施方式中,在确定目标起始作业处于可调度的状态的情况下,还可以进一步确认目标起始作业的第一批次号是否能运行,能否运行可以通过判断目标起始作业的外部依赖的第一批次号是否已执行完成、目标起始作业所需调用的业务数据是否已存入数据湖集群中等确定。具体的可以根据实际情况确定,本说明书实施例对此不作限定。
在本实施方式中,在确定目标起始作业的第一批次号能运行的情况下,生成目标异步执行任务。其中,上述目标异步执行任务可以用于通知异步执行系统调度执行目标起始作业的第一批次。
在一个实施方式中,在将目标起始作业的特征信息和第一批次号写入目标作业控制块中之后,还可以包括:在确定目标起始作业存在外部依赖作业的情况下,可以获取外部依赖作业的批次号,并将外部依赖作业的批次号作为第二批次号。在确定第二批次号大于第一批次号的情况下,可以获取全局最大批次号,并在确定第一批次号小于全局最大批次号的情况下,确定目标起始作业的第一批次号能运行。
在本实施方式中,如果有内部依赖的作业(即目标调度系统中的上游作业),作的批次号应小于内部依赖作业的批次号,但是由于目标起始作业没有内部依赖的作业,因此无需进行此判断,对于其它非起始作业的作业仍需进行此判断。
在本实施方式中,如果有外部依赖的作业(即其它调度系统中的上游作业),目标起始作业的批次号应小于外部依赖作业的批次号。在确定目标起始作业的批次号小于外部依赖作业的批次号的情况下,还可以进一步确定目标起始作业的批次号是否小于全局最大批次号。上述全局最大批次号可以当前日期的次日,例如:全局最大批次号即是当前日期(T)的次日(T+1日),对应的目标起始作业只能处理T日批次及之前批次的数据。
在本实施方式中,由于目标起始作业可能会存在执行失败重试的情况,因此,在确定目标起始作业是否可以运行时还可以进一步确定目标起始作业的重试次数是否大于0。上述作业的重试次数的默认值可以为1,每次重试时可以将重试次数减1,在重试次数为0时则意味着不能再重试了。上述重试次数还可以为其它任意正整数,并且用户也可以通过作业部署系统增加重试次数,具体的可以根据实际情况确定,本说明书实施例对此不作限定。
在一个实施方式中,在生成目标异步执行任务之后,还可以包括:在确定目标异步执行任务下发成功的情况下,可以将目标异步执行任务的ID写入目标作业控制块。生成目标作业运行记录,并将目标作业运行记录的特征信息写入目标作业控制块;其中,目标作业运行记录用于记录目标异步执行任务的执行结果。进一步的,可以将目标作业控制块加入作业控制块等待队列;其中,作业控制块等待队列用于存放正在执行异步执行任务的作业控制快。在确定目标异步执行任务下发失败的情况下,可以标记目标起始作业的调度状态为不在调度中。
在本实施方式中,在生成目标异步执行任务之后还可以进一步确定目标异步执行任务下发是否成功,在确定成功的情况下可以将目标异步执行任务的ID写入目标作业控制块,以便后续对目标异步执行任务进行查询等操作。在确定目标异步执行任务下发失败的情况下,可以标记目标起始作业的调度状态为“不在调度中”,以便之后可以重新调度。其中,上述目标异步执行任务的ID(Identity,身份标识)可以用于唯一确定目标异步执行任务。
在本实施方式中,在确定目标异步执行任务下发成功的情况下,还可以新增一条目标作业运行记录,将目标作业运行记录的特征信息存入目标作业控制块,以便之后可以将异步执行任务的结果信息存入该条记录。其中,上述目标作业运行记录的特征信息可以为目标作业运行记录的主键,可以用于唯一确定目标作业运行记录。
在本实施方式中,由于目标异步执行任务下发成功则意味着目标起始作业正在执行中,因此,可以将目标作业控制块加入作业控制块等待队列,使得后续作业无法调用该目标作业控制块,上述业控制块等待队列用于存放正在执行异步执行任务的作业控制快。
在一个实施方式中,在调度起始作业执行起始作业的第一批次号对应的业务数据之后,还可以包括:获取异步执行通知队列,在确定从异步执行通知队列取出目标异步执行任务的执行结果信息的情况下,可以将关联目标异步执行任务的ID的目标作业控制块从作业控制块等待队列中取出。进一步的,可以将目标作业控制块加入作业控制块处理队列。
在本实施方式中,异步执行通知队列是Kafka消息队列,其中,Kafka是一个分布式、高吞吐量、高扩展性的消息队列系统。异步执行系统的实现需要一个Kafka消息队列系统(或其它类似的消息队列系统),通过Kafka消息队列系统通知发起方异步执行任务已完成。异步执行系统和ETL批量调度系统可以通过Kafka消息队列系统设置相同的主题(Topic),异步执行系统作为消息的发送方,ETL批量调度系统作为消息的接收方,从而建立了一条基于Kafka消息队列的数据管道。上述异步执行通知队列可以是基于Kafka消息队列接收到的消息形成的暂存队列,该队列中存放未处理的消息,当该队列为空时,则说明没有未处理的消息。
在本实施方式中,可以按照先进先出(FIFO,First Input First Output)方式,取出异步执行通知队列头部的消息(即使最早收到的未处理的消息),该条消息取出后则从异步执行通知队列中删去。异步执行通知队列中消息的内容形式可以为“异步执行任务ID为xxx的异步执行任务已完成”,当然,异步执行通知队列中消息的内容形式不限于上述举例,所属领域技术人员在本说明书实施例技术精髓的启示下,还可能做出其它变更,但只要其实现的功能和效果与本说明书实施例相同或相似,均应涵盖于本说明书实施例保护范围内。
在本实施方式中,可以根据从异步执行通知队列取出的信息,确定是哪个异步执行任务对应的执行结果信息。在确定从异步执行通知队列取出目标异步执行任务的执行结果信息的情况下,说明目标异步任务已经执行完成,因此,可以将关联目标异步执行任务的ID的目标作业控制块从作业控制块等待队列中取出,并将目标作业控制块加入作业控制块处理队列,从而结束目标起始作业当前的调度执行流程。其中,上述作业控制块处理队列可以用于存放异步执行任务执行完毕的作业控制块。
在一个实施方式中,在确定第一批次号对应的业务数据处理完成的情况下,根据目标有向图执行起始作业的第一批次号的下一批次号对应的业务数据和与起始作业关联的作业的第一批次号对应的业务数据,直至目标有向图中各个作业的批次号等于第二批次号,可以包括:在从作业控制块处理队列中取出目标作业控制块的情况下,可以根据目标作业控制块中的目标异步执行任务的ID获取目标异步执行任务的执行结果信息。在根据目标异步执行任务的执行结果信息确定执行成功的情况下,可以更新目标作业控制块中存储的目标起始作业运行记录中的结果字段。进一步的,可以根据目标作业控制块中存储的目标起始作业的特征信息,更新目标起始作业的批次号为第一批次号的下一批次号。可以将更新后的目标起始作业的特征信息添加至待调度作业集合中,并将更新后的目标起始作业的调度状态更新为不在调度中。根据目标有向图,将与起始作业关联的作业的特征信息添加至待调度作业集合中,直至目标有向图中各个作业的批次号等于第二批次号。
在本实施方式中,采用定时任务判断作业控制块处理队列是否为空,若为空则阻塞线程直至作业控制块处理队列不为空;若不为空则从作业控制块处理队列中取出一个作业控制块并将该作业控制块从作业控制块处理队列中删去。在从作业控制块处理队列中取出目标作业控制块的情况下,可以目标作业控制块中存储的目标异步执行任务的ID,调用异步执行系统的接口查询目标异步执行任务的执行结果信息。
在本实施方式中,在根据目标异步执行任务的执行结果信息确定执行成功的情况下,可以更新目标作业控制块中存储的目标起始作业运行记录中的结果字段为成功。进而可以根据目标作业控制块中存储的目标起始作业的特征信息,更新目标起始作业的批次号为第一批次号的下一批次号,并将更新后的目标起始作业的特征信息添加至待调度作业集合中,将更新后的目标起始作业的调度状态更新为不在调度中,从而可以尝试进行自动追批,目标起始作业可以再次被调度执行处理下一批次的业务数据。
在本实施方式中,可以根据目标有向图,将与目标起始作业关联的作业的特征信息添加至待调度作业集合中,使得依赖目标起始作业的作业可以被调度,依赖目标起始作业的作业和目标起始作业的下一批次可以并行执行。
在一个实施方式中,在根据目标作业控制块中的目标异步执行任务的ID获取目标异步执行任务的执行结果信息之后,还可以包括:在根据目标异步执行任务的执行结果信息确定执行失败的情况下,更新目标作业控制块中存储的目标起始作业运行记录中的结果字段。进一步的,可以将目标起始作业的重试次数减1,在确定目标起始作业的重试次数大0的情况下,将目标起始作业的特征信息添加至待调度作业集合中。
在本实施方式中,在根据目标异步执行任务的执行结果信息确定执行失败的情况下,可以更新目标作业控制块中存储的目标起始作业运行记录中的结果字段为失败。可以利用目标作业控制块存储的目标起始作业的特征信息,将目标起始作业的重试次数更新为原值减1。当目标起始作业的重试次数减至0后,将跳过目标起始作业,不对其进行调度,仅有在用户通过作业部署系统修改作业并增加重试次数后才能进行调度。
在一个实施方式中,目标有向图中包含多个顶点,各个顶点之间通过有向边连接;其中,每个顶点表示一个作业,顶点记录对应作业的特征信息、脚本内容、每日总批次、批次号和外部依赖属性,有向边记录作业之间的内部依赖关系,外部依赖属性包括:外部依赖的调度系统、作业名和每日总批次。
在本实施方式中,在作业部署系统使用的关系型数据库中,主要有作业表(存放每个作业的特征信息(主键)、脚本内容、每日总批次、批次号等信息,可以为目标有向图中的顶点),邻接表(以作业的主键存放作业间的内部依赖关系,可以为目标有向图中的边)、外部依赖表(以作业的主键存放每个作业具有的外部依赖,外部依赖是何调度系统、何作业名、每日总批次等信息,即顶点附加的外部依赖属性)。
在本实施方式中,作业的具体形式以SQL(Structured Query Language,结构化查询语言)脚本为主,脚本内容可以是一段带参数的SQL语句,作业的脚本内容通过数据库的查询语句从作业表中获取,也可以通过作业部署系统1提供的接口获取,具体的可以根据实际情况确定,本说明书实施例对此不作限定。
本说明书实施例中以作业为基本调度单位的方式相较于以有向图工作流为调度的基本单位的方式,可以进一步提高批量调度的效率和系统资源的利用率。由于基于有向图的一些批量调度方法,是将一组具有依赖关系的作业建立一个有向图工作流,调度按照工作流为单位,通过轮询每个工作流,检查工作流所有作业的外部依赖的相应批次是否完成,如果完成则这个工作流执行相应批次的处理。在此过程中,由于此工作流中所有作业的外部依赖的相应批次已经完成,故在工作流执行过程中,不再对作业检查它的外部依赖批次,只需按照工作流中既定的顺序去执行即可。但是,作业的某个批次的执行可能会需要使用这个作业上个批次的数据(比如统计累计值的场景)。由于是将工作流作为整体展开调度,故无法同时调起同一工作流两个批次(或多个批次)同时执行,必须在某个工作流某个批次全部执行完毕后才能调起这个工作流下个批次的执行。因此,相较于本说明书实施例中的技术方案在小批量准实时的场景下无法形成流水线,不能充分利用系统资源,从而会造成处理结果的高延迟。
基于同一发明构思,本说明书实施例中还提供了一种批量调度装置,如下面的实施例。由于批量调度装置解决问题的原理与批量调度方法相似,因此批量调度装置的实施可以参见批量调度方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。图3是本说明书实施例的批量调度装置的一种结构框图,如图3所示,可以包括:第一获取模块301、确定模块302、第二获取模块303、调度模块304、处理模块305,下面对该结构进行说明。
第一获取模块301,可以用于获取目标调度系统对应的目标有向图;其中,目标有向图用于表征目标调度系统调度的多个作业之间的依赖关系;
确定模块302,可以用于基于目标有向图,确定起始作业的第一批次号;其中,起始作业为目标有向图中指定入度的作业;
第二获取模块303,可以用于获取第二批次号;其中,第二批次号为已获取到的业务数据对应的最大批次号;
调度模块304,可以用于在确定第二批次号大于第一批次号的情况下,调度起始作业执行起始作业的第一批次号对应的业务数据;
处理模块305,可以用于在确定第一批次号对应的业务数据处理完成的情况下,根据目标有向图执行起始作业的第一批次号的下一批次号对应的业务数据和与起始作业关联的作业的第一批次号对应的业务数据,直至目标有向图中各个作业的批次号等于第二批次号。
本说明书实施例实施方式还提供了一种电子设备,具体可以参阅图4所示的基于本说明书实施例提供的批量调度方法的电子设备组成结构示意图,电子设备具体可以包括输入设备41、处理器42、存储器43。其中,输入设备41具体可以用于输入目标调度系统对应的目标有向图。处理器42具体可以用于获取目标调度系统对应的目标有向图;其中,目标有向图用于表征目标调度系统调度的多个作业之间的依赖关系;基于目标有向图,确定起始作业的第一批次号;其中,起始作业为目标有向图中指定入度的作业;获取第二批次号;其中,第二批次号为已加载的业务数据对应的最大批次号;在确定第二批次号大于第一批次号的情况下,调度起始作业执行起始作业的第一批次号对应的业务数据;在确定第一批次号对应的业务数据处理完成的情况下,根据目标有向图执行起始作业的第一批次号的下一批次号对应的业务数据和与起始作业关联的作业的第一批次号对应的业务数据,直至目标有向图中各个作业的批次号等于第二批次号。存储器43具体可以用于存储第一批次号、第二批次号等参数。
在本实施方式中,输入设备具体可以是用户和计算机系统之间进行信息交换的主要装置之一。输入设备可以包括键盘、鼠标、摄像头、扫描仪、光笔、手写输入板、语音输入装置等;输入设备用于把原始数据和处理这些数的程序输入到计算机中。输入设备还可以获取接收其他模块、单元、设备传输过来的数据。处理器可以按任何适当的方式实现。例如,处理器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(ApplicationSpecific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式等等。存储器具体可以是现代信息技术中用于保存信息的记忆设备。存储器可以包括多个层次,在数字系统中,只要能保存二进制数据的都可以是存储器;在集成电路中,一个没有实物形式的具有存储功能的电路也叫存储器,如RAM、FIFO等;在系统中,具有实物形式的存储设备也叫存储器,如内存条、TF卡等。
在本实施方式中,该电子设备具体实现的功能和效果,可以与其它实施方式对照解释,在此不再赘述。
本说明书实施例实施方式中还提供了一种基于批量调度方法的计算机存储介质,计算机存储介质存储有计算机程序指令,在计算机程序指令被执行时可以实现:获取目标调度系统对应的目标有向图;其中,目标有向图用于表征目标调度系统调度的多个作业之间的依赖关系;基于目标有向图,确定起始作业的第一批次号;其中,起始作业为目标有向图中指定入度的作业;获取第二批次号;其中,第二批次号为已加载的业务数据对应的最大批次号;在确定第二批次号大于第一批次号的情况下,调度起始作业执行起始作业的第一批次号对应的业务数据;在确定第一批次号对应的业务数据处理完成的情况下,根据目标有向图执行起始作业的第一批次号的下一批次号对应的业务数据和与起始作业关联的作业的第一批次号对应的业务数据,直至目标有向图中各个作业的批次号等于第二批次号。
在本实施方式中,上述存储介质包括但不限于随机存取存储器(Random AccessMemory,RAM)、只读存储器(Read-Only Memory,ROM)、缓存(Cache)、硬盘(Hard DiskDrive,HDD)或者存储卡(Memory Card)。所述存储器可以用于存储计算机程序指令。网络通信单元可以是依照通信协议规定的标准设置的,用于进行网络连接通信的接口。
在本实施方式中,该计算机存储介质存储的程序指令具体实现的功能和效果,可以与其它实施方式对照解释,在此不再赘述。
显然,本领域的技术人员应该明白,上述的本说明书实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本说明书实施例不限制于任何特定的硬件和软件结合。
虽然本说明书实施例提供了如上述实施例或流程图所述的方法操作步骤,但基于常规或者无需创造性的劳动在所述方法中可以包括更多或者更少的操作步骤。在逻辑性上不存在必要因果关系的步骤中,这些步骤的执行顺序不限于本说明书实施例提供的执行顺序。所述的方法的在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。
应该理解,以上描述是为了进行图示说明而不是为了进行限制。通过阅读上述描述,在所提供的示例之外的许多实施方式和许多应用对本领域技术人员来说都将是显而易见的。因此,本说明书实施例的范围不应该参照上述描述来确定,而是应该参照前述权利要求以及这些权利要求所拥有的等价物的全部范围来确定。
以上所述仅为本说明书实施例的优选实施例而已,并不用于限制本说明书实施例,对于本领域的技术人员来说,本说明书实施例可以有各种更改和变化。凡在本说明书实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本说明书实施例的保护范围之内。
- 一种批量调度方法、装置和设备
- 虚拟机高可用批量调度方法、装置、设备及存储介质