CN112764907B - 一种任务处理方法、装置、电子设备和存储介质 - Google Patents

一种任务处理方法、装置、电子设备和存储介质 Download PDF

Info

Publication number
CN112764907B
CN112764907B CN202110101553.6A CN202110101553A CN112764907B CN 112764907 B CN112764907 B CN 112764907B CN 202110101553 A CN202110101553 A CN 202110101553A CN 112764907 B CN112764907 B CN 112764907B
Authority
CN
China
Prior art keywords
task
tasks
source
downstream
freezing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110101553.6A
Other languages
English (en)
Other versions
CN112764907A (zh
Inventor
余利华
郭忆
李卓豪
陈苏安
汪源
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Netease Hangzhou Network Co Ltd
Original Assignee
Netease Hangzhou Network Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Netease Hangzhou Network Co Ltd filed Critical Netease Hangzhou Network Co Ltd
Priority to CN202110101553.6A priority Critical patent/CN112764907B/zh
Publication of CN112764907A publication Critical patent/CN112764907A/zh
Application granted granted Critical
Publication of CN112764907B publication Critical patent/CN112764907B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/254Extract, transform and load [ETL] procedures, e.g. ETL data flows in data warehouses
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/483Multiproc

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Retry When Errors Occur (AREA)

Abstract

本发明实施例提供一种任务处理方法、装置、电子设备和存储介质,该方法包括:获取到至少一个初始源头任务;对所述至少一个初始源头任务中每一个初始源头任务生成对应的依赖关系信息;根据所述依赖关系信息对所述至少一个初始源头任务进行合并处理,得到至少一个最终源头任务;对所述至少一个最终源头任务及对应的全部下游任务均进行冻结处理,以停止所述至少一个最终源头任务及对应的全部下游任务的运行。本发明可以协助快速地进行数据故障恢复,极大的减少了修复数据的时间,同时还高效的保证了修复数据的正确性。

Description

一种任务处理方法、装置、电子设备和存储介质
技术领域
本公开涉及数据库技术领域,特别涉及一种任务处理方法、装置、电子设备和存储介质。
背景技术
目前,基于数据仓库技术(Extract-Transform-Load,ETL)进行数据处理,通常将一个数据处理流程分成多个任务步骤来完成。这个多个任务之间存在复杂的依赖关系,一个任务的上游任务运行成功,且到达该任务的运行时间后才可以运行该任务。
相关技术中,当出现大量数据错误时,寻找出一个或多个最上游的数据出错的任务,根据该任务及其下游已经运行的任务得到该任务对应的有向无环图(Directedacyclic graph,DAG),根据DAG从上游到下游重跑一遍,进行数据修复。
然而,上述方案在进行数据修复的过程中,到达下游未运行的任务对应的运行时间,会基于上游任务对应的数据运行该下游任务,导致新的数据错误。
发明内容
本发明实施例提供一种任务处理方法、装置、电子设备和存储介质,用以将修复数据的任务全部冻结,以解决修复数据过程中下游任务数据产出不正确和数据修复效率低的问题。
第一方面,本发明实施例提供一种任务处理方法,该方法包括:
获取到至少一个初始源头任务;
对所述至少一个初始源头任务中每一个初始源头任务生成对应的依赖关系信息;
根据所述依赖关系信息对所述至少一个初始源头任务进行合并处理,得到至少一个最终源头任务;
对所述至少一个最终源头任务及对应的全部下游任务均进行冻结处理,以停止所述至少一个最终源头任务及对应的全部下游任务的运行。
在一种可能的实施方式中,根据所述依赖关系信息对所述至少一个初始源头任务进行合并处理,包括:
根据所述依赖关系信息,确定存在上下游任务关系的多个初始源头任务;
将所述多个初始源头任务中最上游的初始源头任务,及不存在上下游任务关系的初始源头任务作为最终源头任务。
本发明实施例提供的任务处理方法,对初始源头任务进行合并处理,以避免对相同的下游任务重复进行冻结处理。
在一种可能的实施方式中,对所述至少一个最终源头任务均进行冻结处理之前,还包括:
根据所述依赖关系信息,确定所述至少一个最终源头的不同上游任务对应共同的下游任务时,将所述共同的下游任务进行合并。
本发明实施例提供的任务处理方法,将多个共同的下游任务合并处理为一个下游任务,比避免对相同的下游任务进行重复的处理。
在一种可能的实施方式中,对所述每一个初始源头任务生成对应的依赖关系信息,包括:
采用DFS/BFS算法,确定每个初始源头任务对应的DAG任务实例图;
在每个初始源头任务对应的DAG任务实例图的基础上,增加所述初始源头任务的未到达执行时间的下游任务,得到所述依赖关系信息。
本发明实施例提供任务处理方法,所生成依赖关系信息中不仅包括产生任务实例的下游任务,还包括未到达执行时间的下游任务,从而避免在后续下游任务在到达执行时间时,由于上游任务未完成修复而导致下游任务数据产出不正确。
在一种可能的实施方式中,该方法还包括:
响应于任务解冻指令,从所述至少一个最终源头任务开始,按照从上游任务至下游任务,待上游任务全部完成解除冻结处理时执行下游任务解除冻结处理的方式进行解冻,以恢复对解冻后任务的调度运行。
本发明实施例提供的任务处理方法,下游任务的执行依赖于上游任务的全部解冻,从而可以控制在上游任务完成修复时解冻,再执行下游任务,解决下游任务数据产出不正确的问题。
在一种可能的实施方式中,采用如下方式对执行解除冻结处理的待解冻任务进行解冻:
若所述待解冻任务已产生任务实例,重运行所述待解冻任务的任务实例,重运行成功后确定所述待解冻任务完成解除冻结处理;或者
若所述待解冻任务未产生任务实例,直接解除对所述待解冻任务的冻结处理。
本发明实施例提供的任务处理方法,对产生任务实例的任务在解冻时进行重运行,在出错的任务在重运行成功时再执行解冻操作,以解决下游任务数据产出不正确的问题。
在一种可能的实施方式中,重运行所述待解冻任务的任务实例后,还包括:
确定重运行失败时进行解冻失败提示;
待收到强制解冻指令时,解除所述解冻指令指示的待解冻任务的冻结处理。
本发明实施例提供的任务处理方法,支持对重运行失败的任务的修复,可以根据解冻失败提示进行修复,修复后通过强制解冻指令解冻。
在一种可能的实施方式中,该方法还包括:
将用于对任务进行冻结处理的冻结池状态标识为生成中,并将所述至少一个最终源头任务和对应的全部下游任务加入到所述冻结池;
待将所述冻结池中的全部任务冻结处理完成时,标识所述冻结池的状态为已冻结。
在一种可能的实施方式中,对所述冻结池中的任务进行解冻时,将所述冻结池的状态标识为解冻中;
待所述冻结池中的任务全部解冻时,将所述冻结池的状态标识为已解冻。
本发明实施例提供的任务处理方法,提出了在冻结过中将任务加入冻结池进行管理的方案,且可以通过冻结池的状态确定任务冻结处理进程。
在一种可能的实施方式中,该方法还包括:
响应于暂停解冻指令,确定当前执行解冻的待解冻任务;
暂停对所述待解冻任务进行解冻,并将所述冻结池的状态标识为已暂停。
本发明实施例提供的任务处理方法,提供暂停冻结功能,以满足运维过程中“停止”数据修复的需求。
在一种可能的实施方式中,该方法还包括:
响应于恢复解冻指令,确定已暂停的冻结池中,未解冻且处于最上游的至少一个待解冻任务;
从所述至少一个待解冻任务开始,按照从上游任务至下游任务,待上游任务全部完成解除冻结处理时执行下游任务解除冻结处理的方式进行解冻。
本发明实施例提供的任务处理方法,提供恢复解冻功能,以满足运维过程中“恢复”数据修复的需求。
在一种可能的实施方式中,暂停对所述待解冻任务进行解冻之后,还包括:
响应于任务删除指令,确定所述任务删除指令所指示的源头任务;
确定所指示的源头任务及对应的全部下游任务,均不依赖于除所述源头任务外其它的最终源头任务时,将所指示的最终源头任务及其对应的全部下游任务解冻并删除;
否则,保留依赖于其它的最终源头任务的任务,将所指示的源头任务及其全部下游任务中除保留的任务外的其他任务解冻并删除。
本发明实施例提供的任务处理方法,提供了对冻结池中任务进行删除的功能,实现对冻结池的更新。
在一种可能的实施方式中,暂停对所述待解冻任务进行解冻之后,还包括:
响应于任务添加指令,确定所述任务添加指令所指示的源头任务;
确定所指示的源头任务及其全部下游任务中,与所述至少一个最终源头任务及其对应全部下游任务不存在相同任务,将所指示的源头任务及其全部下游任务进行冻结处理,以停止所指示的源头任务及其全部下游任务的运行。
本发明实施例提供的任务处理方法,提出在冻结池中增加与冻结池中任务没有交集的任务增加方式,实现对冻结池的更新。
在一种可能的实施方式中,确定所指示的源头任务及其全部下游任务中,与所述至少一个最终源头任务及其对应全部下游任务存在相同任务时,还包括:
若所述至少一个最终源头任务及其对应全部下游任务中,存在与所指示的源头任务相同的任务,将所述相同任务及对应的全部下游任务进行冻结处理,以停止所述相同任务及其全部下游任务的运行;
若所述至少一个最终源头任务及其对应全部下游任务中,存在与所指示的源头任务的下游任务相同的任务,将所述相同任务及对应的全部下游任务进行冻结处理,以停止所述相同任务及其全部下游任务的运行,及将所指示的源头任务作为新的最终源头任务,将所述新的最终源头任务及对应的全部下游任务均进行冻结处理,以停止所述新的最终源头任务及对应全部下游任务的运行;
本发明实施例提供的任务处理方法,提出在冻结池中增加与冻结池中任务有交集的任务增加方式,实现对冻结池的更新。
第二方面,本发明实施例提供一种任务处理装置,该装置包括:
源头任务获取模块,获取到至少一个初始源头任务;
依赖关系生成模块,用于对所述至少一个初始源头任务中每一个初始源头任务生成对应的依赖关系信息;
源头任务合并模块,用于根据所述依赖关系信息对所述至少一个初始源头任务进行合并处理,得到至少一个最终源头任务;
冻结处理模块,用于对所述至少一个最终源头任务及对应的全部下游任务均进行冻结处理,以停止所述至少一个最终源头任务及对应的对应全部下游任务的运行。
在一种可能的实施方式中,源头任务合并模块根据所述依赖关系信息对所述至少一个初始源头任务进行合并处理,包括:
根据所述依赖关系信息,确定存在上下游任务关系的多个初始源头任务;
将所述多个初始源头任务中最上游的初始源头任务,及不存在上下游任务关系的初始源头任务作为最终源头任务。
在一种可能的实施方式中,冻结处理模块对所述至少一个最终源头任务均进行冻结处理之前,还用于:
根据所述依赖关系信息,确定所述至少一个最终源头的不同上游任务对应共同的下游任务时,将所述共同的下游任务进行合并。
在一种可能的实施方式中,依赖关系生成模块对所述每一个初始源头任务生成对应的依赖关系信息,包括:
采用DFS/BFS算法,确定每个初始源头任务对应的DAG任务实例图;
在每个初始源头任务对应的DAG任务实例图的基础上,增加所述初始源头任务的未到达执行时间的下游任务,得到所述依赖关系信息。
在一种可能的实施方式中,该装置还包括:
任务解冻模块,用于响应于任务解冻指令,从所述至少一个最终源头任务开始,按照从上游任务至下游任务,待上游任务全部完成解除冻结处理时执行下游任务解除冻结处理的方式进行解冻,以恢复对解冻后任务的调度运行。
在一种可能的实施方式中,任务解冻模块采用如下方式对执行解除冻结处理的待解冻任务进行解冻:
若所述待解冻任务已产生任务实例,重运行所述待解冻任务的任务实例,重运行成功后确定所述待解冻任务完成解除冻结处理;或者
若所述待解冻任务未产生任务实例,直接解除对所述待解冻任务的冻结处理。
在一种可能的实施方式中,任务解冻模块重运行所述待解冻任务的任务实例后,还包括:
确定重运行失败时进行解冻失败提示;
待收到强制解冻指令时,解除所述解冻指令指示的待解冻任务的冻结处理。
在一种可能的实施方式中,还包括:
冻结池处理模块,用于将用于对任务进行冻结处理的冻结池状态标识为生成中,并将所述至少一个最终源头任务和对应的全部下游任务加入到所述冻结池;待将所述冻结池中的全部任务冻结处理完成时,标识所述冻结池的状态为已冻结。
在一种可能的实施方式中,冻结池处理模块还用于:
对所述冻结池中的任务进行解冻时,将所述冻结池的状态标识为解冻中;
待所述冻结池中的任务全部解冻时,将所述冻结池的状态标识为已解冻。
在一种可能的实施方式中,还包括:
暂停解冻模块,用于响应于暂停解冻指令,确定当前执行解冻的待解冻任务;暂停对所述待解冻任务进行解冻,并将所述冻结池的状态标识为已暂停。
在一种可能的实施方式中,还包括:
解冻恢复模块,用于解冻响应于恢复解冻指令,确定已暂停的冻结池中,未解冻且处于最上游的至少一个待解冻任务;从所述至少一个待解冻任务开始,按照从上游任务至下游任务,待上游任务全部完成解除冻结处理时执行下游任务解除冻结处理的方式进行解冻。
作为一种可能的实施方式,暂停解冻模块暂停对所述待解冻任务进行解冻之后,还用于:
响应于任务删除指令,确定所述任务删除指令所指示的源头任务;
确定所指示的源头任务及对应的全部下游任务,均不依赖于除所述源头任务外其它的最终源头任务时,将所指示的最终源头任务及其对应的全部下游任务解冻并删除;
否则,保留依赖于其它的最终源头任务的任务,将所指示的源头任务及其全部下游任务中除保留的任务外的其他任务解冻并删除。
作为一种可能的实施方式,暂停解冻模块暂停对所述待解冻任务进行解冻之后,还用于:
响应于任务添加指令,确定所述任务添加指令所指示的源头任务;
确定所指示的源头任务及其全部下游任务中,与所述至少一个最终源头任务及其对应全部下游任务不存在相同任务,将所指示的源头任务及其全部下游任务进行冻结处理,以停止所指示的源头任务及其全部下游任务的运行。
作为一种可能的实施方式,暂停解冻模块确定所指示的源头任务及其全部下游任务中,与所述至少一个最终源头任务及其对应全部下游任务存在相同任务时,还用于:
若所述至少一个最终源头任务及其对应全部下游任务中,存在与所指示的源头任务相同的任务,将所述相同任务及对应的全部下游任务进行冻结处理,以停止所述相同任务及其全部下游任务的运行;
若所述至少一个最终源头任务及其对应全部下游任务中,存在与所指示的源头任务的下游任务相同的任务,将所述相同任务及对应的全部下游任务进行冻结处理,以停止所述相同任务及其全部下游任务的运行,及将所指示的源头任务作为新的最终源头任务,将所述新的最终源头任务及对应的全部下游任务均进行冻结处理,以停止所述新的最终源头任务及对应全部下游任务的运行。
第四方面,本发明实施例提供一种电子设备,包括:
一个或多个处理器,以及用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现上述第一方面提供的任一所述的任务处理方法。
第五方面,本发明实施例提供一种存储介质,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时,实现上述第一方面提供的任一所述的任务处理方法。
本发明实施例提供的任务处理方法、装置、电子设备和存储介质,具有以下有益效果:
选择多个初始源头任务进行处理,通过对初始源头任务中可能导致重复产生任务实例相关任务进行合并得到最终源头任务,并将最终源头任务及全部下游任务进行冻结处理,以解决补数据修复方案只能选择一个源头任务的问题,可以快速进行数据修复,提高了数据修复的效率;避免了对多个源头任务单独进行数据修复时重复产生任务实例的问题;可以避免修复数据过程中下游任务数据产出不正确问题。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理,并不构成对本发明的不当限定。
图1是根据一示例性实施例示出的多源头任务的DAG图;
图2是根据一示例性实施例示出的针对单个源头任务进行补数操作的DAG图;
图3是根据一示例性实施例示出的新增一个空跑的上游任务的DAG图;
图4是根据一示例性实施例示出的相应技术中生成的DAG图;
图5是根据一示例性实施例示出的上游数据未修复正确导致数据出错对应的DAG图;
图6是根据一示例性实施例示出的一种任务处理方法流程图;
图7是根据一示例性实施例示出的冻结池状态的扭转示意图;
图8是根据一示例性实施例示出的冻结池解冻操作对应的DAG图;
图9是根据一示例性实施例示出的冻结池暂停/恢复操作对应的DAG图;
图10是根据一示例性实施例示出的删除任务前冻结池的DAG图;
图11是根据一示例性实施例示出的删除任务并新增任务后冻结池对应的DAG图;
图12是根据一示例性实施例示出的任务处理装置示意图;
图13是根据一示例性实施例示出的电子设备结构示意图;
图14是根据一示例性实施例示出的程序产品示意图。
具体实施方式
下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域技术人员知道,本发明的实施方式可以实现为一种***、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
在本文中,需要理解的是,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。
以下,对本发明实施例中的部分用语进行解释说明,以便于本领域技术人员理解。
(1)数据仓库技术ETL(Extract-Transform-Load),用来描述将资料从来源端经过抽取extract、转置transform、加载load至目的端的过程。
(2)有向无环图DAG(Directed-Acyclic-Graph),在图论中,如果一个有向图从任意顶点出发都无法经过若干条边回到该点,则这个图是一个有向无环图。
(3)任务/任务实例,任务与任务实例的关系类似于代码与进程的关系。任务是任务实例的定义部分,任务实例是任务的一次真实运行。任务可以在调度***上设置对应的调度时间,当到达指定的调度时间,调度***会依据任务的内容,生成并运行对应的任务实例。
(4)任务依赖,任务与任务之间存在依赖关系,这些依赖关系最终反映在任务实例上,也即下游任务实例如果需要运行,则前提条件是上游任务实例已经运行成功了。
(5)冻结/解冻,冻结指某个任务从正常态到冻结态的动作,解冻指某个任务从冻结态到正常态的动作。
(6)正常态/冻结态,处于正常态的任务,当指定的调度时间到达后,调度***会生成对应的任务实例。某任务被冻结后,该任务就处于冻结态,调度***不会为冻结态的任务产生相对应的任务实例。
发明概述
本发明人发现,补数据功能的基本过程为:寻找出一个或多个最终上游任务,根据该任务及其下游已经运行的任务得到该任务对应的DAG,根据DAG从上游到下游重跑一遍,它的主要场景是对新上线的任务进行数据回溯,并非为数据错误故障的恢复而设计的,因此利用补数据功能进行此类故障恢复的时候,往往至少会出现以下问题。
1)源头任务众多
由于出错的最终源头任务并非有且只有一个,如果对每个最终源头任务都进行一次补数据,则会产生大量重复运行的下游任务实例,且无法保证下游任务实例的数据正确性。
如图1所示,有两个源头任务,分别为任务1-1和任务1-2,两个源头任务都拥有共同的下游任务,具体为下游的任务2-2、任务3-1、任务3-2。如果分别对任务1-1和任务1-2进行补数据操作,如图2所示,则会产生两个DAG执行图。任务2-2、任务3-1、任务3-2会分别产生两个任务实例,这无疑会造成计算资源的浪费。
同时,任务2-2需要依赖于任务1-1与任务1-2,如果仅对任务1-1与任务1-2其中一个进行补数操作后,就直接对任务2-2进行补数操作,显然无法保证任务2-2产出数据的正确性。同理,任务3-1、任务3-2产出数据的正确性也难以得到保证。
相关技术中为了解决上述问题,如图3所示,新增一个空跑的上游任务0,然后将任务1-1与任务1-2依赖此任务,并直接对任务0进行补数据操作。通过该方式,可以避免多个源头任务具备多个相同下游任务时,下游任务被多次运行的情况,同时也保证了下游任务依赖的正确性,如在原DAG中任务2-2在两个DAG中分别依赖任务1-1与任务1-2,而在新的DAG中同时依赖任务1-1与任务1-2。因此以新的DAG去修复任务2-2的数据时,任务1-1与任务1-2已经完成数据修复,保证了整体数据修复的正确性。
虽然可以通过新增任务并设置任务依赖关系来解决上述问题,但新增的任务也改变了ETL任务的DAG关系,增加了后续任务的运维成本。同时此类设置依赖的操作也较为繁琐,在源头任务数量庞大时,需要花费大量的时间设置这些源头任务依赖的最上游的空跑任务。
2)下游任务产出数据不正确
补数据功能在补数操作之前,会依靠ETL任务的DAG关系,绘制出补数据执行任务实例的DAG图。此DAG图中包含计划执行时间小于等于当前时刻的任务实例。如果任务实例的计划执行时间大于当前时刻,则不会加入到此任务实例的DAG图中。
仍以上述图1所示的DAG为例,假设在通过补数据功能修复数据时,任务2-3、任务3-2还未到指定的计划执行时间,则补数据绘制的任务实例的DAG执行图为图4中实线示出的部分。
由于数据修复本身也需要占用一定的时间,且不同的任务占用的时间不同。因此,在利用补数据功能进行数据修复时,有可能出现任务2-3、任务3-2的计划执行时间达到了,但其上游数据还未修复正确的场景。
以图5为例,实线无填充的部分代表数据修复正确的任务,实线填充部分代表数据还未修复正确的任务。可以看出任务2-3在运行时,任务1-2数据已经修复正确了,因此任务2-3运行时上游任务的数据都是正确的。当任务2-3运行结束后,任务3-2开始运行了。但此时任务2-2的数据还未修复正确,因此任务3-2任务在运行时,其上游数据仍存在部分错误,最终导致任务3-2产出的数据仍是错误的。
上述类型的错误往往很难发现,假设任务3-2的下游还有很多其他的任务,那么此错误又将导致一场数据故障。
有鉴于此,本发明实施例提供了一种任务处理方法,选择多个初始源头任务,并对多个初始源头任务中可能导致重复产生任务实例相关任务进行合并得到最终源头任务,并将最终源头及其全部下游任务进行冻结处理,以解决补数据修复方案只能选择一个源头任务或需要对多个源头任务增加空跑任务的问题,提高数据修复的效率;及解决修复数据过程中重复产生任务实例和下游任务数据产出不正确问题。
在介绍了本发明的基本原理之后,下面具体介绍本发明的各种非限制性实施方式。
示例性方法
图6是根据一示例性实施例示出的一种任务处理方法的流程图,该方法包括以下步骤:
在步骤S601中,获取到至少一个初始源头任务;
实施中,在出现数据错误时,获取一个或多个最上游的出错的任务作为初始源头任务。
在步骤S602中,对所述至少一个初始源头任务中每一个初始源头任务生成对应的依赖关系信息;
每个初始源头任务的依赖关系信息中,包括以该初始源头任务作为最终上游任务的全部下游任务及任务间的上下游依赖关系,其中全部下游任务包括到达指定的计划运行时间的任务及未到达指定的计划运行时间的任务。
在步骤S603中,根据所述依赖关系信息对所述至少一个初始源头任务进行合并处理,得到至少一个最终源头任务;
上述获取的至少一个初始源头任务,可能部分初始源头任务存在上下游依赖关系,也可能部分初始源头任务与其他任一个初始源头不存在上下游依赖。存在上下游依赖关系一种可能的方式为其中一个初始源头任务是另一个初始源头任务的下游任务。
作为一种可选的实施方式,为了避免一个任务产生多个任务实例,根据所述依赖关系信息对所述至少一个初始源头任务进行合并处理,包括:
根据所述依赖关系信息,确定存在上下游任务关系的多个初始源头任务;
将所述多个初始源头任务中最上游的初始源头任务,及不存在上下游任务关系的初始源头任务作为最终源头任务。
上述获取合并处理后的最终源头任务,可能会存在共同的下游任务。
作为一种可选的实施方式,为了避免一个任务产生多个任务实例,对所述至少一个最终源头任务均进行冻结处理之前,还包括:
根据所述依赖关系信息,确定所述至少一个最终源头的不同上游任务对应共同的下游任务时,将所述共同的下游任务进行合并。
在步骤S604中,对所述至少一个最终源头任务及对应的全部下游任务均进行冻结处理,以停止所述至少一个最终源头任务及对应的全部下游任务的运行。
本发明实施例提供的任务处理方法,同时获取多个初始源头任务,通过对初始源头任务中可能导致重复产生任务实例相关任务进行合并得到最终源头任务,将最终源头及其全部下游任务进行冻结处理,一方面避免了对多个源头任务单独进行数据修复时重复产生任务实例的问题,及解决补数据修复方案只能选择一个源头任务的问题,可以快速进行数据修复,提高了数据修复的效率;另一方面,可以避免上游任务未完成数据修复,到达指定的计划运行时间的下游任务利用错误数据运行,以解决修复数据过程中下游任务数据产出不正确问题。
作为一种可选的实施方式,本发明实施例可以利用如下方式,对所述每一个初始源头任务生成对应的依赖关系信息:
采用DFS(Depth First Search,深度优先搜索)/BFS(Breadth First Search,广度优先搜索)算法,确定每个初始源头任务对应的DAG任务实例图;
在每个初始源头任务对应的DAG任务实例图的基础上,增加所述初始源头任务的未到达执行时间的下游任务,得到所述依赖关系信息。
实施中,将获取的初始源头任务逐一通过DFS/BFS算法,计算出每个初始源头任务对应的DAG任务实例图,由于每个DAG任务实例图仅包括到达指定的计划运行时间的任务实例,不包含未到达指定的计划运行时间的任务实例。待所有初始源头任务都遍历完成后,在每个初始源头任务对应的DAG任务实例图的基础上,增加所述初始源头任务的未到达执行时间的下游任务,得到所述依赖关系信息。再将每个初始源头任务的DAG任务实例图进行合并操作和去重操作,合并操作即如果某个DAG任务实例图中的下游任务是另外一个DAG的初始源头任务,则将该DAG任务实例图的源头任务作为共同的最终源头任务;去重操作即对共同的下游任务进行合并,实现重复的依赖关系的去重。
作为一种可选的实施方式,在数据修复过程,利用上述对所述至少一个最终源头任务及对应的全部下游任务均进行冻结处理后,还可以执行解冻操作,具体采用如下方式进行解冻:
在步骤S604中,响应于任务解冻指令,从所述至少一个最终源头任务开始,按照从上游任务至下游任务,待上游任务全部完成解除冻结处理时执行下游任务解除冻结处理的方式进行解冻,任务完成解除冻结处理后,处于已解冻状态即正常态,可以被调度***调度运行。
作为一种可选的实施方式,本发明实施例利用冻结池对任务进行冻结处理,下面给出可能的实施方式。
1)冻结池的冻结功能
如图7所示,冻结池被创建时处于生成中状态,开始执行任务冻结处理时,将用于对任务进行冻结处理的冻结池状态标识为生成中,并将所述至少一个最终源头任务和对应的全部下游任务加入到所述冻结池,具体可以按照依赖关系对应的DAG顺序逐一对每个任务进行冻结操作;待将所述冻结池中的全部任务冻结处理完成时,标识所述冻结池的状态为已冻结。
任务存在正常态与冻结态,正常态为任务到达指定的计划任务运行时间开始运行的状态,冻结态为任务停止运行或到达指定的计划运行时间不会运行的状态。本发明实施例可以在数据库中存储冻结表来记录加入到冻结池的任务,任务状态的扭转是由调度***实现的,如果某个任务在某个时间点需要被冻结,则会将该任务的任务信息与对应时间点记录到此冻结表中。如表1所示,一旦记录到冻结表中,任务状态就会从正常态扭转到冻结态。
表1冻结表
通过将至少一个最终源头任务和对应的全部下游任务加入到冻结池,可以支持同时选择多个最终源头任务进行数据修复。以图1为例,可以选择任务1-1、任务1-2作为冻结池中的源头任务,则任务2-1、任务2-2、任务2-3、任务3-1、任务3-2将会作为下游任务被加入到冻结池中。
加入到冻结池中的任务均会被冻结,被冻结的任务将会处于冻结态。一旦任务处于冻结态,则该任务即使到了指定的计划执行时间,也不会产生相对应的任务实例。
对于已产生任务实例的任务在执行冻结处理时,还会判断该任务所已产生的任务实例是否还处于运行状态,如果任务实例处于运行状态则会被终止。由于上游数据已经产生错误了,本次运行即使可以运行成功,其数据也是错误的,本发明实施例将该类任务进行冻结处理,可以避免继续下游任务产出不正确的数据。
2)冻结池的解冻功能
本发明实施例为处于已冻结状态的冻结池提供了解冻操作,解冻操作会将冻结池的状态将扭转至解冻中的状态。处于此状态的冻结池根据依赖关系信息对应DAG,按照DAG顺序逐一对每个任务进行解冻操作。以图1举例,任务2-2在解冻之前,需要任务1-1、任务1-2都处于已解冻状态。
如图7所示,对所述冻结池中的任务进行解冻时,将所述冻结池的状态标识为解冻中;待所述冻结池中的任务全部解冻时,将所述冻结池的状态标识为已解冻,此时代表数据已修复正确。如果解冻过程中有其它意外情况,则冻结池的状态将从解冻中扭转到已失败状态。
解冻操作实际上是将数据库中的表1对应的冻结记录删除。一旦将任务被冻结的记录从表1中被删除,则任务状态就会从冻结态扭转到正常态,处于正常态的任务待下次调度校验时,便会生成对应的任务实例。
当调度***为某个任务生成任务实例时,首先判断任务是否在冻结表中(任务存在任务信息与调度的计划执行时间),如果存在则暂时不生成实例(延迟生成),待解冻后才生成此实例。
例如:任务2-2的计划执行时间为每日的09:00,则调度***在达到09:00的时候,会判断任务2-2在09:00时刻的任务是否在该冻结表中,azkaban***对于每个任务都可以通过project_id与flow_name进行唯一定位,每个任务实例也都可以通过project_id、flow_name与schedule_exec_time进行唯一定位。因此判断任务2-2在09:00时刻的任务实例是否被冻结,实际上就是通过project_id、flow_name与schedule_exec_time从冻结表中查找对应记录。如果查到对应记录,则说明任务2-2在09:00时刻的任务实例被冻结了,则该任务实例暂不生成,直到冻结表中对应的记录被删除,任务2-2在09:00时刻的任务实例才会生成。
作为一种可选的实施方式,采用如下方式对执行解除冻结处理的待解冻任务进行解冻:
判断该待解冻任务是否已产生任务实例,若待解冻任务已产生任务实例,重运行待解冻任务的任务实例,即对该任务进行任务实例重跑操作,重运行成功后确定待解冻任务完成解除冻结处理;若待解冻任务未产生任务实例,直接请求调度***解除对待解冻任务的冻结处理。
对于重跑失败的任务,需要进行数据修复操作,本发明实施例冻结池还提供强制解冻的操作,此功能给数据开发人员提供了人工处理的机会。
作为一种可选的实施方式,重运行所述待解冻任务的任务实例后,还包括:
确定重运行失败时进行解冻失败提示,以提示数据开发人员进行数据修复的操作;
待收到强制解冻指令时,解除该解冻指令指示的待解冻任务的冻结处理,待完成数据修复后,可以触发产生强制解冻指令,解除解冻指令指示的待解冻任务的冻结处理。
以图8为例,任务1-1、任务1-2、任务2-1、任务2-2、任务3-1为产生任务实例的任务,任务2-3、任务3-2为未产生任务实例的任务,任务1-1、任务1-2、任务2-1、任务2-2、任务3-1在解冻时,会先重跑对应的任务实例,如果重跑实例运行成功了,则会将对应任务的状态置为已解冻。任务2-3、任务3-2由于没有产生实例,则会直接置为已解冻状态,如果任务2-3、任务3-2处于已解冻状态,且任务对应的计划执行时间已达到,则会在调度***中产生对应的任务实例。
作为一种可选的实施方式,如表2所示,可以基于表1,建立冻结池中的任务表,通过任务表中的status标识任务的状态,如果执行完对任务的冻结处理,将任务的status标识为已冻结,如果对任务执行解除冻结处理,则将任务的status标识为解冻中,如果对任务执行完成解除冻结处理,则将任务的status标识为已解冻。
表2冻结池中的任务表
通常任务的status的修改可以由冻结池自身通过执行解冻操作实现,比如通过逐一对任务进行解冻最终实现状态扭转。如果任务的解冻操作失败,如任务重跑失败,需要人工干预的情况,在页面上输出失败提示,并提供入口进行任务的status的修改,限于仅能从解冻中修改为已解冻。
3)冻结池的暂停、恢复功能
相关技术中,如果修复数据的耗时较长,为了避免数据修复影响后续时间段内的数据产出,需要在后续时间段任务开始运行前,关闭补数据功能,并终止所有运行中的任务实例。但补数据功能是不支持暂停后恢复的,因此只能彻底停止。这样下一次达到修复时间段时,需要手动重跑未运行的下游任务。如果所需手动重跑的下游任务很多,则又需要将这些下游任务加入同时依赖的空跑任务,并再次按照之前的数据修复方案进行故障数据的修复过程。
本发明实施例提供了对冻结处理的任务的暂停功能,具体包括:
响应于暂停解冻指令,确定当前执行解冻的待解冻任务;
暂停对所述待解冻任务进行解冻,并将所述冻结池的状态标识为已暂停。
应用冻结池执行任务的冻结处理时,处于解冻中的冻结池还提供暂停功能,如图7所示,暂停操作会将冻结池的状态从解冻中扭转至已暂停状态。鉴于本发明上述实施例提出的冻结池中任务的status,在冻结池处于暂停状态时,可以确定冻结池的解冻进度。
本发明实施例提供了对冻结处理的任务的恢复功能,具体包括:
响应于恢复解冻指令,确定已暂停的冻结池中,未解冻且处于最上游的至少一个待解冻任务;从所述至少一个待解冻任务开始,按照从上游任务至下游任务,待上游任务全部完成解除冻结处理时执行下游任务解除冻结处理的方式进行解冻。
应用冻结池执行任务的冻结处理时,如图7所示,处于已暂停状态的冻结池可以进行恢复操作,恢复操作会将冻结池的状态从已暂停扭转到解冻中状态。具体可以根据冻结池中任务的status,确定status为已冻结的任务,并确定处于最上游的至少一个待解冻任务开始继续执行解冻操作。
本发明实施例中暂停操作被触发后,冻结池将不会继续解冻下游任务。对于解冻中的任务将会被重置为已冻结状态,如果解冻时重跑了该任务的实例,且对应的实例还在运行中,则会被终止。
以图9为例,暂停操作被触发前,任务1-1、任务1-2、任务2-1、任务2-3已经处于已解冻状态了。任务2-2处于解冻中。在暂停操作被触发后,任务2-2会被重置为已冻结,任务2-2重跑的任务实例将会被终止,任务3-1、任务3-2也不会继续解冻。
待冻结池的恢复操作被触发后,任务2-2将会被继续解冻,任务2-2的任务实例将会被重跑。待任务2-2已解冻后,任务3-1、任务3-2将会被继续解冻。当所有任务的状态均为已解冻,则冻结池的状态将会从解冻中扭转到已解冻的状态。
本发明实施例提供的冻结池的暂停和恢复操作,可以根据需要暂时中断且后续恢复时不需重新标注,提高了数据修复效率,并且可以提供数据修复的时间,例如重跑任务实例失败时,暂停对所述待解冻任务进行解冻,并将所述冻结池的状态标识为已暂停。待数据修复正确并强制将相应的任务解冻后,恢复冻结池的解冻操作。
4)冻结池的更新功能
本发明实施例提供了对冻结的任务进行更新的功能,具体可以包括删除源头任务的功能,删除源头任务时,需要将此源头任务及其下游任务全部进行解冻,并从原先的DAG中移除即可。被解冻和移除的下游任务要求不依赖其它源头任务。作为一种可选的实施方式,暂停对所述待解冻任务进行解冻之后,还包括:
响应于任务删除指令,确定所述任务删除指令所指示的源头任务;
确定所指示的源头任务及对应的全部下游任务,均不依赖于除所述源头任务外其它的最终源头任务时,将所指示的最终源头任务及其对应的全部下游任务解冻并删除;
否则,保留依赖于其它的最终源头任务的任务,将所指示的源头任务及其全部下游任务中除保留的任务外的其他任务解冻并删除。
本发明实施例提供了新增冻结任务的功能,暂停对所述待解冻任务进行解冻之后,还包括:
响应于任务添加指令,确定所述任务添加指令所指示的源头任务;
确定所指示的源头任务及其全部下游任务中,与所述至少一个最终源头任务及其对应全部下游任务不存在相同任务,则将所指示的源头任务及其全部下游任务进行冻结处理,以停止所指示的源头任务及其全部下游任务的运行。
应用冻结池对任务进行冻结处理时,确定将要加入冻结池的源头任务,如果新添加的源头任务及其下游任务与原先冻结池的DAG没有重合任务,则原先的任务不受影响,可以直接将指示的源头任务及其对应的下游任务冻结加入冻结池。
作为一种可选的实施方式,确定所指示的源头任务及其全部下游任务中,与所述至少一个最终源头任务及其对应全部下游任务存在相同任务时,可以采用如下处理方式:
若所述至少一个最终源头任务及其对应全部下游任务中,存在与所指示的源头任务相同的任务,将所述相同任务及对应的全部下游任务进行冻结处理,以停止所述相同任务及其全部下游任务的运行;
若所述至少一个最终源头任务及其对应全部下游任务中,存在与所指示的源头任务的下游任务相同的任务,将所述相同任务及对应的全部下游任务进行冻结处理,以停止所述相同任务及其全部下游任务的运行,及将所指示的源头任务作为新的最终源头任务,将所述新的最终源头任务及对应的全部下游任务均进行冻结处理,以停止所述新的最终源头任务及对应全部下游任务的运行。
应用冻结池对任务进行冻结处理时,确定将要加入冻结池的源头任务,如果新添加的源头任务及其下游任务与原先冻结池的DAG有重合任务,重合任务为指示的源头任务时,以重合的任务为起点,将起点任务及其它的所有下游将会被重新冻结,将指示的源头任务及其对应的下游任务冻结加入冻结池,并对重合的任务进行合并。重合任务为指示的源头任务的下游任务时,以重合的任务为起点,将起点任务及其它的所有下游将会被重新冻结,将所指示的源头任务作为新的最终源头任务,将指示的源头任务及其对应的下游任务冻结加入冻结池,并对重合的任务进行合并。即如果某个任务的上游是新加入的任务,则不管之前是否解冻了,它都是需要重跑的。
应用冻结池对任务进行冻结处理时,处于解冻中的冻结池还提供暂停功能,暂停操作会将冻结池的状态扭转至已暂停状态。处于已暂停状态的冻结池还可以进行更新操作,如果冻结池被更新了,待更新操作完毕后,冻结池的状态会从已暂停状态扭转到解冻中状态。
图10为示例的冻结池的DAG执行图,实线表示该任务已被解冻,虚线表示该任务处于冻结状态。响应于任务删除指令,确定删除任务1-1,确定任务1-1的下游的任务2-2、任务3-1和任务3-2依赖于另一个任务1-2,因此保留任务2-2、任务3-1和任务3-2,删除不依赖于其他源头任务的任务1-1和任务2-1,新增任务1-3及其下游的任务2-3、任务2-4和任务3-3,重合的任务为2-3,任务2-3原本已被解冻,但由于新增任务1-3是任务2-3的上游任务,则任务2-3被重新冻结,在DAG图中加入任务1-3及下游的任务2-4和任务3-3,则冻结池的DAG从图10变成了图11。
5)冻结池的状态扭转
如前所述本发明实施例应用冻结池执行任务冻结处理时,冻结池的状态根据操作的不同可以处于生成中、已冻结、解冻中、已暂停、已解冻和已失败,已暂停状态的冻结池还可以被废弃,被废弃的冻结池,会将所有任务进行解冻,随后将冻结池的状态扭转到“已废弃”。可以采用冻结池表结构维护冻结池的状态,具体如表2所示:
表2冻结池表结构
字段 类型 描述
id int 主键自增
name varchar 冻结池名称
status varchar 冻结池状态
creator varchar 创建人
create_time bigint 创建时间
mofifier varchar 修改人
modify_time bigint 修改时间
service_time bigint 修改时间
version int 冻结池版本
冻结池的状态扭转均是通过修改冻结池表结构表的status字段来实现的。Status字段拥有:生成中、已冻结、解冻中、已解冻、已失败、已废弃和已暂停状态。冻结池上述状态的扭转参见上面的描述,这里不再重述。
本发明实施例提供的上述冻结池的功能,可以协助快速地进行数据故障恢复,极大的减少了修复数据的时间,同时还高效的保证了修复数据的正确性。
示例性设备
在介绍了本发明示例性任务处理方式的实施方式之后,接下来,参考图12对本发明示例性实施方式的任务处理装置进行说明。
如图12所示,基于相同的发明构思,本发明实施例还提供了一种任务处理装置,该装置包括:
源头任务获取模块1201,获取到至少一个初始源头任务;
依赖关系生成模块1202,用于对所述至少一个初始源头任务中每一个初始源头任务生成对应的依赖关系信息;
源头任务合并模块1203,用于根据所述依赖关系信息对所述至少一个初始源头任务进行合并处理,得到至少一个最终源头任务;
冻结处理模块1204,用于对所述至少一个最终源头任务及对应的全部下游任务均进行冻结处理,以停止所述至少一个最终源头任务及对应的对应全部下游任务的运行。
在一种可能的实施方式中,源头任务合并模块1203根据所述依赖关系信息对所述至少一个初始源头任务进行合并处理,包括:
根据所述依赖关系信息,确定存在上下游任务关系的多个初始源头任务;
将所述多个初始源头任务中最上游的初始源头任务,及不存在上下游任务关系的初始源头任务作为最终源头任务。
在一种可能的实施方式中,冻结处理模块1204对所述至少一个最终源头任务均进行冻结处理之前,还用于:
根据所述依赖关系信息,确定所述至少一个最终源头的不同上游任务对应共同的下游任务时,将所述共同的下游任务进行合并。
在一种可能的实施方式中,依赖关系生成模块1202对所述每一个初始源头任务生成对应的依赖关系信息,包括:
采用DFS/BFS算法,确定每个初始源头任务对应的DAG任务实例图;
在每个初始源头任务对应的DAG任务实例图的基础上,增加所述初始源头任务的未到达执行时间的下游任务,得到所述依赖关系信息。
在一种可能的实施方式中,该装置还包括:
任务解冻模块1205,用于响应于任务解冻指令,从所述至少一个最终源头任务开始,按照从上游任务至下游任务,待上游任务全部完成解除冻结处理时执行下游任务解除冻结处理的方式进行解冻,以恢复对解冻后任务的调度运行。
在一种可能的实施方式中,任务解冻模块1205采用如下方式对执行解除冻结处理的待解冻任务进行解冻:
若所述待解冻任务已产生任务实例,重运行所述待解冻任务的任务实例,重运行成功后确定所述待解冻任务完成解除冻结处理;或者
若所述待解冻任务未产生任务实例,直接解除对所述待解冻任务的冻结处理。
在一种可能的实施方式中,任务解冻模块1205重运行所述待解冻任务的任务实例后,还包括:
确定重运行失败时进行解冻失败提示;
待收到强制解冻指令时,解除所述解冻指令指示的待解冻任务的冻结处理。
在一种可能的实施方式中,还包括:
冻结池处理模块,用于将用于对任务进行冻结处理的冻结池状态标识为生成中,并将所述至少一个最终源头任务和对应的全部下游任务加入到所述冻结池;待将所述冻结池中的全部任务冻结处理完成时,标识所述冻结池的状态为已冻结。
在一种可能的实施方式中,冻结池处理模块还用于:
对所述冻结池中的任务进行解冻时,将所述冻结池的状态标识为解冻中;
待所述冻结池中的任务全部解冻时,将所述冻结池的状态标识为已解冻。
在一种可能的实施方式中,还包括:
暂停解冻模块,用于响应于暂停解冻指令,确定当前执行解冻的待解冻任务;暂停对所述待解冻任务进行解冻,并将所述冻结池的状态标识为已暂停。
在一种可能的实施方式中,还包括:
解冻恢复模块,用于解冻响应于恢复解冻指令,确定已暂停的冻结池中,未解冻且处于最上游的至少一个待解冻任务;从所述至少一个待解冻任务开始,按照从上游任务至下游任务,待上游任务全部完成解除冻结处理时执行下游任务解除冻结处理的方式进行解冻。
作为一种可能的实施方式,暂停解冻模块暂停对所述待解冻任务进行解冻之后,还用于:
响应于任务删除指令,确定所述任务删除指令所指示的源头任务;
确定所指示的源头任务及对应的全部下游任务,均不依赖于除所述源头任务外其它的最终源头任务时,将所指示的最终源头任务及其对应的全部下游任务解冻并删除;
否则,保留依赖于其它的最终源头任务的任务,将所指示的源头任务及其全部下游任务中除保留的任务外的其他任务解冻并删除。
作为一种可能的实施方式,暂停解冻模块暂停对所述待解冻任务进行解冻之后,还用于:
响应于任务添加指令,确定所述任务添加指令所指示的源头任务;
确定所指示的源头任务及其全部下游任务中,与所述至少一个最终源头任务及其对应全部下游任务不存在相同任务,将所指示的源头任务及其全部下游任务进行冻结处理,以停止所指示的源头任务及其全部下游任务的运行。
作为一种可能的实施方式,暂停解冻模块确定所指示的源头任务及其全部下游任务中,与所述至少一个最终源头任务及其对应全部下游任务存在相同任务时,还用于:
若所述至少一个最终源头任务及其对应全部下游任务中,存在与所指示的源头任务相同的任务,将所述相同任务及对应的全部下游任务进行冻结处理,以停止所述相同任务及其全部下游任务的运行;
若所述至少一个最终源头任务及其对应全部下游任务中,存在与所指示的源头任务的下游任务相同的任务,将所述相同任务及对应的全部下游任务进行冻结处理,以停止所述相同任务及其全部下游任务的运行,及将所指示的源头任务作为新的最终源头任务,将所述新的最终源头任务及对应的全部下游任务均进行冻结处理,以停止所述新的最终源头任务及对应全部下游任务的运行。
下面参照图13来描述根据本发明的这种实施方式的电子设备130。图13显示的电子设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图13所示,电子设备130可以以通用计算设备的形式表现,例如其可以为终端设备。电子设备130的组件可以包括但不限于:上述至少一个处理器131、上述至少一个存储器132、连接不同***组件(包括存储器132和处理器131)的总线133。处理器132被配置为执行所述指令,以实现本发明上述实施例提供的任务处理方法。
总线133表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器、***总线、处理器或者使用多种总线结构中的任意总线结构的局域总线。
存储器132可以包括易失性存储器形式的可读介质,例如随机存取存储器(RAM)1321和/或高速缓存存储器1322,还可以进一步包括只读存储器(ROM)1323。
存储器132还可以包括具有一组(至少一个)程序模块1324的程序/实用工具1325,这样的程序模块1324包括但不限于:操作***、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
电子设备130也可以与一个或多个外部设备134(例如键盘、指向设备等)通信,还可与一个或者多个使得用户能与电子设备130交互的设备通信,和/或与使得电子设备130能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口135进行。并且,库存供应链管理装置130还可以通过网络适配器136与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器136通过总线133与电子设备130的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备130使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID***、磁带驱动器以及数据备份存储***等。
示例性程序产品
在一些可能的实施方式中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在终端设备上运行时,程序代码用于使终端设备执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的任务处理方法的步骤。
程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
如图14所示,描述了根据本发明的实施方式的程序产品140,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
应当注意,尽管在上文详细描述中提及了***的若干模块或子模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多模块的特征和功能可以在一个模块中具体化。反之,上文描述的一个模块的特征和功能可以进一步划分为由多个模块来具体化。
此外,尽管在附图中以特定顺序描述了本发明***各模块的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些操作,将多个操作合并为一个操作执行,和/或将一个操作分解为多个操作执行。
虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。

