作业调度方法、装置和系统与流程

文档序号:20163318发布日期:2020-03-24 21:14阅读:165来源:国知局
作业调度方法、装置和系统与流程

本公开涉及计算机技术领域,更具体地,涉及一种作业调度方法、装置和系统。



背景技术:

随着移动互联网技术的发展,各企业的数据量呈指数式增长,而如何利用海量数据资源成为各企业提高核心竞争力的关键。在大数据技术的实际应用中,比如数据仓库建立、数据挖掘和分析等,都需要运行大量的作业来完成对数据的采集、清洗、加工运算及推送。为了确保作业能够有序和高效的执行,需要一个作业调度系统来管理、触发、执行这些作业。

在实现本公开构思的过程中,发明人发现现有技术中至少存在如下问题:现有的作业调度系统虽然能够解决作业的触发执行和依赖关系等基本功能,但是随着数据仓库规模不断变大,作业数据量激增,在作业执行效率方面逐渐无法满足需求,例如作业并行度低,能够并行的作业以串行方式执行,作业吞吐量小等,从而存在浪费系统软硬件资源及不能及时产出重要数据的缺陷。



技术实现要素:

有鉴于此,本公开提供了一种能够提高作业并行度的作业调度方法、装置和系统。

本公开的一个方面提供了一种作业调度方法,包括:获取待执行的多个作业实例,每个待执行的作业实例具有执行信息和关联信息;根据待执行的多个作业实例的关联信息,确定待执行的多个作业实例中是否包括与当前执行的作业实例具有关联关系的作业实例;在待执行的多个作业实例中包括与当前执行的作业实例具有关联关系的作业实例的情况下,根据执行信息,确定具有关联关系的作业实例中,与当前执行的作业实例不冲突的至少一个作业实例;以及根据调度规则,将与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例分配给至少两个执行节点,以供至少两个执行节点并行地执行分配得到的作业实例。

根据本公开的实施例,上述执行信息包括控制属性,该控制属性包括自身并行执行属性,上述根据执行信息,确定具有关联关系的作业实例中,与当前执行的作业实例不冲突的至少一个作业实例包括:确定具有关联关系的作业实例中是否包括与当前执行的作业实例属于同一作业的作业实例;以及在具有关联关系的作业实例中包括与当前执行的作业实例属于同一作业的作业实例,且该属于同一作业的作业实例的自身并行执行属性为是的情况下,确定该属于同一作业的作业实例与当前执行的、属于同一作业的作业实例不冲突。

根据本公开的实施例,上述控制属性还包括上游并行执行属性和下游并行执行属性,执行信息还包括执行时间信息,上述根据执行信息,确定具有关联关系的作业实例中,与当前执行的作业实例不冲突的至少一个作业实例还包括:在具有关联关系的作业实例中不包括与当前执行的作业实例属于同一作业的作业实例的情况下,或者确定属于同一作业的作业实例与当前执行的、属于同一作业的作业实例不冲突的情况下,确定具有关联关系的作业实例中是否包括当前执行的作业实例的上游和/或下游作业实例;以及在具有关联关系的作业实例中包括当前执行的作业实例的上游和/或下游作业实例的情况下,根据上游和/或下游作业实例的下游并行执行属性和/或上游并行执行属性及执行时间信息,确定该上游和/或下游作业实例是否与当前执行的作业实例相冲突。

根据本公开的实施例,根据所述上游和/或下游作业实例的下游和/或上游并行执行属性及执行时间信息,确定上游和/或下游作业实例是否与当前执行的作业实例相冲突包括:在上游和/或下游作业实例的执行时间信息与当前执行的作业实例的执行时间信息不冲突,且上游和/或下游作业实例的下游并行执行属性和/或上游并行执行属性为是的情况下,确定上游和/或下游作业实例是与当前执行的作业实例不冲突的作业实例;或者,在上游和/或下游作业实例的执行时间信息与当前执行的作业实例的执行时间信息不冲突,且上游和/或下游作业实例的下游并行执行属性和/或上游并行执行属性为否的情况下:确定上游和/或下游作业实例是否为重点作业实例;以及在上游和/或下游作业实例是重点作业实例的情况下,停止当前执行的作业实例中所述上游和/或下游作业实例的下游和/或上游作业实例的执行,并确定上游和/或下游作业实例是与当前执行的作业实例不冲突的作业实例。

根据本公开的实施例,根据执行信息,确定具有关联关系的作业实例中,与当前执行的作业实例不冲突的至少一个作业实例还包括:在与当前执行的、属于同一作业的作业实例不冲突的属于同一作业的作业实例中,不包括当前执行的作业实例的上游作业实例和下游作业实例的情况下,确定该属于同一作业的作业实例是与当前执行的作业实例不冲突的作业实例。

根据本公开的实施例,上述控制属性还包括跳跃执行属性,上述作业调度方法还包括:在待执行的作业实例的所述跳跃执行属性为是,且存在与待执行的作业实例属于同一作业、且执行时间大于待执行的作业实例的执行时间的作业实例的情况下,清除所述待执行的作业实例;或者,在待执行的作业实例的跳跃执行属性为是,且不存在与待执行的作业实例属于同一作业、且执行时间大于待执行的作业实例的执行时间的作业实例的情况下,或者待执行的作业实例的跳跃执行属性为否的情况下,根据待执行的多个作业实例的关联信息,确定待执行的多个作业实例中是否包括与当前执行的作业实例具有关联关系的作业实例,其中,上述执行时间信息包括执行时间,与待执行的作业实例属于同一作业、且执行时间大于待执行的作业实例是待执行的多个作业实例之一。

根据本公开的实施例,上述根据调度规则,将与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例分配给至少两个执行节点包括:根据执行与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例时分别所需的性能消耗量,及至少两个执行节点对应的数据源的剩余性能量,将与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例依次分配给至少两个执行节点。

根据本公开的实施例,上述将与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例依次分配给至少两个执行节点包括:将与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例按优先级降序排列得到可执行队列;以及循环执行的以下操作,直至与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例依次被分配:将至少两个执行节点按对应的数据源的剩余性能量降序排列;确定执行可执行队列中的第一个作业实例所需的性能消耗量,是否大于至少两个执行节点对应的数据源的剩余性能量中最大的剩余性能量;以及在确定执行可执行队列中的第一个作业实例所需的性能消耗量,不大于至少两个执行节点对应的数据源的剩余性能量中最大的剩余性能量的情况下,将可执行队列中的第一个作业实例分配给剩余性能量最大的数据源对应的执行节点。

根据本公开的实施例,在将与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例按优先级降序排列得到可执行队列时,对于具有相同优先级的多个作业实例,按照执行时所需的性能消耗量降序排列;并且/或者,上述循环执行的操作还包括:在确定执行可执行队列中的第一个作业实例所需的性能消耗量,大于至少两个执行节点对应的数据源的剩余性能量中最大的剩余性能量的情况下,将可执行队列中的第一个作业实例列入延缓分配队列,以在预定时间间隔后被重新分配。

