Apache DolphinScheduler任务依赖配置:DAG图节点关系与条件分支实现

Apache DolphinScheduler任务依赖配置:DAG图节点关系与条件分支实现

【免费下载链接】dolphinscheduler Apache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code 【免费下载链接】dolphinscheduler 项目地址: https://gitcode.com/gh_mirrors/dolp/dolphinscheduler

在数据处理流程中,复杂的任务依赖关系常常让开发者头疼不已。你是否还在为调度系统中任务执行顺序混乱、依赖关系不清晰而烦恼?本文将详细介绍如何使用Apache DolphinScheduler(分布式易扩展的可视化DAG工作流任务调度系统)配置任务依赖关系,通过DAG图清晰展示节点关系,并实现灵活的条件分支控制。读完本文,你将能够轻松构建可靠的任务依赖关系,解决数据处理流程中的依赖难题。

DAG图与任务依赖概述

DAG(有向无环图)是DolphinScheduler的核心概念,它以图形化方式将任务按照依赖关系组织起来,使任务调度流程一目了然。DolphinScheduler的主要目标之一就是以DAG图的方式将Task按照任务的依赖关系关联起来,实现实时可视化监控任务的运行状态。

DolphinScheduler支持多种任务类型,包括Shell、MR、Spark、SQL(mysql、postgresql、hive、sparksql)、Python、Sub_Process、Procedure等,这些任务都可以作为DAG图中的节点,通过依赖关系连接起来。

DAG图的基本操作

访问DAG图编辑界面

在DolphinScheduler中,DAG图的编辑和管理主要通过definitionDetails.vue组件实现,该组件位于dolphinscheduler-ui/src/js/conf/home/pages/dag/definitionDetails.vue。在该组件中,通过引入mDag组件来渲染DAG图:

<m-dag v-if="!isLoading" :type="'definition'" :release-state="releaseState"></m-dag>

DAG图工具栏功能

DAG图工具栏提供了丰富的操作按钮,帮助用户管理和操作DAG图。工具栏组件toolbar.vue位于dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/canvas/toolbar.vue,主要功能包括:

  • 格式化DAG图:点击"Format DAG"按钮可以自动排版DAG图,使节点布局更加合理
  • 全屏显示:切换DAG图的全屏显示模式
  • 保存DAG图:保存当前DAG图的配置
  • 运行DAG图:启动当前DAG图的执行
  • 查看版本:查看DAG图的历史版本
<el-button
  icon="iconfont icon-format"
  size="mini"
  :content="$t('Format DAG')"
  @click="formatDAG"
></el-button>

节点关系配置

节点添加与连接

在DolphinScheduler中,任务节点的添加和连接是通过dag.vue组件实现的,该组件位于dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.vue。用户可以通过拖拽的方式添加任务节点,并通过鼠标点击连接节点,形成依赖关系。

节点连接后,系统会自动构建节点间的依赖关系数据。以下是构建连接关系的核心代码:

buildConnects(edges, tasks) {
  const preTaskMap = {};
  const tasksMap = {};

  edges.forEach((edge) => {
    preTaskMap[edge.targetId] = {
      sourceId: edge.sourceId,
      edgeLabel: edge.label || ''
    };
  });
  tasks.forEach((task) => {
    tasksMap[task.code] = task;
  });

  const headEdges = tasks
    .filter((task) => !preTaskMap[task.code])
    .map((task) => {
      return {
        name: '',
        preTaskCode: 0,
        preTaskVersion: 0,
        postTaskCode: task.code,
        postTaskVersion: task.version || 0,
        conditionType: 0,
        conditionParams: {}
      };
    });

  return edges
    .map((edge) => {
      return {
        name: edge.label,
        preTaskCode: edge.sourceId,
        preTaskVersion: tasksMap[edge.sourceId].version || 0,
        postTaskCode: edge.targetId,
        postTaskVersion: tasksMap[edge.targetId].version || 0,
        conditionType: 0,
        conditionParams: {}
      };
    })
    .concat(headEdges);
}