Claims (28)

1.一种任务处理方法,其特征在于,包括:
获取到至少一个初始源头任务;
对所述至少一个初始源头任务中每一个初始源头任务生成对应的依赖关系信息;
根据所述依赖关系信息,确定存在上下游任务关系的多个初始源头任务;
将所述多个初始源头任务中最上游的初始源头任务,及与其他任一个初始源头不存在上下游任务关系的初始源头任务作为最终源头任务,得到至少一个最终源头任务;
对所述至少一个最终源头任务及对应的全部下游任务均进行冻结处理,以停止所述至少一个最终源头任务及对应的全部下游任务的运行。
2.根据权利要求1所述的方法,其特征在于,对所述至少一个最终源头任务均进行冻结处理之前,还包括:
根据所述依赖关系信息,确定所述至少一个最终源头的不同上游任务对应共同的下游任务时,将所述共同的下游任务进行合并。
3.根据权利要求1所述的方法,其特征在于,对所述每一个初始源头任务生成对应的依赖关系信息,包括:
采用DFS/BFS算法,确定每个初始源头任务对应的DAG任务实例图;
在每个初始源头任务对应的DAG任务实例图的基础上,增加所述初始源头任务的未到达执行时间的下游任务,得到所述依赖关系信息。
4.根据权利要求1所述的方法,其特征在于,还包括:
响应于任务解冻指令,从所述至少一个最终源头任务开始,按照从上游任务至下游任务,待上游任务全部完成解除冻结处理时执行下游任务解除冻结处理的方式进行解冻,以恢复对解冻后任务的调度运行。
5.根据权利要求4所述的方法,其特征在于,采用如下方式对执行解除冻结处理的待解冻任务进行解冻:
若所述待解冻任务已产生任务实例,重运行所述待解冻任务的任务实例,重运行成功后确定所述待解冻任务完成解除冻结处理;或者
若所述待解冻任务未产生任务实例,直接解除对所述待解冻任务的冻结处理。
6.根据权利要求5所述的方法,其特征在于,重运行所述待解冻任务的任务实例后,还包括:
确定重运行失败时进行解冻失败提示;
待收到强制解冻指令时,解除所述解冻指令指示的待解冻任务的冻结处理。
7.根据权利要求1~4任一所述的方法,其特征在于,还包括:
将用于对任务进行冻结处理的冻结池状态标识为生成中,并将所述至少一个最终源头任务和对应的全部下游任务加入到所述冻结池;
待将所述冻结池中的全部任务冻结处理完成时,标识所述冻结池的状态为已冻结。
8.根据权利要求7所述的方法,其特征在于,
对所述冻结池中的任务进行解冻时,将所述冻结池的状态标识为解冻中;
待所述冻结池中的任务全部解冻时,将所述冻结池的状态标识为已解冻。
9.根据权利要求8所述的方法,其特征在于,还包括:
响应于暂停解冻指令,确定当前执行解冻的待解冻任务;
暂停对所述待解冻任务进行解冻,并将所述冻结池的状态标识为已暂停。
10.根据权利要求9所述的方法,其特征在于,还包括:
响应于恢复解冻指令,确定已暂停的冻结池中,未解冻且处于最上游的至少一个待解冻任务;
从所述至少一个待解冻任务开始,按照从上游任务至下游任务,待上游任务全部完成解除冻结处理时执行下游任务解除冻结处理的方式进行解冻。
11.根据权利要求9所述的方法,其特征在于,暂停对所述待解冻任务进行解冻之后,还包括:
响应于任务删除指令,确定所述任务删除指令所指示的源头任务;
确定所指示的源头任务及对应的全部下游任务,均不依赖于除所述源头任务外其它的最终源头任务时,将所指示的最终源头任务及其对应的全部下游任务解冻并删除;
否则,保留依赖于其它的最终源头任务的任务,将所指示的源头任务及其全部下游任务中除保留的任务外的其他任务解冻并删除。
12.根据权利要求9所述的方法,其特征在于,暂停对所述待解冻任务进行解冻之后,还包括:
响应于任务添加指令,确定所述任务添加指令所指示的源头任务;
确定所指示的源头任务及其全部下游任务中,与所述至少一个最终源头任务及其对应全部下游任务不存在相同任务,将所指示的源头任务及其全部下游任务进行冻结处理,以停止所指示的源头任务及其全部下游任务的运行。
13.根据权利要求12所述的方法,其特征在于,确定所指示的源头任务及其全部下游任务中,与所述至少一个最终源头任务及其对应全部下游任务存在相同任务时,还包括:
若所述至少一个最终源头任务及其对应全部下游任务中,存在与所指示的源头任务相同的任务,将所述相同任务及对应的全部下游任务进行冻结处理,以停止所述相同任务及其全部下游任务的运行;
若所述至少一个最终源头任务及其对应全部下游任务中,存在与所指示的源头任务的下游任务相同的任务,将所述相同任务及对应的全部下游任务进行冻结处理,以停止所述相同任务及其全部下游任务的运行,及将所指示的源头任务作为新的最终源头任务,将所述新的最终源头任务及对应的全部下游任务均进行冻结处理,以停止所述新的最终源头任务及对应全部下游任务的运行。
14.一种任务处理装置,其特征在于,该装置包括:
源头任务获取模块,获取到至少一个初始源头任务;
依赖关系生成模块,用于对所述至少一个初始源头任务中每一个初始源头任务生成对应的依赖关系信息;
源头任务合并模块,用于根据所述依赖关系信息,确定存在上下游任务关系的多个初始源头任务;将所述多个初始源头任务中最上游的初始源头任务,及与其他任一个初始源头不存在上下游任务关系的初始源头任务作为最终源头任务,得到至少一个最终源头任务;
冻结处理模块,用于对所述至少一个最终源头任务及对应的全部下游任务均进行冻结处理,以停止所述至少一个最终源头任务及对应的对应全部下游任务的运行。
15.根据权利要求14所述的装置,其特征在于,所述冻结处理模块对所述至少一个最终源头任务均进行冻结处理之前,还用于:
根据所述依赖关系信息,确定所述至少一个最终源头的不同上游任务对应共同的下游任务时,将所述共同的下游任务进行合并。
16.根据权利要求14所述的装置,其特征在于,所述依赖关系生成模块对所述每一个初始源头任务生成对应的依赖关系信息,包括:
采用DFS/BFS算法,确定每个初始源头任务对应的DAG任务实例图;
在每个初始源头任务对应的DAG任务实例图的基础上,增加所述初始源头任务的未到达执行时间的下游任务,得到所述依赖关系信息。
17.根据权利要求14所述的装置,其特征在于,还包括:
任务解冻模块,用于响应于任务解冻指令,从所述至少一个最终源头任务开始,按照从上游任务至下游任务,待上游任务全部完成解除冻结处理时执行下游任务解除冻结处理的方式进行解冻,以恢复对解冻后任务的调度运行。
18.根据权利要求17所述的装置,其特征在于,任务解冻模块采用如下方式对执行解除冻结处理的待解冻任务进行解冻:
若所述待解冻任务已产生任务实例,重运行所述待解冻任务的任务实例,重运行成功后确定所述待解冻任务完成解除冻结处理;或者
若所述待解冻任务未产生任务实例,直接解除对所述待解冻任务的冻结处理。
19.根据权利要求18所述的装置,其特征在于,任务解冻模块重运行所述待解冻任务的任务实例后,还包括:
确定重运行失败时进行解冻失败提示;
待收到强制解冻指令时,解除所述解冻指令指示的待解冻任务的冻结处理。
20.根据权利要求14~17任一所述的装置,其特征在于,还包括:
冻结池处理模块,用于将用于对任务进行冻结处理的冻结池状态标识为生成中,并将所述至少一个最终源头任务和对应的全部下游任务加入到所述冻结池;待将所述冻结池中的全部任务冻结处理完成时,标识所述冻结池的状态为已冻结。
21.根据权利要求20所述的装置,其特征在于,冻结池处理模块还用于:
对所述冻结池中的任务进行解冻时,将所述冻结池的状态标识为解冻中;
待所述冻结池中的任务全部解冻时,将所述冻结池的状态标识为已解冻。
22.根据权利要求21所述的装置,其特征在于,还包括:
暂停解冻模块,用于响应于暂停解冻指令,确定当前执行解冻的待解冻任务;暂停对所述待解冻任务进行解冻,并将所述冻结池的状态标识为已暂停。
23.根据权利要求22所述的装置,其特征在于,还包括:
解冻恢复模块,用于响应于恢复解冻指令,确定已暂停的冻结池中,未解冻且处于最上游的至少一个待解冻任务;从所述至少一个待解冻任务开始,按照从上游任务至下游任务,待上游任务全部完成解除冻结处理时执行下游任务解除冻结处理的方式进行解冻。
24.根据权利要求22所述的装置,其特征在于,暂停解冻模块暂停对所述待解冻任务进行解冻之后,还用于:
响应于任务删除指令,确定所述任务删除指令所指示的源头任务;
确定所指示的源头任务及对应的全部下游任务,均不依赖于除所述源头任务外其它的最终源头任务时,将所指示的最终源头任务及其对应的全部下游任务解冻并删除;
否则,保留依赖于其它的最终源头任务的任务,将所指示的源头任务及其全部下游任务中除保留的任务外的其他任务解冻并删除。
25.根据权利要求22所述的装置,其特征在于,暂停解冻模块暂停对所述待解冻任务进行解冻之后,还用于:
响应于任务添加指令,确定所述任务添加指令所指示的源头任务;
确定所指示的源头任务及其全部下游任务中,与所述至少一个最终源头任务及其对应全部下游任务不存在相同任务,将所指示的源头任务及其全部下游任务进行冻结处理,以停止所指示的源头任务及其全部下游任务的运行。
26.根据权利要求25所述的装置,其特征在于,暂停解冻模块确定所指示的源头任务及其全部下游任务中,与所述至少一个最终源头任务及其对应全部下游任务存在相同任务时,还用于:
若所述至少一个最终源头任务及其对应全部下游任务中,存在与所指示的源头任务相同的任务,将所述相同任务及对应的全部下游任务进行冻结处理,以停止所述相同任务及其全部下游任务的运行;
若所述至少一个最终源头任务及其对应全部下游任务中,存在与所指示的源头任务的下游任务相同的任务,将所述相同任务及对应的全部下游任务进行冻结处理,以停止所述相同任务及其全部下游任务的运行,及将所指示的源头任务作为新的最终源头任务,将所述新的最终源头任务及对应的全部下游任务均进行冻结处理,以停止所述新的最终源头任务及对应全部下游任务的运行。
27.一种电子设备,其特征在于,包括一个或多个处理器,以及用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如权利要求1~13中任一项所述的任务处理方法。
28.一种存储介质,其特征在于,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时,实现如权利要求1~13中任一项所述的任务处理方法。
CN202110101553.6A 2021-01-26 2021-01-26 一种任务处理方法、装置、电子设备和存储介质 Active CN112764907B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110101553.6A CN112764907B (zh) 2021-01-26 2021-01-26 一种任务处理方法、装置、电子设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110101553.6A CN112764907B (zh) 2021-01-26 2021-01-26 一种任务处理方法、装置、电子设备和存储介质