根据本公开的实施例,上述作业调度方法还包括:在与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例中存在执行失败的作业实例、且执行失败的原因是超时的情况下,清除该作业实例并向用户发送报警信息;或者,在与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例中存在执行失败的作业实例、且执行失败的原因不是超时的情况下,重新分配该作业实例。

本公开的另一个方面提供了一种作业调度装置,包括:实例获取模块,用于获取待执行的多个作业实例,每个待执行的作业实例具有执行信息和关联信息;关联实例确定模块,根据待执行的作业实例的关联信息,确定待执行的多个作业实例中是否包括与当前执行的作业实例具有关联关系的作业实例;不冲突实例确定模块,用于在待执行的多个作业实例中包括与当前执行的作业实例具有关联关系的作业实例的情况下,根据执行信息,确定具有关联关系的作业实例中,与当前执行的作业实例不冲突的至少一个作业实例;以及实例调度模块,用于根据调度规则,将与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例分配给至少两个执行节点,以供至少两个执行节点并行地执行分配得到的作业实例。

根据本公开的实施例,上述不冲突实例确定模块包括:实例排序子模块,用于将与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例按优先级降序排列得到可执行队列;执行节点排序子模块,用于将至少两个执行节点按对应的数据源的剩余性能量降序排列;确定子模块,用于确定执行可执行队列中的第一个作业实例所需的性能消耗量,是否大于至少两个执行节点对应的数据源的剩余性能量中最大的剩余性能量;以及分配子模块,用于在执行可执行队列中的第一个作业实例所需的性能消耗量,不大于至少两个执行节点对应的数据源的剩余性能量中最大的剩余性能量的情况下,将可执行队列中的第一个作业实例分配给剩余性能量最大的数据源对应的执行节点。

根据本公开的实施例,上述分配子模块还用于在执行可执行队列中的第一个作业实例所需的性能消耗量,大于至少两个执行节点对应的数据源的剩余性能量中最大的剩余性能量的情况下,将可执行队列中的第一个作业实例列入缓存分配队列,以在预定时间间隔后被重新分配。

本公开的另一个方面还提供了一种作业调度系统,包括:管理控制平台,用于提交并配置待执行的多个作业实例,供调度节点获取;调度节点,用于执行上述的作业调度方法;以及至少两个执行节点,用于并行地执行调度节点分配的作业实例。

根据本公开的实施例,上述调度节点为多个,其中包括由多个调度节点选举得到的主节点,多个调度节点用于并行地执行以下操作:分片获取待执行的多个作业实例;根据获取的待执行的作业实例的关联信息,确定待执行的多个作业实例中是否包括与当前执行的作业实例具有关联关系的作业实例;以及在待执行的多个作业实例中包括与当前执行的作业实例具有关联关系的作业实例的情况下,根据执行信息,确定具有关联关系的作业实例中,与当前执行的作业实例不冲突的作业实例;其中的主节点还用于根据调度规则,将与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例分配给至少两个执行节点。

根据本公开的实施例,上述作业调度系统还包括:分布式协调服务器,用于监控至少两个执行节点的在线状态,并将至少两个执行节点的在线状态发送给调度节点,以作为调度节点分配至少两个作业实例的依据。

本公开的另一个方面提供了一种计算机可读存储介质,存储有计算机可执行指令,所述指令在被执行时用于实现如上所述的作业调度方法。

本共公开的另一个方面提供了一种计算机程序,该计算机程序包括计算机可执行指令,该指令在被执行时用于实现如上所述的作业调度方法。

根据本公开的实施例,可以至少部分地解决现有技术中能够并行的作业以串行方式执行,从而使得作业并行度低的技术问题,并因此可以实现具有关联关系但不冲突的作业实例也可并行执行的技术效果,并因此达到提高作业并行度和作业吞吐量的有益效果。

附图说明

通过以下参照附图对本公开实施例的描述,本公开的上述以及其他目的、特征和优点将更为清楚,在附图中:

图1示意性示出了根据本公开实施例的作业调度方法、装置和系统的应用场景;

图2示意性示出了根据本公开实施例的作业调度方法的流程图;

图3a~3d示意性示出了根据本公开实施例的确定与当前执行的作业实例不冲突的至少两个作业实例的流程图;

图4示意性示出了根据本公开实施例的分配至少两个作业实例的流程图;

图5示意性示出了根据本公开实施例另一实施例的作业调度方法的流程图;

图6a-图6b示意性示出了根据本公开实施例的作业调度装置的结构框图;

图7示意性示出了根据本公开实施例的作业调度系统的结构框图;

图8示意性示出了根据本公开实施例的适于实现作业调度装置的计算机系统的方框图。

具体实施方式

以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。

在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。

在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。

在使用类似于“a、b和c等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有a、b和c中至少一个的系统”应包括但不限于单独具有a、单独具有b、单独具有c、具有a和b、具有a和c、具有b和c、和/或具有a、b、c的系统等)。在使用类似于“a、b或c等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有a、b或c中至少一个的系统”应包括但不限于单独具有a、单独具有b、单独具有c、具有a和b、具有a和c、具有b和c、和/或具有a、b、c的系统等)。本领域技术人员还应理解,实质上任意表示两个或更多可选项目的转折连词和/或短语,无论是在说明书、权利要求书还是附图中,都应被理解为给出了包括这些项目之一、这些项目任一方、或两个项目的可能性。例如,短语“a或b”应当被理解为包括“a”或“b”、或“a和b”的可能性。

本公开的实施例提供了一种作业调度方法,该方法包括:获取待执行的多个作业实例,每个待执行的作业实例具有执行信息和关联信息;根据待执行的多个作业实例的关联信息,确定待执行的多个作业实例中是否包括与当前执行的作业实例具有关联关系的作业实例;在待执行的多个作业实例中包括与当前执行的作业实例具有关联关系的作业实例的情况下,根据执行信息,确定具有关联关系的作业实例中,与当前执行的作业实例不冲突的至少一个作业实例;根据调度规则,将与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例分配给至少两个执行节点,以供至少两个执行节点并行地执行分配得到的作业实例。

图1示意性示出了根据本公开实施例的作业调度方法、装置和系统的应用场景。需要注意的是,图1所示仅为可以应用本公开实施例的应用场景的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。

如图1所示,根据该实施例的应用场景100包括一个或多个调度节点101和至少两个执行节点102。

根据本公开的实施例,调度节点101与执行节点102之间例如可以通过网络连接,网络可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。

调度节点101与执行节点102例如均可以是终端设备,该终端设备上可以安装有各种客户端应用,其中,调度节点101上安装有作业调度相关的客户端应用,执行节点102上安装有作业执行相关的客户端应用。终端设备例如可以是各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机、服务器等等。

