
点击上方蓝字关注DolphinScheduler(海豚调度)

|作者:鲍亮
|编辑:卢凯瑞
1 名词解释
DAG,全称:Directed Acyclic Graph,中文:有向无环图
入度:有向图中某点作为图中边的终点的次数之和
出度:对于有向图来说,顶点的出边条数即为该顶点的出度
2 调度系统中的有向无环图
数据调度系统中,多个任务之间的依赖关系,用图可以表示,如下图所示,每个顶点表示一个任务,箭头方向表示任务的执行顺序。任何顶点都无法经过边回到该顶点,则该图就是无环图,即为有向无环图(DAG图)。

那么在有向图中,如果有环的存在,如图示:

在有环的情况下,任务3的执行需要任务5完成,而5的执行又需要3,4依次执行完成,这样就会造成死循环,此调度任务永远无法成功执行。所以在调度系统中,对于无环的检测就非常重要。
3 无环检测
在调度系统中,检查图是否有环,分两种场景:1. 编辑图的过程中每一步操作都需要对其做无环检测;2. 对已经存在的图进行拓扑排序,检测是否有环。
3.1 编辑时检测
对于新创建的图来说,每增加一条边,都需要检测,这条边是否导致环的存在 思路:如图1到图2, 如果要加一条5到3的边,就从3开始遍历后续顶点,如果能回到顶点5的话就证明新加的边导致环的产生;如果不能回到5,证明新添加的边不会导致有环。检测代码如下:
/**
* 判断增加边(fromVertex --> toVertex)是否合法,需要判断是否符合无环的约束
*
* @param fromVertex 起点
* @param toVertex 终点
* @param createVertex 是否创建结点
* @return
*/
private boolean isLegalAddEdge(Vertex fromVertex, Vertex toVertex, boolean isCreate) {
if&nbs

本文详细介绍了有向无环图(DAG)在数据调度系统中的关键作用,包括如何利用DAG表达任务间的依赖关系,以及在调度系统中进行无环检测的方法,如编辑时检测和拓扑排序检测,确保调度任务的正确执行。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