Publications (2)

Publication Number Publication Date
CN112764907A CN112764907A (zh) 2021-05-07
CN112764907B true CN112764907B (zh) 2024-05-10

Family

ID=75707400

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110101553.6A Active CN112764907B (zh) 2021-01-26 2021-01-26 一种任务处理方法、装置、电子设备和存储介质

Country Status (1)

Country Link
CN (1) CN112764907B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114168275B (zh) * 2021-10-28 2022-10-18 厦门国际银行股份有限公司 任务调度方法、***、终端设备及存储介质
CN117076095B (zh) * 2023-10-16 2024-02-09 华芯巨数(杭州)微电子有限公司 一种基于dag的任务调度方法、***、电子设备及存储介质

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8578389B1 (en) * 2004-05-04 2013-11-05 Oracle America, Inc. Method and system for merging directed acyclic graphs representing data flow codes
CN103761111A (zh) * 2014-02-19 2014-04-30 中国科学院软件研究所 一种基于bpel语言构建数据密集型工作流引擎的方法及其***
CN108388474A (zh) * 2018-02-06 2018-08-10 北京易沃特科技有限公司 基于dag的智能分布式计算管理***及方法
CN108984284A (zh) * 2018-06-26 2018-12-11 杭州比智科技有限公司 基于离线计算平台的dag任务调度方法及装置
CN110019144A (zh) * 2018-06-19 2019-07-16 杭州数澜科技有限公司 一种大数据平台数据运维的方法和***
CN110347708A (zh) * 2019-06-28 2019-10-18 深圳市元征科技股份有限公司 一种数据处理方法以及相关设备
CN110737542A (zh) * 2018-07-19 2020-01-31 慧与发展有限责任合伙企业 冻结和解除冻结上游卷和下游卷
CN111061551A (zh) * 2019-12-06 2020-04-24 深圳前海微众银行股份有限公司 节点的合并调度方法、装置、设备及存储介质
CN112052077A (zh) * 2019-06-06 2020-12-08 北京字节跳动网络技术有限公司 软件任务管理的方法、装置、设备、介质
CN112100019A (zh) * 2019-09-12 2020-12-18 无锡江南计算技术研究所 面向大规模***的多源故障协同分析定位方法
CN112148455A (zh) * 2020-09-29 2020-12-29 星环信息科技(上海)有限公司 一种任务处理方法、设备及介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11182207B2 (en) * 2019-06-24 2021-11-23 Nvidia Corporation Pre-fetching task descriptors of dependent tasks

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8578389B1 (en) * 2004-05-04 2013-11-05 Oracle America, Inc. Method and system for merging directed acyclic graphs representing data flow codes
CN103761111A (zh) * 2014-02-19 2014-04-30 中国科学院软件研究所 一种基于bpel语言构建数据密集型工作流引擎的方法及其***
CN108388474A (zh) * 2018-02-06 2018-08-10 北京易沃特科技有限公司 基于dag的智能分布式计算管理***及方法
CN110019144A (zh) * 2018-06-19 2019-07-16 杭州数澜科技有限公司 一种大数据平台数据运维的方法和***
CN108984284A (zh) * 2018-06-26 2018-12-11 杭州比智科技有限公司 基于离线计算平台的dag任务调度方法及装置
CN110737542A (zh) * 2018-07-19 2020-01-31 慧与发展有限责任合伙企业 冻结和解除冻结上游卷和下游卷
CN112052077A (zh) * 2019-06-06 2020-12-08 北京字节跳动网络技术有限公司 软件任务管理的方法、装置、设备、介质
CN110347708A (zh) * 2019-06-28 2019-10-18 深圳市元征科技股份有限公司 一种数据处理方法以及相关设备
CN112100019A (zh) * 2019-09-12 2020-12-18 无锡江南计算技术研究所 面向大规模***的多源故障协同分析定位方法
CN111061551A (zh) * 2019-12-06 2020-04-24 深圳前海微众银行股份有限公司 节点的合并调度方法、装置、设备及存储介质
CN112148455A (zh) * 2020-09-29 2020-12-29 星环信息科技(上海)有限公司 一种任务处理方法、设备及介质