调度节点101用于获取待执行的作业实例,并根据调度算法,对待执行的作业实例的分析,筛选,确定与当前执行的作业实例具有关联关系,但不存在冲突的作业实例,并将确定的不冲突作业实例分配给执行节点102。可以理解的是,调度节点101还可以同时确定得到与当前执行的作业实例不具有关联关系的作业实例,并将该不具有关联关系的作业实例与上述确定的不冲突的作业实例一起分配给执行节点102。

至少两个执行节点102用于执行分配得到的作业实例,并下载相应的作业脚本,并行地执行作业脚本,以通过数据源实现对数据的抽取、推送及计算等操作,具体例如可以将新增或修改的数据从业务数据库中抽取到数据仓库中,或者可以将数据仓库中的数据推送至业务数据库等。

根据本公开的实施例,执行节点102还可以控制作业执行时间,以对作业的执行是否超时进行判断,并在判断该作业的执行超时的情况下,向调度节点发送超时信号,则调度节点还用于根据该超时信号向用户发送报警信息,并相应地清除该超时作业。

如图1所示,本公开实施例的应用场景例如还可以包括管理控制平台103及调度数据库104。

其中,管理控制平台103用于响应于用户的操作,配置作业的属性、提交作业并查询作业执行日志。根据本公开的实施例,该管理控制平台还可以对执行节点的作业执行进行控制,以控制执行节点102强制停止或强制启动以执行作业实例。

根据本公开的实施例,该管理控制平台103可以与调度数据库104进行交互,以将提交的作业存储至调度数据库104中,则调度节点101自该调度数据库104中获取待执行的作业实例。调度节点101例如还可以将通过调取算法确定的不冲突的作业实例存入该调度数据库104,以备对作业实例进行分配时调取。

根据本公开的实施例,如图1所示,该应用场景例如还可以包括分布式协调服务器,具体例如可以是分布式协调服务架构zookeeper105,其用于维护监听调度节点和执行节点的在线状态,并将该在线状态发送给调度节点101,以作为调度节点101分配作业实例的依据。

根据本公开的实施例,调度节点101向每个执行节点分配的待执行的作业实例队列例如可以存于该分布式协调服务架构中,则各执行节点102可以从zookeeper中存储的各自的待执行的作业实例队列中获取作业实例进行执行。

在调度节点101为多个的情况下,还可以利用分布式协调服务架构的主节点选举规则,自多个调度节点中选举得到主节点,则多个调度节点用于自调度数据库中并行地分片获取待执行的作业实例,分析作业实例,得到最终需要分配给执行节点的作业实例,而其中的主节点还用于根据调度规则,将该作业实例分配给至少两个执行节点102。可以理解的是,此处的多个调度节点中除主节点外的其他调度节点例如还可以不进行任何操作,仅用于作为主节点的备选节点,以在主节点出现故障时,重新选举其他的调度节点作为主节点,来执行相应的作业实例的分析、分配操作。

需要说明的是,本公开实施例所提供的作业调度方法一般可以由调度节点101执行。相应地,本公开实施例所提供的作业调度装置一般可以设置于调度节点101中。本公开实施例所提供的作业调度系统可以由调度节点101、至少两个执行节点102和管理控制平台103组成,且该作业调度系统例如还可以包括分布式协调服务器105,或者调服数据库104等。

可以理解的是,图1中的调度节点、执行节点及调度数据库的类型和数目仅仅是示意性的,分布式协调服务器的类型也仅仅是示意性的。根据实现需要,可以具有任意类型和任意数目的调度节点、执行节点、调度数据库及分布式协调服务器。

图2示意性示出了根据本公开实施例的作业调度方法的流程图。

如图2所示,该作业调度方法包括操作s210~操作s240。

在操作s210,获取待执行的多个作业实例,每个待执行的作业实例具有执行信息和关联信息。

根据本公开的实施例,待执行的多个作业实例具体例如可以是参考图1中的管理控制平台103提交的,且执行信息和关联信息是管理控制平台103在提交作业实例时配置的。

根据本公开的实施例,每个作业实例的关联信息例如可以包括有该作业实例与其他作业实例的依赖关系,具体例如可以是该作业实例与其他实例的上、下游关系,上游关系为:该作业实例的执行依赖于上游作业实例的执行结果,下游关系为:下游作业实例的执行依赖于该作业实例的执行结果;依赖关系例如还可以包括该作业实例所属的作业,通过该作业实例所属的作业即可确定与该作业实例属于同一作业的其他作业实例。

根据本公开的实施例,执行信息例如可以包括有控制属性和执行时间信息。其中,控制属性例如可以包括有跳跃执行属性、自身并行执行属性、上游并行执行属性、下游并行执行属性等,执行时间信息例如可以包括:该作业实例的执行时间、执行周期数等。具体的,跳跃执行属性是指:在存在属于同一作业的多个作业实例时,可以跳过执行时间较早的作业实例,而仅执行最新的作业实例即可,且该跳跃不会影响其他作业实例的执行的属性;自身并行执行属性是指:在属于同一作业的其他作业实例在执行时,可以同时执行该作业实例,而不会互相受到影响的属性;上游并行执行属性是指:在该作业实例的上游作业实例在执行时,只要该作业实例所需的数据不是当前执行的上游作业实例的执行结果,即可同时执行该作业实例;下游并行执行属性是指:在该作业实例的下游作业实例在执行时,只要该作业实例的执行不会清除下游作业实例执行时所需的数据,即可执行该作业实例的属性。

在操作s220,根据待执行的多个作业实例的关联信息,确定待执行的多个作业实例中是否包括与当前执行的作业实例具有关联关系的作业实例。

根据本公开的实施例,该操作s220具体可以为:根据每个待执行的作业实例的关联信息,分别确定每个待执行的作业实例中是否与当前执行的作业实例具有关联关系,此处具有关联关系的作业实例例如可以包括:属于同一作业的作业实例、上游作业实例和下游作业实例。

根据本公开的实施例,若待执行的作业实例与待执行的作业实例不具有关联关系,则说明该待执行的作业实例与当前执行的作业实例之间必定不存在冲突,则该待执行的作业实例就可以作为待分配给参考图1中的执行节点102的作业实例,例如可以存入参考图1中的调度数据库104中。

根据本公开的实施例,该操作s220的执行条件例如可以为:待执行的作业实例的跳跃执行属性为是,且不存在与待执行的作业实例属于同一作业,且执行时间大于待执行的作业实例的执行时间的作业实例的情况下执行,或者在待执行的作业实例的跳跃执行属性为否的情况下执行,其中,执行信息的执行时间信息包括待执行的作业实例的执行时间。由于此跳跃执行属性为是,且执行时间较早的作业实例的执行对执行数据的后续操作如抽取、推送等而言是无影响且无意义的,因此,操作s220仅在上述两个条件满足其一的情况下才执行,可以避免无意义作业实例的判断,从而可以提高调度效率。

