数据处理作业调度方法及装置的制造方法

文档序号:10552750阅读:244来源:国知局
数据处理作业调度方法及装置的制造方法
【专利摘要】本发明实施例提供一种数据处理作业调度方法和装置,所述方法包括:获取预先配置的数据处理流程的各个作业之间的依赖关系;根据所述数据处理流程的各个作业之间的依赖关系,从所述数据处理流程的最终作业开始,针对每一个进行调度的当前作业,判断是否存在当前作业的前提作业;在存在前提作业时,且所述前提作业未运行时,对所述前提作业进行调度;在不存在前提作业,或者所述前提作业均运行成功时,调度当前作业运行,其中,当前作业运行时依赖所述当前作业的前提作业的运行结果。本发明实施例减少了作业调度时间,提高了作业调度效率。
【专利说明】
数据处理作业调度方法及装置
技术领域
[0001] 本发明实施例涉及计算机技术领域,尤其涉及一种数据处理作业调度方法及装 置。
【背景技术】
[0002] 在进行数据处理的流程中,特别是大数据领域比较复杂的数据处理流程中,通常 是将数据处理流程划分为若干作业对数据进行处理。
[0003] 这些作业之间有的需要依赖其他作业的正确运行结果才能够运行,有的作业之间 并无这种依赖关系,可以并发运行。而整个数据处理流程的全部作业均运行成功,数据处理 流程才会认为运行成功,如果一个作业依赖的前提作业还未运行或运行失败,该作业即开 始执行,则会造成数据错误,数据处理流程也会认为运行失败,因此需要对作业进行有效的 调度。
[0004] 现有技术的一种数据处理作业调度方法中,是由技术人员根据数据处理流程中各 个作业之间的依赖关系,首先将各个作业划分多个执行阶段。根据依赖关系可知,这些执行 阶段之间存在执行顺序。在进行作业调度时,即按照执行阶段的执行顺序,分阶段的进行作 业调度,每一个阶段的作业全部运行成功之后,再调度下一个阶段中的作业执行。比如,假 设数据处理流程包括作业A、B、C、D、E,作业A为数据处理流程中的初始作业,作业E为最 终的作业,作业B和作业C分别依赖作业A的运行结果,作业D依赖作业B的运行结果,作 业E依赖作业C和作业D的执行结果。因此根据各个作业之间的依赖关系,划分的执行阶 段为:第一个执行阶段包括作业A ;由于作业C分别与作业B和作业D不存在依赖关系,可 以放在一个执行阶段并发执行,而作业B和作业D之间存在依赖关系,不能放在一个执行阶 段执行,因此第二执行阶段只包括作业B和作业C,作业D划分为第三执行阶段;第四执行 阶段即包括作业E。
[0005] 由上述描述过程可知,现有的作业调度方法,虽然可以保证作业有序执行,不会造 成数据错误,但是分阶段执行这种方式,使得作业调度效率较低,比如上述假设中,作业B 和作业D之间存在依赖关系,作业B运行成功之后,作业D即可以运行了,但是按照分阶段 执行的方式,作业C若未运行完成,作业D仍无法运行,这就会导致作业调度时间较长,降低 了作业调度效率。

【发明内容】

[0006] 本发明实施例提供一种数据处理作业调度方法及装置,用以解决现有技术中作业 调度时间过长,作业调度效率低的技术问题。
[0007] 本发明实施例提供一种数据处理作业调度方法,包括:
[0008] 获取预先配置的数据处理流程的各个作业之间的依赖关系;
[0009] 根据所述数据处理流程的各个作业之间的依赖关系,从所述数据处理流程的最终 作业开始,针对每一个进行调度的当前作业,判断是否存在当前作业的前提作业;
[0010] 在存在前提作业,且所述前提作业未运行时,对所述前提作业进行调度;
[0011] 在不存在前提作业,或者所述前提作业均运行成功时,调度所述当前作业运行。
[0012] 本发明实施例提供一种数据处理作业调度装置,包括:
[0013] 获取模块,用于获取预先配置的数据处理流程的各个作业之间的依赖关系;
[0014] 判断模块,用于根据所述数据处理流程的各个作业之间的依赖关系,从数据处理 流程的最终作业开始,针对每一个进行调度的当前作业,判断是否存在当前作业的前提作 业;
[0015] 第一调度模块,用于在存在前提作业时,且所述前提作业未运行时,对所述前提作 业进行调度;
[0016] 第二调度模块,用于在不存在前提作业时,调度所述当前作业运行;
[0017] 第三调度模块,用于在所述前提作业均运行成功时,调度所述当前作业运行。
[0018] 本发明实施例提供的数据处理作业调度方法及装置,针对每一个进行调度的当前 作业,在存在前提作业,且所述前提作业未运行时,对所述前提作业进行调度;在不存在所 述前提作业,或者所述前提作业均运行成功时,调度所述当前作业运行。因此保证了无依赖 关系的作业并发运行,有依赖关系的作业有序运行,避免了分阶段执行导致调度时间较长 的问题,当前作业在其前提作业均运行成功之后,即可以运行,无需等待,减少了作业调度 时间,从而提高了作业调度效率,且提高了资源利用率。
【附图说明】
[0019] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发 明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根 据这些附图获得其他的附图。
[0020] 图1为本发明数据处理作业调度方法一实施例的流程图;
[0021] 图2为本发明实施例提供的DAG (Directed Acyclic Graph,有向无环图)的一种 示意图;
[0022] 图3为本发明数据处理作业调度方法又一实施例的流程图;
[0023] 图4为本发明数据处理作业调度装置一实施例的结构示意图;
[0024] 图5为本发明数据处理作业调度装置又一实施例的结构示意图。
【具体实施方式】
[0025] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例 中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是 本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员 在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0026] 正如【背景技术】中所述,现有技术中分阶段的作业调度方法,为了保证作业能够有 序执行,在一个执行阶段中的作业未运行成功时,下一个执行阶段中的作业将无法调度运 行,这就会导致作业调度时间较长,降低了作业调度效率。特别是当数据处理流程中作业较 多,作业之间的依赖关系很复杂时,作业调度效率将受到很大的影响,且由于执行阶段需要 人工来划分,工作量较大,也会影响作业调度时间,且执行阶段划分的准确性也无法完全保 证。
[0027] 为了解决现有技术中存在的技术问题,发明人经过不断的研究发现,为了保证作 业调度时间,提高作业调度效率,作业有序执行的同时,就要减少作业等待执行的时间。
[0028] 发明人进一步发现,为了减少作业等待执行时间,又保证作业有序的执行,可以将 无依赖关系的作业最大化的并行运行,也即将无依赖关系的作业同时运行,将会大大提高 作业调度效率,且可以充分的利用计算资源。
[0029] 因此,发明人基于这一创造性的思维,提出了本发明的技术方案:
[0030] 在本发明实施例中,进行作业调度时,从存在依赖关系的各个作业的最终作业开 始,针对每一个进行调度的当前作业,首先对其进行判断,判断是否存在前提作业,如果存 在前提作业且前提作业未运行,则对前提作业进行调度;如果存在前提作业且前提作业均 运行成功,或者不存在前提作业,再运行当前作业。按照本发明实施例的技术方案,不存在 前提作业的作业首先运行,每一个进行调度的当前作业的前提作业优先当前作业运行,从 而保证作业的有序执行,且当前作业在其前提作业运行成功之后,即可以运行,无需等待, 且由于当前作业的前提作业至少包括一个,使得对当前作业的全部前提作业的调度可以同 时进行,保证了作业的最大化并行运行,相对于现有技术分阶段执行的调度方案,节省了调 度时间,提高了调度效率。且无需由人工划分为多个执行阶段,也节省了人工工作量,从而 进一步提高了作业调度效率。
[0031] 下面结合附图对本发明技术方案进行详细描述。
[0032] 图1为本发明实施例提供的一种数据处理作业调度方法一个实施例的流程图,该 方法可以包括以下几个步骤:
[0033] 101 :获取预先配置的数据处理流程的各个作业之间的依赖关系。
[0034] 102 :根据所述数据处理流程的各个作业之间的依赖关系,从所述数据处理流程的 最终作业开始,针对每一个进行调度的当前作业,判断是否存在当作业的前提作业。
[0035] 103 :在存在当前作业的前提作业时,且所述前提作业未运行时,对所述前提作业 进行调度。
[0036] 104 :在不存在当前作业的前提作业,或者所述前提作业均运行成功时,调度所述 当前作业运行。
[0037] 若至少一个前提作业未运行成功,则不会调度当前作业运行。
[0038] 其中,当前作业运行时依赖所述当前作业的前提作业的运行结果。
[0039] 本发明实施例中,对一个作业进行调度的过程包括对作业的前提作业判断以及作 业的运行。
[0040] -个数据处理流程中的作业之间存在依赖关系,根据作业之间的依赖关系,最终 会汇聚到一个作业,即数据处理流程中的最后一个作业,最终作业也即是指该数据处理流 程中的最后一个作业。
[0041] 前提作业是指任一个作业需要依赖其运行结果才能运行的作业。例如作业B依赖 作业A的运行结果,作业B即为作业A的前提作业。
[0042] 由作业之间的依赖关系形成的拓扑结构中,部分作业可能是不存在依赖关系的, 这些不存在依赖关系的作业是可以并发执行的。因此,本发明实施例中,从最终作业开始, 对于每一个当前作业,对其进行调度时,首先判断其是否存在当前作业的前提作业。
[0043] 在存在前提作业时,,该前提作业至少为一个,且该前提作业未运行,即会对前提 作业进行调度。此时,该前提作业又会作为当前作业,继续判断是否存在前提作业,直至当 前作业不存在前提作业时,即调度当前作业运行。或者在前提作业已运行,且前提作业均运 行成功时,即调度该当前作业运行。
[0044] 本发明实施例从最终作业开始调度,针对每一个当前作业,若存在前提作业,即可 以首先对前提作业进行调度,此时前提作业无论存在几个,均可以并发执行,前提作业均运 行成功时,再调度当前作业运行。使得保证了无依赖关系的作业可以最大化并发调度,不会 受到阶段限制,从而减少作业调度时间,充分的利用了计算资源,有依赖关系的作业能够有 序调度,可以避免作业运行数据错误。
[0045] 且对于多个作业依赖同一个前提作业时,该前提作业只需运行一次,根据前提作 业的运行状态,即前提作业是否运行成功,即可以决定是否对前提作业进行调度,从而进一 步的减少作业调度时间,在提高资源利用率的同时,避免了资源的浪费。
[0046] 另外,本发明实施例中,直接可以根据预先配置的数据处理流程的各个作业之间 的依赖关系进行调度,无需由人工划分为多个执行阶段,节省了人工工作量,从而进一步提 高了作业调度效率。
[0047] 其中,针对每一个进行调度的当前作业,判断是否存在当前作业的前提作业,是根 据作业之间的依赖关系进行判断的。为了方便获取作业之间的依赖关系,作业之间的依赖 关系可以采用DAG(Directed Acyclic Graph,有向无环图)的方式进行表示。利用DAG表 示依赖关系,使得读取和使用依赖关系更加便携。
[0048] 因此根据所述数据处理流程的各个作业之间的依赖关系,从所述数据处理流程的 最终作业开始,针对每一个当前作业,判断是否存在当前作业的前提作业可以具体是:
[0049] 按照所述DAG表示的数据处理流程的各个作业之间依赖关系,从所述数据处理流 程的最终作业开始,针对每一个当前作业,判断是否存在前提作业。
[0050] 如图2所不,不出了一种DAG不意图,表不一种作业依赖关系。
[0051] 由图2可知,作业E依赖的前提作业为作业C和作业D ;作业D依赖的前提作业为 作业B ;作业B和作业C依赖的前提作业均为作业A。
[0052] 作业E需要在作业C以及作业D都运行成功之后才能开始运行;作业D需要在作 业B运行成功之后才能开始运行;作业B和作业C需要在作业A运行成功之后才能开始运 行。
[0053] 作业A为初始作业,作业E为最终作业。
[0054] 通过本发明实施例的技术方案,从作业E开始,由于作业E存在前提作业,即作业 C以及作业D,因此会对作业C以及作业D进行调度;而由于作业C存在前提作业A,因此会 对作业A进行调度,作业A没有前提作业,因此即调度作业A运行,作业A运行成功之后,作 业C再运行;
[0055] 对于作业D存在前提作业B,因此会对作业B进行调度,作业B存在前提作业A,因 此会对前提作业A进行调度,作业A没有前提作业,在作业未运行时,即可以调度作业A运 行,作业A运行成功之后,作业B再运行,作业B运行成功之后,作业D再运行,而当由于对 作业C的调度,导致调度A已经运行时,此时即可以不再调度作业A运行,而是获取作业A 的运行状态,在其运行成功时,直接调度作业D运行。
[0056] 作业E的前提作业,作业C以及作业D运行成功之后,作业E再运行。
[0057] 由此可知,通过本发明实施例,作业C的调度路径,与作业D和作业B的调度路径 能够并发运行,从而可以减少运行时间,且可以充分利用资源,提高资源的利用率。且每一 个当前作业需要在其前提作业运行成功之后再运行,从而保证了作业的有序运行,不会有 作业先于其前提作业运行,减少了数据错误,且每一个作业可以只运行一次,进一步降低了 作业调度时间,避免了资源的浪费。
[0058] 在实际应用中,本发明实施例可以通过软件实现时,作业调度的执行程序可以如 下所述:
[0059] execute-node: if node has any dependencies far depmdmcf in dependencies excute-node dependency end end if all dependencies exeute successfidfy \ no depmAmcy .excute itself return status. Else marked status 'as aborted return status end
[0060] 其中,dependency表示前提作业。
[0061] 其中,作业的运行状态至少可以包括未运行、正在运行、运行成功、运行失败以及 放弃运行,作业的运行状态可以存储在作业运行状态表中。根据作业的运行结果,可以对作 业运行状态表进行更新。
[0062] 当当前作业存在前提作业时,可以获取前提作业的运行状态;
[0063] 如果前提作业的运行状态为未运行,则可以对该前提作业进行调度,并更新该前 提作业的运行状态为正在运行;
[0064] 如果前提作业的运行状态为运行成功,则可以调度当前作业运行;并根据运行结 果更新当前作业的运行状态为运行成功或运行失败。
[0065] 如果前提作业的运行状态为运行失败或放弃运行时,即终止对当前作业的调度, 并更新当前作业的运行状态为放弃运行,避免继续调度导致出现数据错误。
[0066] 如果前提作业的运行状态为正在运行时,则可以等待该前提作业运行结束时,根 据运行结果进行调度,若前提作业运行成功,则可以调度当前作业运行,若前提作业运行失 败,则终止对当前作业的调度,并更新当前作业的运行状态为放弃运行,避免继续调度导致 出现数据错误。
[0067] 通过对运行状态的判断和更新,进一步保证了一个作业可以只运行一次,不会重 复运行,利用作业的运行状态,即可以确定前提作业是否运行,以及是否运行成功,使得在 保证充分利用计算资源的同时,可以避免计算资源的浪费。
[0068] 下面结合图3,本发明实施例提供的又一个实施例中,对本发明技术方案进行详细 描述,该方法可以包括以下几个步骤:
[0069] 301 :获取预先配置的数据处理流程的各个作业之间的依赖关系;
[0070] 302 :根据所述数据处理流程的各个作业之间的依赖关系,从数据处理流程的最 终作业开始,针对每一个进行调度的当前作业,判断是否存在前提作业,如果是,执行步骤 303,如果否,执行步骤308。
[0071] 303 :获取所述前提作业的运行状态。
[0072] 304 :在所述前提作业的运行状态为未运行时,对所述前提作业进行调度,并更新 所述前提作业的运行状态为正在运行。
[0073] 305 :在所述前提作业的运行状态为运行成功时,调度所述当前作业运行,并根据 运行结果更新所述当前作业的运行状态为运行成功或运行失败。
[0074] 306 :在所述前提作业的运行状态为正在运行时,等待所述前提作业运行结束,返 回步骤303继续执行。
[0075] 307 :在所述前提作业的运行状态为运行失败或放弃运行时,终止对当前作业的调 度,并更新当前作业的运行状态为放弃运行。
[0076] 308 :调度所述当前作业运行,并根据运行结果更新所述当前作业的运行状态为运 行成功或运行失败。
[0077] 其中,作业的运行状态可以保存在作业状态表中,以便能够根据不同的作业的运 行状态执行不同的操作。
[0078] 通过本发明实施例,不会造成作业的重复运行,且保证了作业的有序调度,无依赖 关系的作业可以并发执行,从而降低了作业调度时间,提高了资源利用率。
[0079] 在实际应用中,本发明实施例可以通过软件实现时,作业调度的执行程序可以如 下所述:
[0080] execute-node: get node's status if node is "正在运行" wait for status changed else if node is " 未运行" change status as "未运行"
[0081] if node has any dependencies for dependency in dependencies excute-node dependency end if al! dependencies excute successfully \ no depenSmey-excute itself change status as "运行成功or "运行失败" else change status as 放异运疗 md return status
[0082] 其中,在进行作业调度时,作为又一个实施例,每一个作业在一个进程中运行,通 过进程执行,实现作业调度和运行。
[0083] 当存在当前作业的前提作业时,可以创建运行当前作业进程的子进程,由子进程 对所述前提作业进行调度,运行当前作业的进程即为其子进程的父进程。其中,每一个进程 在其所有子进程调度的作业均运行成功之后执行。
[0084] 对于任一个子进程,在其调度的作业作为当前作业,且存在前提作业时,即又作为 父进程,进一步创建子进程对其调度作业的前提作业进行调度。
[0085] 因此本发明实施例中,针对每一个当前作业,判断是否存在前提作业具体是:
[0086] 在运行当前作业的进程中判断是否存在所述当前作业依赖的前提作业。
[0087] 在存在所述当前作业依赖的前提作业时,创建运行所述当前作业进程的子进程, 由所述子进程在所述前提作业未运行时,对所述前提作业进行调度;
[0088] 在不存在所述前提作业,或者所述子进程调度的前提作业均运行成功时,由所述 当前作业的进程调度所述当前作业运行。
[0089] 当前作业的进程在其每个子进程调度的作业均运行成功之后执行,从而便能够保 证无依赖关系的作业的并发调度和有依赖关系的作业的有序调度。
[0090] 每个进程都是独立的进行运算,当不同进程需要调度同一个作业时,为了避免作 业的重复调度,可以通过作业状态表获得每一个作业的运行状态。
[0091] 每个进程在调度的作业运行状态为未运行时,可以对该作业进行调度;
[0092] 每个进程在调度的作业运行状态为正在运行时,可以等待调度该作业的其他进程 运行结束之后,再获取其调度的作业的运行状态;
[0093] 每个进程在调度的作业的运行状态为运行成功、运行失败或放弃运行时,作为子 进程,可以将其调度的作业的运行状态反馈给其父进程,使得父进程根据子进程反馈的运 行状态,确定对父进程调度的作业的进行何种操作。
[0094] 作业的运行状态可以保存在作业状态表中,因此可以将作业状态表设置为任一个 作业的运行状态只允许一个进程对其进行更新操作,即可以保证同一个作业只能被一个进 程运行,且已经运行的作业不会被再次运行。这样,使得一个作业只运行一次,不会重复运 行,可以避免计算资源的浪费,
[0095] 本发明实施例还可以采用newlisp语法配置和维护作业之间的依赖关系。 newlisp是一个用于一般用途的脚本语言,容易学习和使用。
[0096] 同时,可以采用newlisp支持的多处理器Cilk技术,使得能够充分利用多核CPU 并行运行作业,提升了硬件使用效率,可以进一步减少作业调度时间。多核CPU可以使得多 个进程并发执行,每一个进程中运行一个作业,因此多核CPU提供了作业并行运行的条件。 Cilk技术为C/C++语言增加了细粒度任务支持,使其为新的和现有的软件增加并行性来充 分发掘多处理器能力变得更加容易。
[0097] 图4为本发明实施例提供的一种数据处理作业调度装置一个实施例的流程图,该 装置可以包括:
[0098] 获取模块401,用于获取预先配置的数据处理流程的各个作业之间的依赖关系;
[0099] 判断模块402,用于根据所述数据处理流程的各个作业之间的依赖关系,从数据处 理流程的目标作业开始,针对每一个进行调度的当前作业,判断是否存在当前作业的前提 作业;
[0100] 第一调度模块403,用于在存在前提作业时,且所述前提作业未运行时,对所述前 提作业进行调度;
[0101] 第二调度模块404,用于在不存在前提作业时,调度所述当前作业运行;
[0102] 第三调度模块405,用于在存在前提作业,且所述前提作业均运行成功时,调度所 述当前作业运行。
[0103] 本发明实施例从最终作业开始调度,针对每一个进行调度的当前作业,若存在当 前作业的前提作业,即可以首先对前提作业进行调度,此时前提作业无论存在几个,均可以 并发执行,前提作业均运行成功时,再调度当前作业运行。使得保证了无依赖关系的作业可 以并发调度,从而减少作业调度时间,且可以充分的利用计算资源,有依赖关系的作业能够 有序调度,可以避免作业运行数据错误。且对于多个作业依赖同一个前提作业时,该前提作 业只需运行一次,根据前提作业的运行状态,即可以决定是否对前提作业进行调度,从而进 一步的减少作业调度时间,在提高资源利用率的同时,避免了资源的浪费。
[0104] 其中,针对每一个当前作业,判断是否存在前提作业,是根据作业之间的依赖关系 进行判断的。为了方便获取作业之间的依赖关系,作业之间的依赖关系可以采用DAG的方 式进行表示。
[0105] 因此所述获取模块可以包括:
[0106] 获取单元,用于获取预先配置的表示数据处理流程的各个作业之间的依赖关系的 DAG ;
[0107] 所述判断模块可以包括:
[0108] 判断单元,用于按照所述DAG表示的所述数据处理流程的各个作业之间的依赖关 系,从所述数据处理流程的最终作业开始,针对每一个当前作业,判断是否存在前提作业。
[0109] 其中,作业的运行状态至少可以包括未运行、正在运行、运行成功、运行失败以及 放弃运行,作业的运行状态可以存储在作业运行状态表中。根据作业的运行结果,可以对作 业运行状态表进行更新。
[0110] 作为又一个实施例,如图5所示,该第一调度模块401可以包括:
[0111] 状态获取单元501,用于在存在当前作业的前提作业时,获取所述前提作业的运行 状态;所述运行状态至少包括未运行、正在运行、运行成功、运行失败以及放弃运行;
[0112] 第一调度单元502,用于在所述前提作业的运行状态为未运行时,对所述前提作业 进行调度,并更新所述前提作业的运行状态为正在运行;
[0113] 所述第三调度模块405包括:
[0114] 第三调度单元503,用于在所述前提作业的运行状态为运行成功时,调度所述当前 作业运行,并根据运行结果更新所述当前作业的运行状态为运行成功或运行失败。
[0115] 如果前提作业的运行状态为运行失败、放弃运行或者正在运行时,作为又一个实 施例,如图5中所以,该装置还可以包括:
[0116] 第四调度模块406,用于在所述前提作业的运行状态为正在运行时,等待所述前提 作业运行结束时,触发所述状态获取单元运行;
[0117] 第五调度模块407,用于在所述前提作业的运行状态为运行失败或放弃运行时,终 止对当前作业的调度,并更新当前作业的运行状态为放弃运行。
[0118] 作业的运行状态可以保存在作业状态表中,以便能够根据不同的作业的运行状态 执行不同的操作。
[0119] 通过本发明实施例,不会造成作业的重复运行,且保证了作业的有序调度,无依赖 关系的作业可以并发执行,从而减少了作业调度时间,提高了资源利用率。
[0120] 其中,在进行作业调度时,作为又一个实施例,每一个作业在一个进程中运行,通 过进程执行,实现作业调度和运行。当存在所述当前作业依赖的前提作业时,可以创建运行 所述当前作业进程的子进程,由所述子进程对所述前提作业进行调度。
[0121] 因此,作为又一个实施例,该装置还可以包括:
[0122] 子进程创建模块,用于当存在所述当前作业的前提作业时,创建运行所述当前作 业进程的子进程,由所述子进程运行所述前提作业;
[0123] 其中,每一个进程在其每一个子进程均执行成功之后执行,从而便能够保证无依 赖关系的作业的并发调度和有依赖关系的作业的有序调度。
[0124] 则所述判断模块402具针对每一个当前作业,判断是否存在当前作业的前提作业 具体是在运行当调度作业的进程中判断是否存在所述当前作业的前提作业;
[0125] 所述第一调度模块403具体用于在存在的前提作业时,由运行所述当前作业进程 的子进程在所述前提作业未运行时,对所述前提作业进行调度;
[0126] 所述第二调度模块404具体用于在不存在所述前提作业,或者所述子进程调度的 前提作业均运行成功时,由所述当前作业的进程调度所述当前作业运行。
[0127] 另外,该装置还可以包括数据存储模块用于存储所述数据处理流程的各个作业的 运行状态,具体可以将各个作业的运行状态存储在作业状态表中;
[0128] 作业状态表中的任一个作业的运行状态只允许一个进程对其进行更新操作,从而 即可以保证同一个作业只能被一个进程运行,且已经运行的作业不会被再次运行。
[0129] 在实际应用中,本发明实施例所述的作业调度装置可以应用于任一个可以对作业 进行处理的计算节点中。
[0130] 该计算节点支持多处理器Cilk技术,使得能够充分利用多核CPU并行运行作业, 提升了硬件使用效率,可以进一步减少作业调度时间。
[0131] 以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可 以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单 元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其 中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性 的劳动的情况下,即可以理解并实施。
[0132] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可 借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上 述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该 计算机软件产品可以存储在计算机可读存储介质中,如R0M/RAM、磁碟、光盘等,包括若干指 令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施 例或者实施例的某些部分所述的方法。
[0133] 最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽 管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然 可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替 换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精 神和范围。
【主权项】
1. 一种数据处理作业调度方法,其特征在于,包括: 获取预先配置的数据处理流程的各个作业之间的依赖关系; 根据所述数据处理流程的各个作业之间的依赖关系,从所述数据处理流程的最终作业 开始,针对每一个进行调度的当前作业,判断是否存在当前作业的前提作业; 在存在前提作业,且所述前提作业未运行时,对所述前提作业进行调度; 在不存在前提作业,或者所述前提作业均运行成功时,调度当前作业运行; 其中,当前作业运行时依赖当前作业的前提作业的运行结果。2. 根据权利要求1所述的方法,其特征在于,所述在存在前提作业,且所述前提作业未 运行时,对所述前提作业进行调度包括: 在存在前提作业时,获取所述前提作业的运行状态;所述运行状态至少包括未运行、正 在运行、运行成功、运行失败以及放弃运行; 在所述前提作业的运行状态为未运行时,对所述前提作业进行调度,并更新所述前提 作业的运行状态为正在运行; 所述在所述前提作业运行成功时,调度所述当前作业运行包括: 在所述前提作业的运行状态为运行成功时,调度所述当前作业运行,并根据运行结果 更新所述当前作业的运行状态为运行成功或运行失败。3. 根据权利要求2所述的方法,其特征在于,在所述前提作业的运行状态为正在运行 时,所述方法还包括: 等待所述前提作业运行结束时,返回执行所述获取所述前提作业的运行状态的步骤; 在所述前提作业的运行状态为运行失败或放弃运行时,所述方法还包括: 终止对当前作业的调度,并更新当前作业的运行状态为放弃运行。4. 根据权利要求1~3任一项所述的方法,其特征在于,每一个作业在一个进程中运 行; 当存在所述当前作业的前提作业时,所述方法还包括: 创建运行所述当前作业的进程的子进程,由所述子进程运行所述前提作业; 其中,每一个进程在其所有子进程对应的作业均运行成功之后执行。5. 根据权利要求4所述的方法,其特征在于,所述数据处理流程的各个作业之间的依 赖关系通过有向无环图表示; 获取预先配置的数据处理流程的各个作业之间的依赖关系包括: 获取预先配置的表示数据处理流程的各个作业之间的依赖关系的有向无环图; 所述根据所述数据处理流程的各个作业之间的依赖关系,从所述数据处理流程的最终 作业开始,针对每一个当前作业,判断是否存在当前作业的前提作业包括: 按照所述有向无环图表示的所述数据处理流程的各个作业之间的依赖关系,从所述数 据处理流程的最终作业开始,针对每一个当前作业,判断是否存在当前作业的前提作业。6. -种数据处理作业调度装置,其特征在于,包括: 获取模块,用于获取预先配置的数据处理流程的各个作业之间的依赖关系; 判断模块,用于根据所述数据处理流程的各个作业之间的依赖关系,从所述数据处理 流程的最终作业开始,针对每一个进行调度的当前作业,判断是否存在当前作业的前提作 业; 第一调度模块,用于在存在前提作业时,且所述前提作业未运行时,对所述前提作业进 行调度; 第二调度模块,用于在不存在前提作业时,调度所述当前作业运行; 第三调度模块,用于在存在前提作业,且所述前提作业均运行成功时,调度所述当前作 业运行; 其中,当前作业运行时依赖所述当前作业的前提作业的运行结果。7. 根据权利要求6所述的装置,其特征在于,所述第一调度模块包括: 状态获取单元,用于在存在当前作业的前提作业时,获取所述前提作业的运行状态;所 述运行状态至少包括未运行、正在运行、运行成功、运行失败以及放弃运行; 第一调度单元,用于在所述前提作业的运行状态为未运行时,对所述前提作业进行调 度,并更新所述前提作业的运行状态为正在运行; 所述第三调度模块包括: 第三调度单元,用于在所述前提作业的运行状态为运行成功时,调度所述当前作业运 行,并根据运行结果更新所述当前作业的运行状态为运行成功或运行失败。8. 根据权利要求7所述的装置,其特征在于,还包括: 第四调度模块,用于在所述前提作业的运行状态为正在运行时,等待所述前提作业运 行结束时,触发所述状态获取单元运行; 第五调度模块,用于在所述前提作业的运行状态为运行失败或放弃运行时,终止对当 前作业的调度,并更新当前作业的运行状态为放弃运行。9. 根据权利要求6~8任一项所述的装置,其特征在于,每一个作业在一个进程中运 行; 所述装置还包括: 子进程创建模块,用于当存在所述当前作业的前提作业时,创建运行所述当前作业进 程的子进程,由所述子进程运行所述前提作业; 其中,每一个进程在其每一个子进程调度的作业均运行成功之后执行。10. 根据权利要求9所述的装置,其特征在于,所述数据处理流程的各个作业之间的依 赖关系通过有向无环图表示; 所述获取模块包括: 获取单元,用于获取预先配置的表示数据处理流程的各个作业之间的依赖关系的有向 无环图; 所述判断模块包括: 判断单元,用于按照所述有向无环图表示的所述数据处理流程的各个作业之间的依 赖关系,从所述数据处理流程的最终作业开始,针对每一个当前作业,判断是否存在前提作 业。
【文档编号】G06F9/48GK105912387SQ201510526423
【公开日】2016年8月31日
【申请日】2015年8月25日
【发明人】许鹭清, 陈抒
【申请人】乐视网信息技术(北京)股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1