Also Published As

Publication number Publication date
CN112764907A (zh) 2021-05-07

Similar Documents

Publication Publication Date Title
US10261869B2 (en) Transaction processing using torn write detection
CN112764907B (zh) 一种任务处理方法、装置、电子设备和存储介质
US8015430B1 (en) Using asset dependencies to identify the recovery set and optionally automate and/or optimize the recovery
US8959300B2 (en) Cascade ordering
US8495635B2 (en) Mechanism to enable and ensure failover integrity and high availability of batch processing
US20110246823A1 (en) Task-oriented node-centric checkpointing (toncc)
US9652491B2 (en) Out-of-order execution of strictly-ordered transactional workloads
CN109086425B (zh) 用于数据库的数据处理方法和装置
GB2500085A (en) Determining whether a standby database is synchronized with a primary database
US20170235641A1 (en) Runtime file system consistency checking during backup operations
CN113312114B (zh) 星载软件的在轨重构方法、装置、设备及存储介质
Chajed et al. Certifying a file system using crash hoare logic: correctness in the presence of crashes
WO2016127557A1 (zh) 重建备机数据库的方法及其装置
US9372855B1 (en) Transactional control of RDBMS database definition language operations
US20100312865A1 (en) Asynchronous update of virtualized applications
WO2020040958A1 (en) Providing consistent database recovery after database failure for distributed databases with non-durable storage leveraging background synchronization point
US9015116B2 (en) Consistent replication of transactional updates
WO2023111910A1 (en) Rolling back database transaction
JP6327028B2 (ja) オブジェクトストレージシステムおよびその制御方法およびその制御プログラム
CN108733704B (zh) 多数据库数据处理方法、装置及存储介质和电子设备
CN113672277B (zh) 代码同步方法、***、计算机设备和存储介质
Borisov et al. Warding off the dangers of data corruption with Amulet
Suárez-Otero González et al. An integrated approach for column-oriented database application evolution using conceptual models
CN116541089A (zh) 配置管理执行的实时编辑
CN117807022A (zh) 分级存储数据迁移方法及相关装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant