海豚调度调优 | 如何解决任务被禁用出现的Bug

news2024/11/15 1:38:24

💡  本系列文章是 DolphinScheduler 由浅入深的教程,涵盖搭建、二开迭代、核心原理解读、运维和管理等一系列内容。适用于想对 DolphinScheduler了解或想要加深理解的读者。

祝开卷有益。 

本系列教程基于 DolphinScheduler 2.0.5 做的优化。(稳定版推荐使用3.1.9

上篇回顾:海豚调度调优 | 正在运行的工作流(DAG)如何重新拉起失败的任务(Task)

最近调度稳定运行一段时间了,有时间分享一下我们在使用海豚调度过程中遇到的问题和使用经验,希望可以帮到大家。

file

今天分享的是任务被禁用出现的 Bug,包含两相关联的问题。

已有的功能:在一个 DAG(工作流)中,存在节点被禁用的情况,表示该节点不会执行,执行到这个节点的时候,可以跳过这个节点继续执行下游节点。

问题1[1]:在 Version 2.0.1 中,存在一个 BUG,如下图所示,有 6 个节点,其中 test1_stop 和 test2_stop 节点是被禁用的。

file

从上图可以看出,test3 依赖 test1_stop 和 test2_stop。但是执行的时候,发现 test2 节点还在运行呢,test3 就已经执行了,并没有等待所有上游节点运行结束

上述问题如何解决呢?

新增一个递归向上查找间接依赖的方法(如果是上游节点被禁用了,继续向上查找)

新增 setIndirectDepList 方法,如果该节点的上游被禁用了,则继续寻找上游。最终把所有的上游加到 indirectDepCodeList 这里。

/**
 * This function is specially used to handle the dependency situation where the parent node is a prohibited node.
 * When the parent node is a forbidden node, the dependency relationship should continue to be traced
 *
 * @param taskCode            taskCode
 * @param indirectDepCodeList All indirectly dependent nodes
 */
private void setIndirectDepList(String taskCode, List<String> indirectDepCodeList) {
    TaskNode taskNode = dag.getNode(taskCode);
    List<String> depCodeList = taskNode.getDepList();
    for (String depsNode : depCodeList) {
        if (forbiddenTaskMap.containsKey(depsNode)) {
            setIndirectDepList(depsNode, indirectDepCodeList);
        } else {
            indirectDepCodeList.add(depsNode);
        }
    }
}

在 isTaskDepsComplete 方法中,引用这个 list ,遍历。

file

好的,问题1[1]到这里就结束了,修复之后,test3 的直接上游节点 test2_stop 被禁用时,会继续往上找到 test2, 如果 test2 还在运行,test3 不会立刻运行。

*负杂的系统,随着不断迭代,总会伴随着小"惊喜"。继续往下看 *

上述新增的逻辑,带来了问题2[2],请看下图:运行test_del_node 节点,选择向后执行,按照正常的逻辑,会运行 test_del_node 和 test_del_node_36j 这两个节点。但是 test_del_node_36j 一直不执行。

file

查看 Master 日志发现,在提交 test_del_node_36j 这个节点的时候,出现了submit standby task error这个错误,拿到本地 debug 之后,发现在 setIndirectDepList 中出现了 NPE。最后定位到下面两行代码:

TaskNode taskNode = dag.getNode(taskCode);
List<String> depCodeList = taskNode.getDepList();

通过分析,最后发现是因为test_del_node_36j的节点的直接上游节点被禁用了,按照 setIndirectDepList 里面的逻辑,存在被禁用的节点,是会继续往上找的,找到间接依赖。

dag 在工作流启动的时候,根据 startNode 生成了关系图(dag),dag 里面只有两个节点: test_del_node 和 test_del_node_36j 。此时递归查找test_del_node_36j上游节点的上游节点的时候,报了 NEP。

处理方式也比较简单,加一个 null 的判断。

file

这样,问题2[2]就解决了。

总结

  • 问题1 在 2.0.3-release 中得到修复。 

  • 问题2 在 3.0.5-release 中得到修复。

如果不想升级的小伙伴,可以自行根据自己的版本,进行修改。

需要注意的是:

  • 2.x 版本,对应的代码文件是 WorkflowExecuteThread.java 

  • 3.x 版本,对应的代码文件是 WorkflowExecuteRunnable.java

以上就是任务被禁用出现的Bug关联的两个问题的分享,如果有任何疑问,都可以与我交流,同样社区也推荐大家使用3.1.9版本,这是相对比较稳定的版本,上文中,还提到了 dag 的生成,下次接着讲,希望可以帮到你。

本文由 白鲸开源科技 提供发布支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1868862.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

将某列缺失分隔符的文字读入 Excel

有个逗号分隔的 txt&#xff0c;共 10 列&#xff0c;第 3 列有时候缺少分隔符&#xff0c;导致该列缺失&#xff0c;数据不齐只剩 9 列。比如最后两行&#xff1a; 01-0104-0133,MAYO, RONIE #2,202403,2024-03-21 22:51:43.000,1449.49,0.00,0.00,08,6CC6BDAC7E45 17-1782-02…

MyBatis-在分步查询的基础上配置懒加载

Hibernate中&#xff0c;涉及到关联查询的时候&#xff0c;懒加载是默认就开启着的&#xff0c;前面讲过设计懒加载就是&#xff0c;在关联查询中&#xff0c;真正需要用到关联的对象的时候&#xff0c;才发起sql语句&#xff0c;从数据库中查询数据&#xff0c;从而实现提升数…

Django安装与启动

1、Django是什么&#xff1f; 基于python的Web开发框架&#xff0c;支持用户快速开发安全、可维护的网站 2、怎么安装&#xff1f; pip install Django4.2 3、如何启动&#xff1f; 不写ip和端口时候&#xff0c;默认启动http://127.0.0.1:8000/ python .\manage.py runse…

uniapp开发H5、手机APP、微信小程序 可拖动菜单按钮

ml-fab 插件地址&#xff1a;https://ext.dcloud.net.cn/plugin?id18909 1、可拖拽悬浮按钮 ml-fab&#xff0c;支持自定义插槽&#xff0c;点击可展开一个图标按钮菜单&#xff0c;可随意拖拽。 2、支持自定义插槽&#xff0c;可实现自定义配置。 3、操作简单易上手。 ml-f…

197.回溯算法:复原IP地址(力扣)

代码解决 class Solution { public:// 存储最终结果的向量vector<string> result;// 判断字符串s从start到end范围内的子串是否是一个合法的IP地址段bool isValid(const string& s, int start, int end){if (start > end) {return false; // 起始位置大于结束位置…

设计师必备的交互原型图软件

如果你是UI/UX设计师&#xff0c;你肯定会在工作中涉及到交互原型图的设计。在设计交互原型图时&#xff0c;我们通常需要找到一些适合自己的交互原型图设计软件来制作高质量的交互原型图。那么我们应该如何选择合适的交互原型图设计软件呢&#xff1f;来自10年的高级交互设计师…

定制化、精细化、场景化AI训练数据趋于基础数据服务市场主流

算法、算力和数据共同构成了AI产业链技术发展的三大核心要素。在人工智能行业发展进程中&#xff0c;有监督的深度学习算法是推动人工智能技术取得突破性发展的关键技术理论&#xff0c;而大量训练数据的支撑则是有监督的深度学习算法实现的基础。算法模型从技术理论到应用实践…

stencil 组件

stencil 组件 装饰器生命周期应用加载事件 组件定义组件如何响应数据变化 组件使用如何传递 slot如何暴露组件内部的方法供外部使用&#xff1f;Element 装饰器 Host 组件样式函数组件 stencil 提供一些装饰器、生命周期钩子和渲染函数去编写一个组件。 装饰器 装饰器是一组用…

第 3 章使用图像和标签

现在您已经对 SwiftUI 有了基本的了解,并了解了如何显示文本内容,现在是时候学习如何在应用中显示图像了。在本章中,我们将探讨Label最常见的用户界面组件之一的用法,以及Image用于在屏幕上渲染图像的视图。与上一章中所做的类似,我将通过构建一个简单的演示向您展示如何使…

Navicat 外网连接 mysql (1、通过SSH方式内网访问 2、对外开放3306端口)

1、通过SSH方式内网访问 直接常规方式使用IP、账号密码连接&#xff0c;失败 SSH方式&#xff1a; 常规 选项卡中&#xff1a;localhost录入数据库账号密码 SSH 选项卡中&#xff1a;勾选使用SSH&#xff0c;输入服务器IP、账号、密码 如果出现该错误&#xff0c;可能是服务器…

会计报表分析

目录 一. 会计报表的种类 \quad 一. 会计报表的种类 \quad 反应财务状况的是资产负债表 反应经营成果的是利润表 有时间点的就是静态表 动态表就是有一个区间的, 比如一年, 一个季度等

PLC网关如何选择?plc网关作用-天拓四方

一、PLC网关在工业自动化领域的重要性和作用 PLC网关在工业自动化领域的重要性和作用不言而喻。作为工业自动化系统的重要组成部分&#xff0c;PLC网关起到了关键的桥梁作用&#xff0c;实现了PLC与其他设备、系统之间的数据传输和通信。 首先&#xff0c;PLC网关的重要性体现…

5G赋能安防视频监控:EasyCVR视频汇聚融合创新技术,共筑多场景安全防线

随着科技的快速发展&#xff0c;第五代移动通信技术&#xff08;5G&#xff09;已逐渐成为我们生活中的重要组成部分。其中&#xff0c;5G技术以其超高速、低延迟、大连接数的特点&#xff0c;正在深刻改变着我们的生活方式和社会运行模式。安防监控领域作为社会安全的重要组成…

如何实现智慧农田的精准灌溉

如何实现智慧农田的精准灌溉 智慧农田的精准灌溉是现代农业技术发展的重要组成部分&#xff0c;它集成了物联网、大数据分析、人工智能以及现代水利技术&#xff0c;旨在通过实时监测土壤湿度、气象条件及作物生长状况&#xff0c;实现水资源的高效利用和作物产量、品质的双重…

智慧海洋灾害监测预警系统解决方案

一、概述 近年来&#xff0c;我国海洋经济持续增长&#xff0c;为我国综合国力带来了新机遇。但是&#xff0c;每年由于海洋灾害带来的损失也不可忽略&#xff0c;这些灾害包括&#xff1a;风暴潮、海浪、海冰、海啸动力环境灾害、赤潮、绿潮等等。针对目前海洋监管力量薄弱&am…

Ubuntu20.04离线安装Docker

链接&#xff1a;https://pan.baidu.com/s/10OLClTHSIJY-_nbldcoFFQ 提取码&#xff1a;x4nt --来自百度网盘超级会员V4的分享 1.下载3个docker离线安装包&#xff0c;下载网址&#xff1a; https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/ 2.把…

怎么隐藏宝塔面板左上角绑定的手机号码?

宝塔面板后台的左上角会显示我们绑定的宝塔账号&#xff08;手机号码&#xff09;&#xff0c;每次截图的时候都要去抹掉这个号码&#xff0c;那么能不能直接将这个手机号码隐藏掉呢&#xff1f; 如上图红色箭头所示的手机号码&#xff0c;其实就是我们绑定的宝塔账号&#xff…

Android Studio无法正确引入包内存在的类

Android Studio 无法识别同一个 package 里的类&#xff0c;显示为红色&#xff0c;但是 compile 没有问题。 重启&#xff0c;rebuild,clean都没有用。 多半是因为 Android Studio 之前发生了错误&#xff0c;某些 setting 出了问题。 解决方法如下&#xff1a; 点击菜单中的…

生命在于折腾——Macbook虚拟机开启360核晶

首先启动PD虚拟机&#xff0c;打开360&#xff0c;发现提示如下&#xff1a; 此时将虚拟机关机。 打开该虚拟机设置&#xff1a; 将虚拟机监控程序改为Parallels&#xff0c;并启动nested虚拟化。 改好后截图如下&#xff1a; 保存设置&#xff0c;开机 此时就可以开启了…

执行yum命令报错Could not resolve host: mirrors.cloud.aliyuncs.com; Unknown error

执行yum命令报错 [Errno 14] curl#6 - "Could not resolve host: mirrors.cloud.aliyuncs.com; Unknown error 修改图中所示两个文件&#xff1a; vim epel.repo vim CentOS-Base.repo 将所有的http://mirrors.cloud.aliyuncs.com 修改为http://mirrors.aliyun.com。 修改…