海豚调度监控:新增依赖缺失巡检,上游改动再也不用担心了!

news2024/11/25 16:39:50

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

祝开卷有益:)

用过 DolphinScheduler 的小伙伴应该都知道,DolphinScheduler 的依赖任务是被动检测的,下游配置了上游的依赖,下游任务启动的时候,会检测上游任务是否成功,这个过程不是很复杂,但却是比较容易出问题的。

file

本文先说明了依赖节点删除的影响(背景),最后是巡检任务的逻辑(解决方案)。

感兴趣的小伙伴也可以看看之前的历史文章:

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

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

背景:

使用调度的团队越来越多,任务也越来越多,互相依赖的任务也变多了,任务会随着数仓的迭代,进行下线、删除等操作。

如图,工作流① 里面有任务 A,工作流② 里面有任务 dep_A 和 B

file

打开依赖节点dep_A,可以看到上游任务是 A,可以正常限时任务名字。

file

我把任务 A 删掉,如图1-3,打开依赖节点dep_A,就只能看到一个code,不能显示名称了。(其实就是找不到上游任务了)。

file

工作流② 后面在运行的时候,依赖节点dep_A,在运行的时候就会一直卡在那里,找不上游任务,因为已经被删了或者被禁用了。

为什么呢?因为依赖(DEPENDE)节点里面配置的是上游任务的projectCodedefinitionCodedepTaskCode。只要上游任务被禁用、删除、或者复制了一个新的出来,depTaskCode 就会变或者找不到。

依赖节点找不到上游任务是谁,就没办法判断运行状态了,就会一直卡在那里。

解决方案:

回到生产环境,使用调度的团队越来越多,任务也越来越多,互相依赖的任务也变多了,任务会随着数仓的迭代,进行下线、删除等操作。这种依赖缺失的现象就越来越多了,这是用户操作不当导致的重大生产事故,必须要防止这种情况。

解决方案就是新增一个依赖巡检。一段 SQL + 一个告警脚本搞定!

file 第一步是先清理调度任务的血缘关系到一张 mysql 表。
第二步是检测依赖缺失,报警到钉钉群。

先看下 SQL主要逻辑逻辑,清洗调度任务的关系,包括依赖节点,依赖节点是一个json结构的数据,把它解析出来,最后看关联不上的任务,就是缺失依赖的任务,然后告警出来。
file

①清洗逻辑如下:

脚本放在 GitHub上了,dep_mysql.sql[1]
清洗之后,产出了 4 张表
1.t_ds_dag_task_relation_base_data 关系基础数据表

2.t_ds_task_node_base_data 任务基础表,后续会用于 Nebula Graph,这个后面会讲。

3.t_ds_dag_task_relation_dep_data_df 依赖节点关系表,用于后续依赖告警的的主表

4.t_ds_dag_task_relation_data_df 关系最终表,后续会用于 Nebula Graph,这个后面会讲。

②写一个 Python 脚本运行上述 SQL

脚本放在 GitHub上了,run_dep_mysql.py[2]
主要是运行第一步的 SQL。

③告警脚本:

脚本放在 GitHub上了,check_dolphin_deps_lost.py[3]
主要是拿 t_ds_dag_task_relation_dep_data_df 这个表的上游工作流code、上游任务code 关联 t_ds_task_node_base_data 任务信息表,关联不上的就是被删除了或者修改了,要告警出来,提醒用户。

④告警结果展示!

file 新增了这个依赖巡检之后,用户操作导致的依赖缺失问题被解决了,用户改动任务再也不用担心了!就算操作失误,巡检也会告警出来,提醒用户及时修复掉。

这个 SQL 放在 Mysql 执行速度很快,对主库没什么压力,可以把数据实时同步到 Doris ,再做巡检,也是可以的。

以上就是依赖缺失巡检的全部内容,如果有任何疑问,都可以与我交流,希望可以帮到你,下次见。

