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 工作流实例的生命周期

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【真机Bug】异步加载资源未完成访问单例导致资源创建失败

1.错误表现描述 抽卡时,10抽展示界面为A。抽取内容可能是整卡或者碎片,抽到整卡,会有立绘展示和点击详情的按钮。点击详情后出现详情页B。【此时界面A预制体被销毁,卡片数据进入数据缓存池】点击页面B的返回按钮,单例…

maven 包管理平台-05-multi module 多模块

拓展阅读 maven 包管理平台-01-maven 入门介绍 Maven、Gradle、Ant、Ivy、Bazel 和 SBT 的详细对比表格 maven 包管理平台-02-windows 安装配置 mac 安装配置 maven 包管理平台-03-maven project maven 项目的创建入门 maven 包管理平台-04-maven archetype 项目原型 ma…

183896-00-6,Biotin-C3-PEG3-C3-NH2,可以选择性降解靶蛋白

您好,欢迎来到新研之家 文章关键词:183896-00-6,Biotin-C3-PEG3-C3-NH2,Biotin-C3-PEG3-C3-amine,生物素-C3-PEG3-C3-胺 一、基本信息 【产品简介】:Biotin-PEG3-C3-NH2是一种PROTAC linker,…

【python】爬取链家二手房数据做数据分析【附源码】

一、前言、 在数据分析和挖掘领域中,网络爬虫是一种常见的工具,用于从网页上收集数据。本文将介绍如何使用 Python 编写简单的网络爬虫程序,从链家网上海二手房页面获取房屋信息,并将数据保存到 Excel 文件中。 二、效果图&#…

网工必懂的ICMP协议

福建厦门微思网络始于2002年,面向全国招生! 主要课程:华为、思科、红帽、Oracle、VMware、CISP安全系列、PMP....... 网络工程师实用课程华为HCIA课程介绍 网络工程师使用课程华为HCIP课程介绍 网络工程师使用课程华为HCIE课程介绍 因特网…

volatile 关键字 (一)

volatile 关键字 (一) 文章目录 volatile 关键字 (一)如何保证变量的可见性?如何禁止指令重排序? 文章来自Java Guide 用于学习如有侵权,立即删除 如何保证变量的可见性? 在 Java 中…

OJ:移除链表元素

203. 移除链表元素 - 力扣(LeetCode) 思路:这个题可以直接在原链表上进行修改,但是修改链表的指向是有点麻烦的,所以我们给两个指针,phead和ptail,这是新链表的两个指针,再给一个指针pcur来遍历…

Doris——纵腾集团流批一体数仓架构

目录 前言 一、早期架构 二、架构选型 三、新数据架构 3.1 数据中台 3.2 数仓建模 3.3 数据导入 四、实践经验 4.1 准备阶段 4.2 验证阶段 4.3 压测阶段 4.4 上线阶段 4.5 宣导阶段 4.6 运行阶段 4.6.1 Tablet规范问题 4.6.2 集群读写优化 五、总结收益 六…

数据结构.多项式加法

#include<iostream> using namespace std; int a[100][2], b[100][2], sum[100][2]; int n, m; int main() {cin >> n;//输入第一个多项式的项数for (int i 0; i < n; i){cin >> a[i][0] >> a[i][1];//分别输入系数和指数}cin >> m;//输入第…

[Java 探索者之路] 一个大厂都在用的分布式任务调度平台

分布式任务调度平台是一种能够在分布式计算环境中调度和管理任务的系统&#xff0c;在此环境下&#xff0c;各个任务可以在独立的节点上运行。它有助于提升资源利用率&#xff0c;增强系统扩展性以及提高系统对错误的容忍度。 文章目录 1. 分布式任务调度平台1. 基本概念1.1 任…

02.刚性事务

刚性事务 1.DTP模型 X/Open组织介绍 X/OPEN是一个组织&#xff08;现在的open group&#xff09;X/Open国际联盟有限公司是一个欧洲基金会&#xff0c;它的建立是为了向UNIX环境提供标准。它主要的目标是促进对UNIX语言、接口、网络和应用的开放式系统协议的制定。它还促进在…

【兔子机器人】根据自身机器人参数修改simulink模型

关节电机 机体初始高度 &#xff01;&#xff01;&#xff01;接下来尝试修改各腿的坐标朝向

【文献管理】zotero插件4——获取知网pdf、中文文献识别与目录生成

文章目录 zotero获取知网PDFzotero——中文文献识别&#xff08;茉莉花插件&#xff09;学位论文目录生成 zotero获取知网PDF zotero——中文文献识别&#xff08;茉莉花插件&#xff09; 为下载的学位论文添加目录中文文献识别&#xff1a;jasminum 下载pdflabs下载茉莉花插…

Day23-磁盘管理与软件包管理

Day23-磁盘管理与软件包管理 1. 什么是文件系统&#xff1f;2. 为什么磁盘分区后需要格式化&#xff1f;3. 常见文件系统类型4. 文件系统体系结构&#xff08;图&#xff09;5. 生产文件系统选型5.1 SAS/SATA磁盘对应文件系统的选择&#xff1a;5.2 常规的服务应用建议&#xf…

(C语言)回调函数

回调函数是什么&#xff1f; 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另⼀个函数&#xff0c;当这个指针被⽤来调⽤其所指向的函数 时&#xff0c;被调⽤的函数就是回调函数。回调函数不是由该函数的实现⽅…

基于Java SSM框架实现众筹平台网站系统项目【项目源码】计算机毕业设计

基于java的SSM框架实现众筹平台网站系统演示 SSM框架 当今流行的“SSM组合框架”是Spring SpringMVC MyBatis的缩写&#xff0c;受到很多的追捧&#xff0c;“组合SSM框架”是强强联手、各司其职、协调互补的团队精神。web项目的框架&#xff0c;通常更简单的数据源。Spring…

对缓冲区的初步认识——制作进度条小程序

对缓冲区的初步认识--进度条小程序 前言预备知识回车和换行的区别输出缓冲区/n 有清空输出缓冲区的作用stdout是什么&#xff1f;验证一切皆文件为什么是\n行刷新&#xff1f; 倒计时程序原理 代码实现为什么这里要强制刷新&#xff1f;没有会怎样&#xff1f;为什么是输出的是…

英福康INFICON XTC/3/2薄膜镀层控制仪软件和使用说明

英福康INFICON XTC/3/2薄膜镀层控制仪软件和使用说明

【嵌入式实践】【芝麻】【设计篇-3】从0到1给电动车添加指纹锁:项目整体规划

0. 前言 该项目是基于stm32F103和指纹模块做了一个通过指纹锁控制电动车的小工具。支持添加指纹、删除指纹&#xff0c;电动车进入P档等待时计时&#xff0c;计时超过5min则自动锁车&#xff0c;计时过程中按刹车可中断P档状态&#xff0c;同时中断锁车计时。改项目我称之为“芝…

[Python] 获取当前函数名的三种方法

使用__name__获取当前函数名 函数内和函数外都可以用__name__特殊属性。 def get_fun_name_1():fun_name get_fun_name_1.__name__print(fun_name)get_fun_name_1.__name__输出&#xff1a;get_fun_name_1 使用sys模块获取当前运行的函数名 sys._getframe()可以用来获取当…