根据本公开的实施例,在上述操作s220之前,该作业调度方法例如还可以包括以下操作:判断待执行的作业实例的跳跃执行属性,在所述待执行的作业实例的跳跃执行属性为是,且存在与待执行的作业实例属于同一作业、且执行时间大于待执行的作业实例的执行时间的作业实例的情况下,清除待执行的作业实例。

其中,跳跃执行属性的设定是依据执行该作业实例时用到的数据是否可以为执行上游作业实例得到的最新的执行结果,若用到的数据仅需用到最新的执行结果,而无需用到在较早时刻执行上游作业实例得到的执行结果,则该跳跃执行属性为是;若执行该作业实例时用到的数据不仅包括执行上游作业实例得到的最新的执行结果,还要用到在较早时刻执行上游作业实例得到的执行结果,则该跳跃执行属性则为否。

通过上述设置,由于在作业实例的跳跃执行属性为是的情况下,若多个待执行的作业实例及当前执行的作业实例中存在与当前判断的待执行的作业实例属于同一作业、且执行时间大于当前判断的待执行的作业实例的执行时间的作业实例时,由于当前判断的执行待执行的作业实例时用到的数据为较早时刻的数据,而非最新数据,则该作业实例的执行是无意义的,因此可以跳过并清除该作业实例,而仅执行最新的作业实例即可。

根据本公开的实施例,若待执行的作业实例与当前执行的作业实例具有关联关系,则说明当前执行的作业实例中,必定包括以下作业实例至少之一:与待执行的作业实例属于同一作业的作业实例、待执行的作业实例的上游作业实例、或待执行的作业实例的下游作业实例,此种情况下,则还需要进一步确定待执行的作业实例与当前执行的作业实例是否存在冲突。

则在操作s230,在待执行的多个作业实例中包括与当前执行的作业实例具有关联关系的作业实例的情况下,根据执行信息,确定具有关联关系的作业实例中,与当前执行的作业实例不冲突的至少一个作业实例。

根据本公开的实施例,该操作s230具体是根据与当前执行的作业实例具有关联关系的作业实例中每个待执行的作业实例的执行信息,确定该待执行的作业实例与具有关联关系的当前执行的作业实例是否存在冲突,若不存在冲突,该待执行的作业实例即为不冲突的作业实例之一。根据本公开的实施例,该操作s230的具体操作流程例如可以为后续参考图3a~图3d描述的操作流程,在此不再详述。

在操作s240,根据调度规则,将与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例分配给至少两个执行节点,以供至少两个执行节点并行地执行分配得到的作业实例。

根据本公开的实施例,该调度规则例如可以为考虑了待执行的作业实例的作业类型(如抽取作业或推送作业等),将待执行的作业实例分配给能够执行相应作业类型的执行节点的规则,例如还可以是综合考虑执行待执行的作业实例时所需的性能消耗量及每个执行节点的执行能力的调度规则,或者现有技术中任何的调度方法,本公开对此不作限定。

根据本公开的实施例,该调度规则具体例如可以与执行待执行的作业实例时所需的性能消耗量及执行节点执行作业时用到的数据源的剩余性能量相关,以将待执行的作业实例尽可能的分配给剩余性能量大的数据源对应的执行节点,避免单个数据源因压力过大而宕机或造成作业堵塞的情况发生,该操作s240的具体操作流程例如可以为后续参考图4描述的操作流程,在此不再详述。

综上可知,本公开实施例的作业调度方法,在确定待执行的多个作业实例中包括与当前执行的作业实例具有关联关系的作业实例下,通过确定该部分具有关联关系的作业实例是否与当前执行的作业实例是否存在冲突,可以将不存在冲突的待执行的作业实例分配给执行节点,以与当前执行的作业实例并行执行,相较于现有技术中将具有关联关系的作业实例留至与当前执行的作业实例中不再存在关联关系的情况下才执行的技术方案,避免了能够并行的作业以串行方式执行的缺陷,从而可以在一定程度上提高作业并行度,提高作业吞吐量。

综上可知,在上述操作s220之前,通过对跳跃执行属性的判断,可以跳过部分不必要的作业实例的运行,从而能够在一定程度上减少作业运行数量,减小系统软硬件资源的浪费。

根据本公开的实施例,在执行完操作s240之后,该调度方法例如还可以根据执行节点反馈的异常执行结果进行后续的操作,以对异常执行的作业实例进行重新分配或清除。

根据本公开的实施例,在根据异常执行结果得知已被分配的与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例中存在执行失败的作业实例、且执行失败的原因是超时的情况下,则清除该作业实例,并向用户发送报警信息,这是由于作业实例执行失败的原因是执行超时,可以说明该作业实例的设置不合理,而考虑到执行超时的作业实例被返回重试的结果通常都是再次执行超时,因此该作业实例的重试无疑会带来额外的系统资源消耗,则为了避免此种情况发生,可以清除该作业实例,并向用户发送报警信息,以使得用户可以及时的得知提交的作业实例不合理,以对该不合理的作业实例进行修改调整。

根据本公开的实施例,在根据异常执行结果得知已被分配的与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例中存在执行失败的作业实例、且执行失败的原因不是超时的情况下,重新分配该作业实例。在执行失败的原因不是超时的情况下,由于可能是执行节点出现故障导致的执行失败,此种情况下,为了保证该作业实例的正常执行,应该对该作业实例重新分配。具体的可以是将该作业实例的执行状态由“running”修改为“ready”,则该作业实例即可作为新一轮的待分配的作业实例,以在后续被分配。通过上述对执行失败的作业实例的重新分配,可以在一定程度上实现作业调度的动态调节,避免一些作业实例(例如重点作业实例)未被成功执行而导致的可能的生产事故的发生。

图3a~图3d示意性示出了根据本公开实施例的确定与当前执行的作业实例不冲突的至少两个作业实例的流程图。

如图3a所示,确定具有关联关系的作业实例中,与当前执行的作业实例不冲突的至少一个作业实例的方法包括操作s231-s232,即参考图2中的操作s230包括操作s231-s232。

在操作s231,确定具有关联关系的作业实例中是否包括与当前执行的作业实例属于同一作业的作业实例;在操作s232,在具有关联关系的作业实例中包括与当前执行的作业实例属于同一作业的作业实例,且该属于同一作业的作业实例的自身并行执行属性为是的情况下,确定该属于同一作业的作业实例与当前执行的、属于同一作业的作业实例不冲突。

根据本公开的实施例,待执行的作业实例及与其属于同一作业的作业实例具体可以是需要周期触发的作业在不同周期建立的作业实例,该两者是否可以并行取决于作业的自身并行执行属性,该作业的自身并行执行属性是依据该作业计算得到的数据存入的表类型,若计算得到的数据是存入增量表或快照表的,则该作业的自身并行执行属性为是,若计算得到的数据是存入全量表或拉链表的,则该作业的自身并行执行属性为否。