参考资料

[1]

dep_mysql.sql:https://github.com/aikuyun/dolphin\_practices/blob/main/dep\_mysql.sql

[2]

run_dep_mysql.py:https://github.com/aikuyun/dolphin\_practices/blob/main/run\_dep_mysql.py

[3]

check_dolphin_deps_lost.py:https://github.com/aikuyun/dolphin\_practices/blob/main/check\_dolphin\_deps\_lost.py

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

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

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

相关文章

Echarts中的折线图,多个Y轴集中在左侧(在Vue中使用多个Y轴的折线图)

简述:在 ECharts 中,创建一个带有多个 Y 轴的折线图,并且将这些 Y 轴都集中显示在图表的左侧,可以通过合理配置 yAxis 和 series 的属性来实现。简单记录 一. 函数代码 drawCarNumEcs() {// 初始化echarts图表,并绑定到id为"…

Vue组件如何“传话”?这里有个小秘诀!

​🌈个人主页:前端青山 🔥系列专栏:vue篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue-组件通信 目录 Vue组件通信 (1) props / $emit 1. 父组件向子组件传…

【HDC.2024】探索无限可能:华为云区块链+X,创新融合新篇章

6月23日,华为开发者大会2024(HDC 2024)期间, “「区块链X」多元行业场景下的创新应用”分论坛在东莞松山湖举行,区块链技术再次成为焦点。本次论坛以"区块链X"为主题,集结了行业专家、技术领袖、…

使用Scrapy进行网络爬取时的缓存策略与User-Agent管理

缓存策略的重要性 缓存策略在网络爬虫中扮演着至关重要的角色。合理利用缓存可以显著减少对目标网站的请求次数,降低服务器负担,同时提高数据抓取的效率。Scrapy提供了多种缓存机制,包括HTTP缓存和Scrapy内置的缓存系统。 HTTP缓存 HTTP缓…

【规范】Git分支管理,看看我司是咋整的

前言 🍊缘由 Git分支管理好,走到哪里都是宝 🏀事情起因: 最近翻看博客中小伙伴评论时,发现文章【规范】看看人家Git提交描述,那叫一个规矩一条回复: 本狗亲测在我司中使用规范的好处&#xf…

vue实现左右拖动分屏

效果图如下&#xff1a; 封装组件 <template><div ref"container" class"container"><div class"left-content" :style"leftStyle">/**定义左侧插槽**/<slot name"left"></slot></div>…

接口测试工具Postman

Postman Postman介绍 开发API后&#xff0c;用于API测试的工具。在我们平时开发中&#xff0c;特别是需要与接口打交道时&#xff0c;无论是写接口还是用接口&#xff0c;拿到接口后肯定都得提前测试一下。在开发APP接口的过程中&#xff0c;一般接口写完之后&#xff0c;后端…

SPL-404:如何彻底改变Solana上的NFT与DeFi

在不断发展的数字资产领域中&#xff0c;非同质化Token&#xff08;NFT&#xff09;已成为一股革命性力量&#xff0c;彻底改变了我们对数字所有权的看法和互动方式。从艺术和收藏品到游戏和虚拟房地产&#xff0c;NFT吸引了创作者、投资者和爱好者的想象力。 本指南将带您进入…

【C++】解决 C++ 语言报错:Dangling Pointer

文章目录 引言 悬挂指针&#xff08;Dangling Pointer&#xff09;是 C 编程中常见且危险的错误之一。当程序试图访问指向已释放内存的指针时&#xff0c;就会发生悬挂指针错误。这种错误不仅会导致程序崩溃&#xff0c;还可能引发不可预测的行为和安全漏洞。本文将深入探讨悬…

既美观又方便的后台框架谁需要?进来就对了。

一套既美观又方便的后台框架可以大大幅节约开发时间和成本。 我们来一起看看几个明朗大气的管理控制台页面。 本文档会持续更新 模板编号&#xff1a;翠花_001模板编号&#xff1a;翠花_002模板编号&#xff1a;翠花_003

第3章.中央服务器的物联网模式--AI/ML集成

第3章.中央服务器的物联网模式 本章列出了由于存储和/或计算需求而部署在中央服务器上以及部署在边缘&#xff08;本地&#xff09;或云上的体系结构模式。 这些模式基于现场设备生成的数据提供见解&#xff0c;使用附加数据&#xff08;来自附加系统&#xff0c;如企业系统&am…

嵌入式Linux系统编程 — 6.4 信号集

目录​​​​​​​ 1 信号集概念 2 sigemptyset、sigfillset初始化信号集 3 sigaddset、sigdelset向信号集中添加/删除信号 4 sigismember函数测试信号是否在信号集中 1 信号集概念 在Linux系统中&#xff0c;信号集&#xff08;signal set&#xff09;用于表示一组信号…

优思学院|听说你想了解箱型图?教程在这里!

箱形图是什么&#xff1f; 箱形图&#xff08;也称为箱线图&#xff09;使用箱体和线条来表示一个或多个组的数值数据分布。箱体的边界表示数据中间50%的范围&#xff0c;中央线标示中位数值。线从每个箱体延伸出来&#xff0c;捕捉其余数据的范围&#xff0c;在线条之外的点表…

cadence symbol修改之一

cdaence virtuoso 复制cell&#xff0c;或者拷贝symbol之后&#xff0c;再次调用的时候&#xff0c;symbol还是跟随原来的cell名字 解决办法 打开对应的symbol 修改partName为 cellName

打造您的第一个私有智能助手

当前的大语言模型通常是基于公开的知识进行训练的&#xff0c;而我们的组织和个人用户希望能够获得有关自身私有知识的回答。为了满足这一需求&#xff0c;业界通常采用检索增强生成&#xff08;RAG&#xff09;或微调模型的方法。然而&#xff0c;这些技术对非专业人员来说门槛…

混元大模型加持,微信输入法开启AI问答新体验

在人工智能技术飞速发展的今天&#xff0c;微信作为全球最大的社交平台之一&#xff0c;一直在不断地探索和创新&#xff0c;以提供更智能、更便捷的用户体验。 最近&#xff0c;微信官方宣布了一个令人兴奋的消息&#xff1a;微信输入法正式上线了“一键AI问答”功能&#xf…

mac外接显示屏,切换程序坞和启动台在哪个屏幕显示,最实用教程

程序坞和启动项是同步的 首先&#xff0c;程序坞和展开启动项是同步出现在同一个屏幕的&#xff0c;所以只需要把程序坞“呼唤”到指定的显示器就行。 无需设置&#xff0c;动对了鼠标就行 无所谓哪个是主屏&#xff0c;设置中都没有切换程序坞位置的选项&#xff0c; 想要…

不知几DAY的Symfony---RCE复现

感谢红队大佬老流氓的供稿&#xff0c;此篇文章是针对Symfony框架的一个RCE漏洞复现 ​框架简介 Symfony是一个开源的PHP Web框架&#xff0c;它现在是许多知名 CMS 的核心组件&#xff0c;例如Drupal、Joomla!、eZPlatform&#xff08;以前称为 eZPublish&#xff09;或Bolt。…

植物大战僵尸融合版1.0下载(全部植物合体)

如果你是《植物大战僵尸》系列的忠实粉丝&#xff0c;那么有一个好消息&#xff1a;一款全新的改版游戏——《植物大战僵尸融合版》已经上线。这不仅仅是一次简单的更新&#xff0c;而是一次彻底的玩法革新。B站UP主蓝飘飘fly精心打造的这个版本&#xff0c;为玩家带来了前所未…

Java-数据结构

数据结构概述 常见的数据结构 栈 队列 数组 链表 二叉树 二叉查找树 平衡二叉树 红黑树 示例&#xff1a;