一种应用于数据分析任务的工作流调度方法与流程

文档序号:15198540发布日期:2018-08-19 02:31阅读:146来源:国知局

本发明涉及计算机软件领域,尤其涉及一种应用于数据分析任务的工作流调度方法。



背景技术:

随着人们生活的数字化、智能化程度提高,数据分析工作也扮演着越来越重要的角色,由于业务的多样性、复杂性,经常需要把多个数据分析任务组合成一个更大的分析任务,即以工作流的形式执行。

数据分析工作流的调度执行受数据大小、储存位置、业务流程、计算机运算、数据传输等多个因素的影响,直接关系整个任务的稳定、可靠、高效性,要对该过程进行有效优化,就需要综合多个方面的因素,设计一种科学合理的调度优化方法。

目前流行的调度方法普遍具有简单易理解的优点,但是也存在以下不足之处:

(1)目前的调度方法中往往由一个节点管家负责各个节点的任务执行,一旦一个节点程序运行出错或者节点管家宕机,会导致整个数据分析任务执行失败。

(2)流程冗余,遇到一个节点的输入和输出一样时,会启动多余的任务执行动作,比如重复的io操作。

(3)缺乏对业务复杂但是数据量小的分析任务的优化,不管数据量的大小都采用进程间通信,增加了数据交互成本和进程内程序上下文初始化成本。



技术实现要素:

本发明的目的在于:为解决目前的调度方法中往往由一个节点管家负责各个节点的任务执行,一旦一个节点程序运行出错或者节点管家宕机,会导致整个数据分析任务执行失败的问题,本发明提供一种应用于数据分析任务的工作流调度方法。

本发明的技术方案如下:

一种应用于数据分析任务的工作流调度方法,包括如下步骤:

s1:接收任务序列,解析并封装任务序列中的最小任务单元;

s2:根据最小任务单元构建数据流向图,并把数据流向图中的节点划分成多个数据生产-消费关系,每一个数据生产-消费关系中包含节点;

s3:对数据生产-消费关系进行初始化;

s4:在初始化后的数据生产-消费关系中查找能够并行的节点;

s5:通过多个工作线程按照数据流向图执行任务,其中并行的节点同时执行;

s51:根据s4中初始化后的数据生产-消费关系计算并验证当前节点是否满足所有执行条件;

若满足,进入s52,若不满足,则进行等待,直到满足再进行s52;

s52:工作线程执行任务;

s53:对任务执行后的结果封装在内存中;

s6:循环s4-s5,直到带有结束标识的任务执行完毕,整个工作流调度完成。

所述s5中多个同类型的执行条件由一个执行条件计数器维护,计执行条件计数器采用自增自减方式。

进一步地,所述s2中,所述构建数据流向图时,若检测到接收到的序列任务中包含结束标识的任务时,根据当前运行环境的唯一标识查找当前用户本次提交的完整工作流程,这个完整的工作流程就作为一个数据流向图。

具体地,对数据生产-消费关系进行初始化包括为数据生产-消费者所在的节点进行编号和设定节点的执行条件初始值;所述s3具体为:

s31:根据s2中的数据流向图计算节点个数,节点的个数等于数据流向图中的所有生产-消费关系中所有不重复的生产者的个数;

s32:设置每一个节点的初始值,初始值包括节点编号、前驱节点编号、后继节点编号和节点将要执行的任务。

具体地,对于s4中所述的并行节点的并行规则为自定义规则。

具体地,所述s5包括:

s51:据s3中初始化后的数据流向图中的节点信息判断当前节点是否满足所有执行条件;所述执行条件包括所需要的输入数据是否能够找到、已有其他节点准备完毕或者任务的运行资源是否足够;

若满足,进入s52,若不满足,则进行等待;其中,一个执行条件由一个执行条件计数器维护,执行条件计数器采用自增自减方式,每当一个前置条件满足时,执行条件计数器减1计数器减小到0是,执行任务,否则,进行等待;

s52:工作线程执行任务,执行任务可以通过执行程序代码或者执行流程控制命令实现;

s53:对任务执行后的结果封装在内存中,任务执行后的结果包括任务类型、副本个数和值。

根据权利要求所述的一种应用于数据分析任务的工作流调度方法,其特征在于,所述s53中,对执行任务后的结果封装具体为:

a)根据任务的不同类型封装成不同的结果类型;

b)结果封装的副本数由当前节点的后继任务个数决定;

c)结果的值是任务执行后的具体数据、内存或者外存中的数据引用地址。

采用上述方案后,本发明的有益效果如下:

(1)本发明中提出了数据流向图的构建,s2的数据流向图的划分中,划分之后,整个工作流被划分成很多小的生产-消费关系,每一个关系之间相互独立的,可以单独执行;并且,s51的多个同类型的执行条件由一个执行条件计数器维护,该计数器是采用自增自减的方式,因此,本发明降低了节点之间的强依赖关系,各个节点之间独立执行,当一个生产-消费关系放在一个机器上执行失败了或者该机器断电了,它不影响其它关系的执行,有利于宕机恢复,提供更加可靠、高效的数据分析任务工作流调度方法;