根据本公开的实施例,在具有关联关系的作业实例中包括与当前执行的作业实例属于同一作业的作业实例,且该属于同一作业实例的作业实例的自身并行执行属性为否的情况下,则说明该属于同一作业实例的作业实例与当前执行的作业实例相冲突。根据本公开的实施例,对于相冲突的待执行的作业实例,例如可以在固定时间后重新执行操作s231~操作s232,或者放入待执行的作业实例列表中,以备后续调度分配。

根据本公开的实施例,在具有关联关系的作业实例中不包括与当前执行的作业实例属于同一作业的作业实例的情况下,则需要进一步确定具有关联关系的作业实例是否包括当前执行的作业实例的上游和/或下游作业实例,这是由于上游和/或下游作业实例的执行也有可能与当前执行的作业实例存在冲突。

因此,如图3b所示,确定具有关联关系的作业实例中,与当前执行的作业实例不冲突的至少一个作业实例的方法,在操作s231-s232之后,还包括操作s233-s234。

在操作s233,确定具有关联关系的作业实例中是否包括当前执行的作业实例的上游和/或下游作业实例;在操作s234,在与当前执行的、属于同一作业的作业实例不冲突的属于同一作业的作业实例中,不包括当前执行的作业实例的上游作业实例和下游作业实例的情况下,确定属于同一作业的作业实例是与当前执行的作业实例不冲突的作业实例。

根据本公开的实施例,上述操作s233的执行条件包括:在具有关联关系的作业实例中不包括与当前执行的作业实例属于同一作业的作业实例的情况,或者在操作s232确定属于同一作业的作业实例与当前执行的、属于同一作业的作业实例不冲突的情况。

考虑到上述操作s233的执行条件,则在操作s233确定具有关联关系的作业实例不包括当前执行的作业实例的上游作业实例和下游作业实例的情况下,可以说明待执行的作业实例与当前执行的作业实例不具有关联关系,或者虽然存在属于同一作业的作业实例,但与当前执行的作业实例不冲突,因此可以确定待执行的作业实例是与当前执行的作业实例不冲突的作业实例,可以在后续被分配给执行节点,供执行节点执行。

根据本公开的实施例,如图3c所示,在操作s233中确定在具有关联关系的作业实例中包括当前执行的作业实例的上游和/或下游作业实例的情况下,则执行操作s235,则确定具有关联关系的作业实例中,与当前执行的作业实例不冲突的至少一个作业实例的方法还包括操作s233和操作s235,在操作s235,在具有关联关系的作业实例中包括当前执行的作业实例的上游和/或下游作业实例的情况下,根据上游和/或下游作业实例的下游并行执行属性和/或上游并行执行属性及执行时间信息,确定该上游和/或下游作业实例是否与当前执行的作业实例相冲突,相应地,待执行的作业实例的控制属性还包括有上游并行执行属性和/或下游并行执行属性,执行信息还包括执行时间信息。

根据本公开的实施例,上游并行执行属性的设定依据是执行该待执行的作业实例时所用到的数据存入表的类型,若执行该待执行的作业实例时所用到的数据存在增量表或快照表中,则该上游并行执行属性为是,若执行该待执行的作业实例时所用到的数据存在全量表或拉链表中,则该上游并行执行属性为否;下游并行执行属性的设定依据是该待执行的作业实例的执行结果存入表的类型,若存在增量表或快照表中,下游并行执行属性为是,若存在全量表或拉链表中,下游并行执行属性为否。

根据本公开的实施例,上述操作s235具体是确定待执行的作业实例与当前执行的作业实例中其上游和/或下游作业实例是否存在冲突,具体地,在当前执行的作业实例中包括某个具有关联关系的作业实例的上游/下游作业实例时,则仅需要确定该具有关联关系的作业实例是否与上游/下游作业实例存在冲突,而在当前执行的作业实例既包括某个具有关联关系的作业实例的上游作业实例,也包括下游作业实例的情况下,则需要确定该具有关联关系的作业实例是否与上游作业实例和下游作业实例存在冲突,只有其在与上游作业实例和下游作业实例均不冲突的情况下,才能够确定该具有关联关系的作业实例与当前执行的作业实例不冲突。

根据本公开的实施例,上述操作s235例如可以包括:在上游和/或下游作业实例的执行时间信息与当前执行的作业实例的执行时间信息不冲突,且上游和/或下游作业实例的下游并行执行属性和/或上游并行执行属性为是的情况下,确定上游和/或下游作业实例是与当前执行的作业实例不冲突的作业实例。

根据本公开的实施例,在确定上游和/或下游作业实例是否与当前执行的作业实例相冲突时,需要确定执行时间信息是否冲突,上游作业实例的执行时间信息与当前执行的作业实例相冲突是指:该上游作业实例的执行结果是当前执行的作业实例的执行所需的数据,即当前执行的作业实例的执行周期数与上游作业实例的执行周期数相同,若此时为了补数而执行该上游作业实例,则执行结果可能与当前执行的作业实例的执行中所用的数据不同,则会导致当前执行的作业实例无法正常执行,因此是冲突的执行时间信息;相应的,下游作业实例的执行时间信息与当前执行的作业实例相冲突是指:该下游作业实例的执行所需的数据是当前执行的作业实例的执行结果,即当前执行的作业实例的执行周期数与待执行的作业实例的执行周期数相同,则执行时间信息还可以包括执行周期数。

根据本公开的实施例,在上游和/或下游作业实例的执行时间信息与当前执行的作业实例的执行时间信息不冲突,且上游和/或下游作业实例的下游并行执行属性和/或上游并行执行属性为否的情况下,如图3d所示,操作s235具体可以包括操作s2351-s2352。

在操作s2351,确定上游和/或下游作业实例是否为重点作业实例;在操作s2352,在上游和/或下游作业实例是重点作业实例的情况下,停止当前执行的作业实例中该上游和/或下游作业实例的下游和/或上游作业实例的执行,并确定上游和/或下游作业实例是与当前执行的作业实例不冲突的作业实例。

根据本公开的实施例,待执行的作业实例是否为重点作业实例是在作业设置时人为设定好的,具体例如可以是作业提交人员提出重点作业标记请求,由审核人员审核通过后对重点作业进行标记,则在确定待执行的作业实例是否为重点作业实例时,只需确定该作业实例是否有重点作业标记,若有,则说明为重点作业,其中,重点作业标记例如可以为对重点作业增加标识位,通过该标识位即可以确定是否为重点作业实例。

在待执行的作业实例是重点作业实例时,为了该重点作业实例的及时执行,则将当前执行的作业实例中不能并行执行的上游和/或下游作业实例停止,并将该重点作业实例确定为不冲突的作业实例,即可直接对该重点作业实例进行分配执行,从而能够对重点作业实例起到重点保护作用,可以避免重点作业实例无法及时执行导致的生产事故的发生,从而能够提高作业调度的稳定性。

图4示意性示出了根据本公开实施例的分配至少两个作业实例的流程图。

