DolphinScheduler——工作流实例的生命周期
目录
一、DolphinScheduler架构原理
1.1 系统架构图
1.2 DolphinScheduler核心概念
1.2 创建工作流
1.2.1 如何触发一个工作流实例
1.2.2 任务调度链路监控
1.2.3 Workflow-DAG解析
DAG解析
Dispatch分发流程
Master和Worker的交互过程
1.3 任务运行状态
该篇文章主要介绍DolphinScheduler-3.2.0工作流实例的工作周期
一、DolphinScheduler架构原理
1.1 系统架构图
在介绍之前,先对架构进行简单介绍。

内部服务主要分为四个部分:
(1)API服务,用于与UI交互;
(2)用于告警通知的Alert服务;
(3)主节点(master)和工作节点(worker)是去中心化的,可以部署多个Master和多个Worker,它们可以分布在不同的位置并独立工作。
(4)工作流运行在Master节点上,具体的任务节点在 Worker 节点上运行,例如 shell、Python、Flink 和 Spark 等任务节点。
1.2 DolphinScheduler核心概念
为更好的了解DolphinScheduler ,先介绍其核心概念:
- Process(工作流):由任务以有向无环图形式构成,执行时解析一个工作流为多个任务,可设置工作流优先级,工作执行全局参数、超时告警;
- Task(任务):调度执行的最小单元,包含Shell、Spark、Flink、Sql、MR等多种类型。可设置任务执行优先级、任务执行参数、超时告警、超时失败;
- Command(待调度指令):工作流经手动调度或定时调度生成的数据,存储在数据库DB中;
- Instance(任务实例):任务执行后,会生成相应的实例,记录执行时任务的状态及执行内容,任务实例可查看下载日志;
- Master(调度服务):提供对工作流手动调度、定时调度、超时告警、任务容错、任务执行监控等功能;
- Worker(运行服务):解析工作流,识别任务类型,调用对应任务类型的逻辑,生成任务实例;
- Alert(告警服务):可通过Email、FTP、微信等多种方式,告知工作流、任务执行结果。
下面具体展示调度任务的创建、被调度执行的过程:
- 根据具体的业务需求,通过Web界面以DAG形式创建工作流,生成Process并落库;
- 手动调度或定时调度生成待调度指令Command,存储在数据库DB中;
- Master监听读取Command记录,解析后动态分配至Worker,选择对应的任务类型执行;
- Worker执行完成后,生成Process Instance(工作流实例)、Task Instance(任务实例)并落库;
- Alert告警模块监听Instance实例,通过Email等发送任务执行结果。
1.2 创建工作流
1.2.1 如何触发一个工作流实例
接下来,让我们看看如何创建工作流实例。

简单来说,我们可以通过页面、客户端或命令行等方式触发工作流实例的启动。不管是通过页面运行、使用客户端提交还是运行数,系统都会创建一条待调度指令Command,并先存储在数据库中,然后Master进行异步轮询处理,每个 Master 会根据自己的下标来获取需要自己处理的 Command,并将Command转化为工作流实例。
1.2.2 任务调度链路监控
为了保障调度任务的稳定性,有必要对任务调度的生命周期进行监控。DolphinScheduler服务调度任务的全流程是先从quartz中产生Command,然后将Command转化为工作流实例,再从工作流实例生成一系列对应的任务实例,需要对该任务链路的生命周期进行监控。

(1)例如:通过监控quartz元数据,发现漏调度和重复调度问题。
(2)例如:监控command表积压情况,从而监控master是否服务正常,以及master服务的性能是否能够满足需求
(3)例如:通过监控任务实例等待提交时间,从而监控worker服务是否正常,以及worker服务的性能是否能够满足需求。
通过如上的全生命周期监控,可以及时发现worker服务的性能问题,尽早解决,避免影响到用户调度服务。
1.2.3 Workflow-DAG解析
DAG解析

此时,Master 就开始对工作流实例进行处理,这涉及到DAG解析的三个步骤:①DAG 构建、②任务数据初始化、③任务节点提交。
①DAG构建的目的是获取一个工作流节点的拓扑图,具体取决于任务节点的设置和状态。②数据初始化的处理是当工作流实例重跑或容错的场景下,此时需要加载一些历史数据,并跳过已成功执行的任务。③提交任务节点,根据DAG拓扑图,开始从 DAG 中获取下一个要提交的任务节点,并将其提交到任务队列中,最后将其分发Worker节点执行。当处理完任务实例后,会从DAG拓扑继续找出它的下游节点,提交分发,循环处理直到整个DAG运行完成。
Dispatch分发流程