(2)本发明的每一个序列任务(生产--消费关系)的执行由工作线程完成,当这些工作线程属于同个进程时,可以共享调度信息,利于多线程协作,提高了整个工作流调度的速率。

(3)本发明把一个运行结果封装在内存中,下一个线程来执行时可以直接在内存中查找数据,不用再去读取数据,降低了系统冗余输入输出,更利于提高业务复杂但数据量小的分析任务的执行效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明的流程图;

图2为本发明的实施例中的具体的一个工作流调度流程图。

图3为本发明的实施例中的具体的一个数据流向图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

以下结合附图和实施例详细说明本发明的技术方案。

下面,首先对本发明实施例中的各类名词进行解释说明。

数据集流向标识:通常用data(producer,consumer)表示,producer与consumer分别表示该数据集流向标识的生产者和消费者,数据由生产者通过某种动作产生然后传递给消费者使用。

节点标识:通常用node(number,prenodes,succnodes,action)表示,number为节点编号,prenodes表示该节点的一个或多个前驱节点,succnodes表示该节点的一个或多个后继节点,action代表该节点的某种动作。

任务标识:通常用task(from,to,action)表示,代表描述工作流的最小单元,若干个task组合成一个完整的工作流;其中from表示该task的0个或1个来向,to代表0个或1个去向,action代表应task要执行的具体事务,可以等同于node的action。

唯一性标识:通常用identity(user,job)表示,它代表data、node和task三者在相同程序运行环境上的唯一性,user为提交任务的用户,job代表该任务从属的作业。

结束标识:当任务标识的from和to相同时,认定它为结束任务标识。

本发明的应用于数据分析任务的工作流调度方法,包括如下步骤:

s1:接收任务序列,解析并封装用户提交的任务序列中的最小任务单元,最小的任务单元包括上文提到的各类标识。

s2:根据最小任务单元构建数据流向图,构建数据流向图时,若检测到接收到的序列任务中包含结束标识的任务时,根据当前运行环境的唯一性标识查找当前用户本次提交的完整工作流程,这个完整的工作流程就作为一个数据流向图,并把数据流向图中的节点划分成几个数据生产-消费关系,每个生产-消费关系就是一个子图且至少包含一个生产者和消费者,子图中包含节点;本发明中,以静态链接表的形式构建数据流向图;

s3:对s2中的数据生产-消费关系进行初始化;具体步骤为:

s31:s301:根据s2中的数据流向图计算节点个数,节点的个数等于数据流向图中的所有生产-消费关系中所有不重复的生产者的个数;具体地,根据数据流向图解析任务序列的from表示并去重,得到节点的个数,节点的个数等于数据流向图中所有不重复的生产者的个数。

s32:根据数据流向图中解析的每个节点的前驱动节点和后继节点,对节点进行初始化,即:设置每一个节点的初始值,初始值包括节点编号number、前驱节点编号prenodes、后继节点编号succnodes和节点将要执行的任务action。

s4:在初始化后的数据生产-消费关系中查找可并行的节点,并行规则为自定义规则。并行节点指可以同时执行任务的一个或多个节点,这些节点组成了整个数据流向图中可并行执行的分支,每一个分支至少包含一个节点。

s5:节点任务的执行由专职的工作线程完成,本方法中包含多个工作线程,通过多个工作线程按照数据流向图执行任务,并行的节点同时执行;各个工作线程可以共属同一个进程,也可以属于不同进程。

其中,s5包括:

s51:据s3中初始化后的数据生产-消费关系计算并验证当前节点是否满足所有执行条件;所述执行条件包括所需要的输入数据是否能够找到、已有其他节点准备完毕或者任务的运行资源是否足够;

如果设有多个执行条件,则需要满足每一个执行条件,若每个执行条件都满足,进入s52,若不是都满足,则进行等待;如果只设有单个执行条件,若满足这个执行条件,则进入s52,若不满足,则进行等待;其中,一个执行条件由一个执行条件计数器维护,执行条件计数器采用自增自减方式,每当一个前置条件满足时,执行条件计数器减1计数器减小到0是,执行任务;否则,进行等待,直到满足才进入s52;

s52:工作线程执行任务,执行任务可以通过执行程序代码或者执行流程控制命令实现;

s53:对任务执行后的结果封装在内存中,任务执行后的结果包括任务类型、副本个数和值,具体如下:

a)根据任务的不同类型封装成不同的结果类型;

b)结果封装的副本数由当前节点的后继任务个数决定;

c)结果的值是任务执行后的具体数据、内存或者外存中的数据引用地址。

s6:循环s4-s5,直到带有结束标识的任务执行完毕,整个工作流调度完成。

下面,将结合附图2和实施例1对本发明的进行更加清楚、完整的说明。

实施例1

s1:接收任务序列,解析并封装任务序列中的最小任务单元,最小的任务单元包括上文提到的各类标识。