如图4所示,该分配至少两个作业实例的流程包括操作s241-s244,即参考图2描述的操作s240可以包括参考图4描述的操作s241-s244。

根据本公开的实施例,根据调度规则,将与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例分配给至少两个执行节点可以包括以下操作:根据执行与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例执行时分别所需的性能消耗量,及至少两个执行节点对应的数据源的剩余性能量,将与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例依次分配给至少两个执行节点。根据本公开的实施例,该操作具体可以包括参考图4描述的操作s241-s244。

在操作s241,将与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例按优先级降序排列得到可执行队列;在操作s242,将至少两个执行节点按对应的数据源的剩余性能量降序排列;在操作s243,确定执行可执行队列中的第一个作业实例时所需的性能消耗量,是否大于至少两个执行节点对应的数据源的剩余性能量中最大的剩余性能量;以及在操作s244,在确定执行可执行队列中的第一个作业实例时所需的性能消耗量,不大于至少两个执行节点对应的数据源的剩余性能量中最大的剩余性能量的情况下,将可执行队列中的第一个作业实例分配给剩余性能量最大的数据源对应的执行节点。

根据本公开的实施例,在操作s241中,在将与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例按优先级降序排列得到可执行队列时,在其中的多个作业实例的优先级相同的情况下,该多个作业实例的排列顺序可以是随机排列;或者具有相同优先级的多个作业实例,可以按照执行时所需的性能消耗量降序排列,即将执行时性能消耗量大的作业实例排在靠前的位置,由于在操作s242-s244的分配操作中,是对可执行队列中的作业实例按顺序依次分配,因此通过上述作业实例的排列,可以避免性能消耗量大的作业实例因被延迟分配而存在的以下情况:因执行节点对应的数据源的剩余性能消耗量不足,被延迟的性能消耗量大的作业实例无法被正常分配。

根据本公开的实施例,如图4所示,根据调度规则,将与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例分配给至少两个执行节点例如还可以包括操作s245,即在操作s243确定执行可执行队列中的第一个作业实例时所需的性能消耗量,大于至少两个执行节点对应的数据源的剩余性能量中最大的剩余性能量的情况下,将可执行队列中的第一个作业实例列入延缓分配队列,以在预定时间间隔后被重新分配。通过此操作的设置,在执行当前待分配的作业实例所需的性能消耗量过大的情况下,不再立即分配给当前的执行节点,而是作为延缓分配的作业实例,待预定时间间隔后重新返回执行操作s242-操作s243,或者在执行节点对应的数据源释放了资源之后,剩余性能量大于执行延缓分配的作业实例时消耗的性能消耗量的情况下,重新分配该延缓分配的作业实例。

根据本公开的实施例,在操作s242-s244中,对与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例进行排列,并将操作s241中排列得到的可执行队列中的第一个作业实例分配给剩余性能量最大的数据源对应的执行节点,是为了确保优先向对应的数据源的剩余性能量大的执行节点分配待执行的作业实例,防止多个作业实例被分配给同一个执行节点时,多个作业在同一数据源上抽取或推送数据造成数据源宕机或作业拥堵的情况发生,从而能够保证各个执行节点的正常工作,提高作业调度的稳定性。

根据本公开的实施例,上述操作s242-s245是循环执行的操作,直至操作s241中得到的可执行队列中每个作业实例依次被分配,需要说明的是,此处的每个作业实例依次被分配是指对每个作业实例依次执行了操作s242-操作s243,并根据操作s243的确定结果执行了操作s244或s245,而不是指可执行队列中的每个作业实例均被分配给执行节点。

图5示意性示出了根据本公开另一实施例的作业调度方法的流程图。

如图5所示,本公开实施例的作业调度方法具体可以包括操作s501-s518。

首先,在操作s501,获取待执行的多个作业实例,根据本公开的实施例,该操作s501例如可以为参考图2描述的操作s210,该获取待执行的作业实例具有执行信息和关联信息,执行信息包括控制信息和执行时间信息,控制信息包括跳跃执行属性、自身并行属性、上游并行执行属性及下游并行执行属性,在此不再赘述。

然后对操作s501获取的每个待执行的作业实例执行以下操作s502-操作s518:

在操作s502,判断跳跃执行属性是否为是,在判断结果为是的情况下,执行操作s503,在判断结果为否的情况下,执行操作s505;

在操作s503,判断所有待执行的作业实例及正在执行的作业实例中是否存在与该待执行的作业实例属于同一作业,且执行时间大于该待执行的作业实例的作业实例,在存在的情况下,说明该待执行的作业实例的执行可有可无,则执行操作s504,在不存在的情况下,说明该待执行的作业实例是同一作业中最新的作业实例,则执行操作s505;

在操作s504,清除当前的待执行的作业实例,并返回对下一个待执行的作业实例执行操作s502;

在操作s505,判断待执行的作业实例是否与当前执行的作业实例属于同一作业,若判断结果为是,则执行操作s506,若判断结果为否,则执行操作s507,根据本公开的实施例,该操作s505例如可以是参考图3a描述的操作s231,在此不再赘述;

在操作s506,判断该待执行的作业实例的自身并行执行属性是否为是,在判断结果为是的情况下,说明该待执行的作业实例的执行与属于同一作业的正在执行的其他作业实例不冲突(具体例如可以为参考图3a描述的操作s232),则执行操作s507,在判断结果为否的情况下,则说明该待执行的作业实例的执行与属于同一作业的正在执行的其他作业实例相冲突,则返回对下一个待执行的作业实例执行操作s502,根据本公开的实施例,该操作s506例如可以是参考图3a描述的操作s232,在此不再赘述;

在操作s507,判断该待执行的作业实例中是否为当前执行的作业实例的下游作业实例,若判断结果为是,需要对该待执行的作业实例是否与当前执行的上游作业实例相冲突进行判断,则执行操作s508,若判断结果为否,则执行操作s512,根据本公开的实施例,该操作s507例如可以是参考图3b中的操作s233,区别仅在于,此处仅判断是否为当前执行的作业实例的下游作业实例,并且,考虑到上游作业实例的执行对待执行的作业实例产生的影响较大,因此先判断是否为当前执行的作业实例的下游作业实例,再判断是否为当前执行的作业实例的上游作业实例;

在操作s508,判断该待执行的作业实例的执行时间信息是否与当前执行的作业实例中上游作业实例的执行时间信息相冲突,在判断结果为否的情况下,则进一步执行操作s509,在判断结果为是的情况下,则说明该待执行的作业实例与正在执行的上游作业实例相冲突,则返回对下一个待执行的作业实例执行操作s502;

在操作s509,判断该待执行的作业实例的上游并行执行属性是否为是,在判断结果为是的情况下,说明该待执行的作业实例可以与当前执行的上游作业实例并行执行,则执行操作s512,在判断结果为否的情况下,说明该待执行的作业实例不允许与其上游作业实例并行执行,则执行操作s510;根据本公开的实施例,操作s508-操作s509可以是参考图3c描述的操作s325,在此不再赘述;