对于 Dispatch分发流程,首先有一个Worker group的概念,即对一个或几个Worker节点打上分组的标签。比如 Spark 集群组,Flink 集群组,配置的任务时可以配置Worker分组,在dispatch分发时只会分发到对应的目标Worker组。
目前DS使用 lower-weight的分发策略来确定最优的Dispatch分发对象,结合心跳机制,worker 每5秒上报一次心跳到注册中心,汇报本轮自己的状态是否busy(结合cpu、内存、当前处理任务数来判断),Master定时从注册中心中获取worker心跳,并将其存储到数据库DB中。
Master和Worker的交互过程
当任务实例被分发给Worker节点后,涉及到 Master 和 Worker 之间的交互。在正常流程下,当任务实例分发给 Worker 节点后,工作节点不会立即执行任务,而是将任务放入队列中,然后由另一个线程来消费。
Worker接收任务成功,Master会将任务实例的状态设置为已分发,并记录下对应的Worker host。当Worker真正开始执行任务时,它会向Master 发送消息反馈任务正在 Running,Master 收到后会回复ack 确认,以确保通信的稳定性,不会丢失任何信息。
当Worker处理完任务后,会发送任务Finish的消息,Master收到后更新任务的状态、参数和应用信息。
1.3 任务运行状态
在介绍了正常流程后,还有一些与运行状态相关的操作,例如暂停和停止。我们可以通过页面上的操作来触发这些操作,例如触发停止,实际上任务的停止是执行在 Worker 节点上的,完成后也会经过 Finish-ack 的流程。