s2:根据最小任务单元构建数据流向图,并把数据流向图划分成若干个生产-消费关系,数据流向图中包含节点;构建数据流向图时,若检测到接收到的序列任务中包含结束标识的任务时,根据当前运行环境的唯一性标识查找当前用户本次提交的完整工作流程,这个完整的工作流程就作为一个数据流向图,数据流向图包含节点;如图2中,共有7个最小任务单元,节点1代表流式数据,节点2代表离线数据,节点3代表按列合并,节点4代表特征转换/特征重要性选择,节点5代表模型训练,节点6代表模型预测,节点7代表写入结果。对于s1中得到的7个节点,构成了一个含有8个任务,分别是:

(1)task(1,3,接收流式数据)

(2)task(2,3,接收离线数据)

(3)task(3,4,合并数据)

(4)task(4,5,特征转换、特征重要性选择)

(5)task(4,6,特征转换、特征重要性选择)

(6)task(5,6,模型训练)

(7)task(6,7,模型预测)

(8)task(7,7,写入结果)

对该工作流调度流程构建一个数据流向图,构建出的数据流向图如图3所示,将图2中的工作流调度图分成了三个大的流程,即最上方的编号1、2、3,应当注意,这里的1、2、3和上文(包括图1、图2)中所描述的节点1、2、3不同,这里的1、2、3仅仅是为了方便表示流程而用,具体地,这三个大的流程分为4个生产-消费关系,如图3中标号的(1)、(2)、(3)和(4)。

s3:对s2中的数据生产-消费关系进行初始化;具体步骤如下:

s301:根据s2中的数据流向图计算节点个数,节点的个数等于数据流向图中所有不重复的生产者的个数;具体地,根据数据流向图解析任务序列的from表示并去重,得到节点的个数,节点的个数等于数据流向图中所有不重复的生产者的个数。对于图2来说,节点的个数为7个。

s302:根据数据流向图中解析的每个节点的前驱动节点和后继节点,对节点进行初始化,即:设置每一个节点的初始值,初始值包括节点编号number、前驱节点编号prenodes、后继节点编号succnodes和节点将要执行的任务action。图2中,节点3初始化后前驱节点为节点1和节点2,后继节点为节点4,执行的任务为合并数据。

s4:在初始化后的数据流向图中查找并行的节点,并行规则为自定义规则。并行节点指可以同时执行任务的一个或多个节点,这些节点组成了整个数据流向图中可并行执行的分支,每一个分支至少包含一个节点。图2中,节点1和节点2是并行节点,节点5和节点6是并行节点,其中,节点1和节点2同时也是工作流的起始节点。

s5:节点任务的执行由专职的工作线程完成,本方法中包含多个工作线程,通过多个工作线程按照数据流向图执行任务,并行的节点同时执行;各个工作线程可以共属同一个进程,也可以属于不同进程。

其中,s5包括:

s51:据s3中初始化后的数据流向图中的节点信息判断当前节点是否满足所有执行条件;所述执行条件包括所需要的输入数据是否能够找到、已有其他节点准备完毕或者任务的运行资源是否足够;

如果设有多个执行条件,则需要满足每一个执行条件,若每个执行条件都满足,进入s52,若不是都满足,则进行等待;如果只设有单个执行条件,若满足这个执行条件,则进入s52,若不满足,则进行等待;其中,一个执行条件由一个执行条件计数器维护,执行条件计数器采用自增自减方式,每当一个前置条件满足时,执行条件计数器减1计数器减小到0是,执行任务;否则,进行等待,直到满足才进入s52;

因为node4的succnodes节点node5和node6是两个可以并行的分支起始节点,node5的任务是获得数据后执行模型训练操作并将执行结果写入系统,node6的任务是执行模型预测。

s52:工作线程执行任务,执行任务可以通过执行程序代码或者执行流程控制命令实现;工作线程根据任务类型选择是否在当前线程内执行任务,具体地,如果当前任务的程序开发语言和本发明的调度平台开发语言一致,为是,反之为否;如果为否,那么当前线程启动一个子进程来完成任务。本实施例中是案列合并。

对于node4、node5和node6而言,由于是并行的两个分支,所以存在3种节点的执行先后情况:

a)node5先于node6开始执行并执行完毕;

b)node6先于node5开始执行;

c)node5和node6都在执行当中;

当满足(a)时,node6将无停顿执行,当满足(b)和(c)时,node6将进行执行等待,一直到node5执行完毕后,node6再继续执行;最后node7执行写入结果操作将node6的执行结果保存到用户指定位置,至此该预测分析任务调度完毕。

s53:对任务执行后的结果封装在内存中,任务执行后的结果包括任务类型、副本个数和值,具体如下:

a)根据任务的不同类型封装成不同的结果类型;

b)结果封装的副本数由当前节点的后继任务个数决定;比如,节点4的副本数为2;

c)结果的值是任务执行后的具体数据、内存或者外存中的数据引用地址。

最后将node7执行的结果写入用户指定的位置

s6:循环s4-s5,直到带有结束标识的任务执行完毕,整个工作流调度完成。

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