在操作s510,判断该待执行的作业实例是否为重点作业实例,若判断结果为是,则执行操作s511,停止当前执行的作业实例中待执行作业实例的上游作业实例,以使得该重点作业实例优先执行,并继续执行操作s512,若判断结果为否,则为了避免冲突,先暂不分配该待执行的作业实例,并返回对下一个待执行的作业实例执行操作s502,根据本公开的实施例,该操作s510例如可以是参考图3d中的操作s2351,在此不再赘述;

在操作s512,判断待执行的作业实例是否为当前执行的作业实例的上游作业实例,若判断结果为是,则需要继续判断该上游作业实例是否与当前执行的作业实例相冲突,因此执行操作s513,若判断结果为否,则说明该待执行的作业实例与当前执行的作业实例均不冲突,则执行操作s517,根据本公开的实施例,该操作s512例如可以是参考图3b中的操作s233,区别仅在于,此处仅判断是否为当前执行的作业实例的上游作业实例;

在操作s513,判断该待执行的作业实例的执行时间信息是否与当前执行的作业实例中其下游作业实例的执行时间信息相冲突,在判断结果为否的情况下,则进一步执行操作s514,在判断结果为是的情况下,则说明该待执行的作业实例与正在执行的其下游作业实例相冲突,则返回对下一个待执行的作业实例执行操作s502;

在操作s514,判断该待执行的作业实例的下游并行执行属性是否为是,在判断结果为是的情况下,说明该待执行的作业实例可以与其下游作业实例并行执行,则执行操作s517,在判断结果为否的情况下,说明该待执行的作业实例不允许与其下游作业实例并行执行,则执行操作s515;根据本公开的实施例,操作s513-操作s514可以是参考图3c描述的操作s325,在此不再赘述;

在操作s515,判断该待执行的作业实例是否为重点作业实例,若判断结果为是,则执行操作s516,停止当前执行待执行的作业实例的下游作业实例,以使得该重点作业实例优先执行,并继续执行操作s517,若判断结果为否,则为了避免冲突,先暂不分配该待执行的作业实例,并返回对下一个待执行的作业实例执行操作s502,根据本公开的实施例,该操作s515例如可以是参考图3d中描述的操作s2351,在此不再赘述;

在操作s517,分配并执行该待执行的作业实例,该操作例如可以包括:在作业被分配至执行节点前,先检查目标执行节点对应的数据源的剩余性能是否够用,若对应的数据源的剩余性能满足不了当前执行的作业实例的需求时,则将当前待执行的作业实例跳过,等待下一次的分配;具体例如可以是,执行该作业调度方法的调度节点获取按优先级降序排列的可执行作业列表,然后通过zookeeper获取当前存活的每个命名空间的执行节点清单,并对每个命名空间下的存活节点按照剩余性能量降序排列,然后将可执行作业列表中未被跳过的第一个作业实例分配给对应的命名空间中剩余性能量最大的执行节点,然后重新对执行节点进行排序,接着对可执行作业列表中的作业实例进行依次分配,直到分配完毕,根据本公开的实施例,该操作s517例如还可以是在确定得到所有需要分配的待执行的作业实例后,执行参考图4描述的操作s241-操作s245,在此不再赘述;

根据本公开的实施例,在将待执行的作业实例分配后,通过执行节点反馈的执行信息,可得到三种不同的执行结果,第一种为执行成功,则即结束该待执行的作业实例的调度;第二种为执行不成功,且该执行不成功是由于执行超时导致的,则向用户发送警告信息,即执行参考图5中的操作s518;第三种为执行不成功且不是由于执行超时导致的,则将该待执行的作业实例返回重新分配,以作为下一轮的待分配的待执行的作业实例,即返回执行操作s517。

综上可知,本公开实施例的作业调度方法通过对作业实例增加一系列控制属性,通过优化后的调度算法,能够达到提高同时运行的作业总量,并始终使系统在能够承受的压力范围内工作,同时兼顾重点作业的执行保护,能够保证重点作业的及时执行,避免生产事故的发生。

图6a-图6b示意性示出了根据本公开实施例的作业调度装置的结构框图,其中,图6b示意性示出了作业调度装置中实例调度模块的结构框图。

如图6a所示,该作业调度装置600包括实例获取模块610、关联实例确定模块620、不冲突实例确定模块630和实例调度模块640。

其中,实例获取模块610用于获取待执行的多个作业实例,其中每个待执行的作业实例具有执行信息和关联信息。根据本公开的实施例,该实例获取模块610例如可以用于执行参考图2描述的操作s210,在此不再赘述。

其中,关联实例确定模块620用于根据待执行的作业实例的关联信息,确定待执行的多个作业实例中是否包括与当前执行的作业实例具有关联关系的作业实例。根据本公开的实施例,该关联实例确定模块620例如可以用于执行参考图2描述的操作s220,在此不再赘述。

其中,不冲突实例确定模块630用于在待执行的多个作业实例中包括与当前执行的作业实例具有关联关系的作业实例的情况下,根据执行信息,确定具有关联关系的作业实例中,与当前执行的作业实例不冲突的至少一个作业实例。根据本公开的实施例,该不冲突实例确定模块630例如可以用于执行参考图2描述的操作s230、以及参考图3a描述的操作s231-操作s232、参考图3b描述的操作s233-操作s234、参考图3c描述的操作s235及参考图3d描述的操作s2351-操作s2352,在此不再赘述。

其中,实例调度模块640用于根据调度规则,将与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例分配给至少两个执行节点,以供至少两个执行节点并行地执行分配得到的作业实例。根据本公开的实施例,该实例调度模块640例如可以用于执行参考图2描述的操作s240,在此不再赘述。

根据本公开的实施例,如图6b所示,该实例调度模块640例如可以包括实例排序子模块641、执行节点排序子模块642、确定子模块643以及分配子模块644。

其中,实例排序子模块641用于将与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例按优先级降序排列得到可执行队列;执行节点排序子模块642用于将所述至少两个执行节点按对应的数据源的剩余性能量降序排列;确定子模块643用于确定执行可执行队列中的第一个作业实例所需的性能消耗量,是否大于至少两个执行节点对应的数据源的剩余性能量中最大的剩余性能量;分配子模块644用于在确定执行可执行队列中的第一个作业实例所需的性能消耗量,不大于至少两个执行节点对应的数据源的剩余性能量中最大的剩余性能量的情况下,将可执行队列中的第一个作业实例分配给剩余性能量最大的数据源对应的执行节点;根据本公开的实施例,实例排序子模块641、执行节点排序子模块642、确定子模块643以及分配子模块644可以分别用于执行参考图4描述的操作s241-操作s244,在此不再赘述。

根据本公开的实施例,上述分配子模块644例如还可以用于在确定执行可执行队列中的第一个作业实例所需的性能消耗量,大于至少两个执行节点对应的数据源的剩余性能量中最大的剩余性能量的情况下,将可执行队列中的第一个作业实例列入延缓分配队列,以在预定时间间隔后被重新分配。根据本公开的实施例,该分配子模块644例如还可以用于执行参考图4描述的操作s245,在此不再赘述。

根据本公开的实施例,如图6a所示,该作业调度装置600例如还可以包括实例清除模块650,该实例清除模块650用于在待执行的作业实例的跳跃执行属性为是,且存在与待执行的作业实例属于同一作业、且执行时间大于待执行的作业实例的执行时间的作业实例的情况下,清除待执行的作业实例;根据本公开的实施例,该实例清除模块650例如还可以用于在至少两个作业实例中存在执行失败的作业实例、且执行失败的原因是超时的情况下,清除该作业实例。

根据本公开的实施例,如图6a所示,该作业调度装置600例如还可以包括报警模块660,该报警模块660用于在与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例中存在执行失败的作业实例、且执行失败的原因是超时的情况下,清除该作业实例并向用户发送报警信息。

根据本公开的实施例的模块、子模块、单元、子单元中的任意多个、或其中任意多个的至少部分功能可以在一个模块中实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以被拆分成多个模块来实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(fpga)、可编程逻辑阵列(pla)、片上系统、基板上的系统、封装上的系统、专用集成电路(asic),或可以通过对电路进行集成或封装的任何其他的合理方式的硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,根据本公开实施例的模块、子模块、单元、子单元中的一个或多个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。

例如,实例获取模块610、关联实例确定模块620、不冲突实例确定模块630、实例调度模块640、实例清除模块650、报警模块660、实例排序子模块641、执行节点排序子模块642、确定子模块643以及分配子模块644中的任意多个可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,实例获取模块610、关联实例确定模块620、不冲突实例确定模块630、实例调度模块640、实例清除模块650、报警模块660、实例排序子模块641、执行节点排序子模块642、确定子模块643以及分配子模块644中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(fpga)、可编程逻辑阵列(pla)、片上系统、基板上的系统、封装上的系统、专用集成电路(asic),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,实例获取模块610、关联实例确定模块620、不冲突实例确定模块630、实例调度模块640、实例清除模块650、报警模块660、实例排序子模块641、执行节点排序子模块642、确定子模块643以及分配子模块644中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。

图7示意性示出了根据本公开实施例的作业调度系统的结构框图。

如图7所示,该作业调度系统700包括管理控制平台710、调度节点720和至少两个执行节点730。

其中,管理控制平台710用于提交并配置待执行的多个作业实例,供调度节点720获取。根据本公开的实施例,该管理控制平台710例如可以是参考图1描述的管理控制平台103,在此不再赘述。

其中,调度节点720用于对待执行的多个作业实例进行判断分析,根据调度算法确定得到待分配的至少两个作业实例,并将该至少两个作业实例分配给至少两个执行节点730。根据本公开的实施例,该调度节点720例如可以是参考图1描述的调度节点101,其具体例如可以用于执行本公开实施例提出的作业调度方法,例如可以用于执行参考图2-图5描述的操作流程,在此不再赘述。

其中,至少两个执行节点730用于并行地执行调度节点720分配的作业实例。根据本公开的实施例,该执行节点730具体例如可以是参考图1描述的执行节点102,在此不再赘述。

根据本公开的实施例,该作业调度系统700中的调度节点720为多个,其中包括有由多个调度节点选举得到的主节点,则多个调度节点用于并行地执行以下操作:分片获取待执行的多个作业实例;根据获取的待执行的作业实例的关联信息,确定待执行的多个作业实例中是否包括与当前执行的作业实例具有关联关系的作业实例;以及在待执行的多个作业实例中包括与当前执行的作业实例具有关联关系的作业实例的情况下,根据执行信息,确定具有关联关系的作业实例中,与当前执行的作业实例不冲突的作业实例,根据本公开的实施例,上述并行执行的操作例如可以是参考图2描述的操作s210-操作s230,在此不再赘述。其中的主节点还可以执行以下操作:根据调度规则,将与当前执行的作业实例不具有关联关系的作业实例及确定的至少一个作业实例分配给至少两个执行节点,根据本公开的实施例,该操作例如可以是参考图2描述的操作s240,在此不再赘述。本公开实施例,通过设置多个调度节点,并使多个调度节点并行地执行确定与当前执行的作业实例不冲突的作业实例的操作,可以在一定程度上提高调度效率,并可以避免单个调度节点出现故障时,整个作业调度系统无法正常工作的缺陷。

根据本公开的实施例,如图7所示,该作业调度系统700例如还可以包括分布式协调服务器740,该分布式协调服务器740用于监控至少两个执行节点的在线状态,并将至少两个执行节点的在线状态发送给调度节点,以作为调度节点分配至少两个作业实例的依据。根据本公开的实施例,该分布式协调服务器740例如可以为参考图1描述的分布式协调服务器105,具体例如可以是zookeeper分布式协调服务架构,在此不再赘述。本公开实施例通过设置该分布式协调服务器740,可以用于实现多个调度节点中主调度节点的选举,还可以在为了扩容而新增执行节点时,实时的将该新增执行节点的在线状态发送给调度节点,而无需重启系统,从而可以实现系统的动态扩容。

图8示意性示出了根据本公开实施例的适于实现作业调度系统中调度节点或执行节点的计算机系统的方框图。图8示出的计算机系统仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。

如图8所示,根据本公开实施例的计算机系统800包括处理器801,其可以根据存储在只读存储器(rom)802中的程序或者从存储部分808加载到随机访问存储器(ram)803中的程序而执行各种适当的动作和处理。处理器801例如可以包括通用微处理器(例如cpu)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(asic)),等等。处理器801还可以包括用于缓存用途的板载存储器。处理器801可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。

在ram803中,存储有系统800操作所需的各种程序和数据。处理器801、rom802以及ram803通过总线804彼此相连。处理器801通过执行rom802和/或ram803中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除rom802和ram803以外的一个或多个存储器中。处理器801也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。

根据本公开的实施例,系统800还可以包括输入/输出(i/o)接口805,输入/输出(i/o)接口805也连接至总线804。系统800还可以包括连接至i/o接口805的以下部件中的一项或多项:包括键盘、鼠标等的输入部分806;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分807;包括硬盘等的存储部分808;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分809。通信部分809经由诸如因特网的网络执行通信处理。驱动器810也根据需要连接至i/o接口805。可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器810上,以便于从其上读出的计算机程序根据需要被安装入存储部分808。

根据本公开的实施例,根据本公开实施例的方法流程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读存储介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该计算机程序被处理器801执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的控制设备等可以通过计算机程序模块来实现。

本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。

根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的rom802和/或ram803和/或rom802和ram803以外的一个或多个存储器。

附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。

以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。

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