此外,还有一些超时检测,Master会检测任务是否达到超时时间点,如果达到终止时间点,它会发送一个事件给对应的Worker,进行相应的处理。
监听机制,例如当 Worker 节点挂掉时,Master会通过注册中心监听到,并进行任务容错处理。如果 Master 节点挂掉,其他 Master 节点将进行抢锁来接管工作流实例,确保系统的正常运行。
参考文章:
Apache DolphinScheduler 在奇富科技的首个调度异地部署实践
https://mp.weixin.qq.com/s/r9_cDkErlcChgu3wA5o2Iw
浅析 Apache DolphinScheduler 工作流实例的生命周期
相关文章:
DolphinScheduler——工作流实例的生命周期
目录 一、DolphinScheduler架构原理 1.1 系统架构图 1.2 DolphinScheduler核心概念 1.2 创建工作流 1.2.1 如何触发一个工作流实例 1.2.2 任务调度链路监控 1.2.3 Workflow-DAG解析 DAG解析 Dispatch分发流程 Master和Worker的交互过程 1.3 任务运行状态 该篇文章主…...
阻塞和非阻塞网络io有什么区别,分别有哪些应用场景?
阻塞(Blocking)和非阻塞(Non-blocking)网络I/O是两种不同的I/O模型,它们在处理I/O操作时的行为和特点有所不同。 阻塞式网络I/O(Blocking I/O): 在阻塞式网络I/O中,当应…...
面试数据库篇(mysql)- 12分库分表
拆分策略 垂直分库 垂直分库:以表为依据,根据业务将不同表拆分到不同库中。 特点: 按业务对数据分级管理、维护、监控、扩展在高并发下,提高磁盘IO和数据量连接数垂直分表:以字段为依据,根据字段属性将不同字段拆分到不同表中。 特点: 1,冷热数据分离 2,减少IO过渡争…...
LaTeX中的多行数学公式
目录 参考链接 一、gather以及gather*环境编排公式 1、 gather环境 2、 gather*环境 3、 阻止编号 二、align以及align*环境设定公式对齐方式 1、align环境 2、align*环境 三、split环境实现一个公式多行排版 四、cases环境实现分段函数 参考链接 LaTeX中的多行数学…...
绕过5秒盾Cloudflare和DDoS-GUARD
绕过5秒盾Cloudflare和DDoS-GUARD 5秒盾的特点免费版5秒盾的绕过方法付费版5秒盾的绕过方法 5秒盾的特点 <title>Just a moment...</title>例如: <!DOCTYPE html><html lang"en-US"><head><title>Just a moment...</title&…...
react 原理揭秘
1.目标 A. 能够知道setState()更新数据是异步的 B. 能够知道JSX语法的转化过程 C. 能够说出React组件的更新机制 D. 能够对组件进行性能优化 E. 能够说出虚拟DOM和Diff算法 2.目录 A. setState()的说明 B. JSX语法的转化过程 C. 组件更新机制 D. 组件性能优化 E. 虚拟DOM和D…...
el-table实现转置表格
vue版本:vue2.6.10 elementui版本:2.15.14 实现效果:el-table实现行列互换 代码: <template><div class"app-container"><span>原始数据</span><el-table:data"datas"border>…...
(3)(3.1) FlightDeck FrSky发射器应用程序
文章目录 前言 1 概述 2 Turnkey Packages 3 参数说明 前言 Craft and Theory 的 FlightDeck 可让你轻松查看飞行模式、高度、速度、姿态和关键系统警报,包括故障保护和电池错误,如电池不平衡警告和发射机低电量警报。 1 概述 Craft and Theory 的…...
【Unity】导入IAP插件后依赖冲突问题 com.android.billingclient冲突
【Unity】Attribute meta-data#com.google.android.play.billingclient.version 多版本库冲突_unity billingclient-CSDN博客 打开mainTemplate.gradle 找到dependencies { } 在里面末尾加上如下: configurations.all {exclude group: com.android.billingclien…...
docker 转为docker-compose(composerize 命令)
可以使用Composerize将Docker命令转换为Docker Compose文件。 例如:将docker run命令转换为Docker Compose格式,只需用Composerize运行它,如下所示: composerize docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/…...
【Golang切片】
切片 切片的引入内存分析切片的定义切片的遍历切片注意事项 切片的引入 【1】切片(slice)是golang中一种特有的数据类型 【2】数组有特定的用处,但是却有一些呆板(数组长度固定不可变),所以在Go语言的代码…...
React-router的创建和第一个组件
需要先学react框架 首先:找到一个文件夹,在文件夹出打开cmd窗口,输入如下图的口令 npx create-react-app demo 然后等待安装 安装完成 接下来进入创建的demo实例 cd demo 然后可以用如下方式打开vscode code . 注意:不要忽略点号与…...
计算机设计大赛 深度学习猫狗分类 - python opencv cnn
文章目录 0 前言1 课题背景2 使用CNN进行猫狗分类3 数据集处理4 神经网络的编写5 Tensorflow计算图的构建6 模型的训练和测试7 预测效果8 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习猫狗分类 ** 该项目较为新颖&a…...
Linux服务器磁盘及内存用量监控Python脚本(推送钉钉群通知)
文章目录 Python 脚本钉钉推送通知定时任务 Python 脚本 # -*- coding: utf-8 -*- import subprocessdef get_disk_usage():# 执行 df 命令获取磁盘使用情况df_process subprocess.Popen([df, -h, /], stdoutsubprocess.PIPE)output, _ df_process.communicate()output out…...
Android13 Audio框架
一、Android 13音频代码结构 1、framework: android/frameworks/base 1.AudioManager.java :音频管理器,音量调节、音量UI、设置和获取参数等控制流的对外API 2.AudioService.java :音频系统服务(java层),…...
kafka消费者接收不到消息
背景: 对kafka消息进行监听,生产者发了消息,但是消费端没有接到消息,监听代码 消费端,kafka配置 spring.kafka.bootstrap-serverskafka.cestc.dmp:9591 spring.kafka.properties.sasl.jaas.configorg.apache.kafka.…...
Python如何从SQL Server存取数据?
在Python中,你可以使用各种库来连接和操作 SQL Server 数据库。一种常用的库是pyodbc,它是一个用于连接到各种数据库的开源 Python 库,包括 SQL Server。以下是连接到 SQL Server 并存取数据的基本步骤: 1、安装 pyodbc 库&#…...
学校机房Dev c++解决中文乱码问题
工具->编译选项->勾选 编译时加入以下命令 -fexec-charsetGBK -finput-charsetUTF-8 显示中文:工具->编辑器选项->去掉第一个的勾勾。...
基于java+springboot景区行李寄存管理系统设计和实现
基于javaspringboot景区行李寄存管理系统设计和实现 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取…...
03-grafana的下拉列表选项制作-grafana的变量
一、准备环境 为了实现下拉列表筛选的样例,我们监控两个linux节点; 目前,我们已经有了一个节点了,再添加一个; 二、grafana的仪表盘变量 如果想给仪表盘自定义下拉列表,那么,需要设置变量&#…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