节点依赖类型

DolphinScheduler支持多种节点依赖类型,包括:

  1. 串行依赖:任务按顺序依次执行
  2. 并行依赖:多个任务并行执行
  3. 条件依赖:根据前置任务的执行结果决定后续任务是否执行

这些依赖关系可以通过DAG图直观展示,用户可以清晰地看到任务之间的依赖关系和执行顺序。

条件分支实现

条件分支概述

在实际的数据处理流程中,常常需要根据不同的条件执行不同的任务分支。DolphinScheduler提供了条件分支功能,可以根据前置任务的执行结果(成功或失败)执行不同的后续任务。

条件分支配置

条件分支的配置主要通过verifyConditions方法实现,该方法位于dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.vue

verifyConditions(value) {
  let tasks = value;
  let bool = true;
  tasks.map((v) => {
    if (
      v.taskType === 'CONDITIONS' &&
      (v.taskParams.conditionResult.successNode[0] === '' ||
        v.taskParams.conditionResult.successNode[0] === null ||
        v.taskParams.conditionResult.failedNode[0] === '' ||
        v.taskParams.conditionResult.failedNode[0] === null)
    ) {
      bool = false;
      return false;
    }
  });
  if (!bool) {
    this.$message.warning(
      `${this.$t(
        'Successful branch flow and failed branch flow are required'
      )}`
    );
    return false;
  }
  return true;
}

上述代码检查条件分支节点是否同时配置了成功分支和失败分支,如果有任何一个分支未配置,将返回警告信息。

条件分支示例

以下是一个简单的条件分支示例,展示了如何根据任务A的执行结果决定执行任务B还是任务C:

mermaid

在DolphinScheduler中,你可以通过以下步骤配置上述条件分支:

  1. 添加任务A、B、C、D
  2. 选择任务A,将其任务类型设置为"CONDITIONS"
  3. 在条件分支配置中,将成功分支设置为任务B,将失败分支设置为任务C
  4. 分别将任务B和任务C连接到任务D

实际应用场景

数据处理流程示例

假设我们有一个数据处理流程,需要完成以下任务:

  1. 从数据库中抽取数据(任务A:SQL任务)
  2. 清洗数据(任务B:Shell任务)
  3. 分析数据(任务C:Spark任务)
  4. 生成报表(任务D:Python任务)

其中,任务A是起始任务,任务B依赖于任务A,任务C依赖于任务B,任务D依赖于任务C。这个流程可以用以下DAG图表示:

mermaid

在DolphinScheduler中,你可以通过拖拽相应的任务节点,并按照上述依赖关系连接,快速构建这个数据处理流程。

错误处理机制

在实际应用中,我们需要考虑任务执行失败的情况。例如,当数据清洗任务(任务B)失败时,我们可能需要执行一个错误处理任务(任务E),发送告警通知。这时,我们可以使用条件分支功能:

mermaid

总结

通过本文的介绍,我们了解了Apache DolphinScheduler中DAG图的基本概念和操作方法,掌握了节点关系配置和条件分支实现的技巧。DolphinScheduler提供了直观的可视化界面和灵活的配置选项,使复杂的任务依赖关系变得清晰易懂。

主要知识点回顾:

  • DAG图是DolphinScheduler的核心,用于展示和管理任务依赖关系
  • 通过DAG图工具栏可以方便地进行格式化、保存、运行等操作
  • 节点关系通过拖拽和连接实现,支持串行、并行等多种依赖类型
  • 条件分支功能允许根据任务执行结果动态选择后续任务

希望本文能够帮助你更好地理解和使用DolphinScheduler的任务依赖配置功能,构建可靠、高效的数据处理流程。如果你想深入了解更多高级功能,可以参考项目的官方文档和源代码。

官方文档:README_zh_CN.md DAG实现源码:dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.vue

【免费下载链接】dolphinscheduler Apache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code 【免费下载链接】dolphinscheduler 项目地址: https://gitcode.com/gh_mirrors/dolp/dolphinscheduler

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值