教你数分钟内创建并运行一个 DolphinScheduler Workflow

news2024/11/16 0:23:04

点击蓝字 关注我们

079755674fe76d68d0246b4eeb80f47b.png

作者 | 鲍亮,Apache DolphinScheduler PMC Member

01

Workflow是什么?

对于数仓场景和数据湖场景来说,最显著的特点就是数据处理的长流程和高复杂度任务依赖关系,从源数据采集到最终报表数据的生成,中间可能经历上百个任务的处理,这些任务如果是散乱的,无明确的流程组织起来,中间某一个步骤出问题,就很难发现其影响范围,更加难以判定对其他依赖的任务的影响程度。

任务需要被有效地组织并流程化处理。这就需要Workflow 。DolphinScheduler 中 Workflow 通过 DAG(有向无环图)的方式操作。DAG 是由多个顶点(tasks)和其他顶点的之间关系(Relationships)构成,图形化的 Workflow 可以很直观地看到任务之间的关系,任意任务之间不能形成环。使用 Workflow 管理任务可以让数据处理流程更有层次,加上任务血缘展示,可以让整个数据处理流程更可视化和清晰明了。

本文就主要探讨如何在 ApacheDolphinScheduler 上更好地玩转 Workflow, 以帮助大家更好地管理数据处理任务。

02

创建工作流

根据需求,在 ApacheDolphinScheduler上,可以通过页面拖拽、Python脚本、yaml定义、OpenAPI调用多种方式创建工作流。这一点相对 Apache Airflow 来说,要更容易上手一些,比较适合平台使用者为多个部门的人员,比如分析师、数据科学家等,毕竟所见即所得比起调试 Python 代码要来得更简单直接一些。

我们以最简单的页面拖拽为例,假如有一个最简单的场景,从一个文件获取日志数据get-logs,然后分别经过处理日志1 read-file1 和日志2 read-file2, 每个文件经过统计,输出到不同的数据表output1, output2,如果两个文件都读取成功,要汇聚总表 output-summary.

d84d988e86b9b97b4c98aee327ce5946.png

  • 一般来说一个工作流不要超过30个任务,如果超过30个,建议将同类的任务使用子工作流汇总,比如get-logs这个流程可能需要有多个步骤(校验、清洗、分拆等),可以替换成子工作流来处理“准备日志文件”这个步骤,这样整个流程就会比较清晰。

当然实际的业务场景中,任务数量会更多,关系也会更复杂。例如:

  • 需要参数传递,读到的文件长度需要传递给下游output任务做校验,使用任务参数传递功能,可以很方便地构建任务之间的关系。例如在output-summary中可以通过判断read-file1和read-file2的读取结果进行输出:

read-file1:

f2ead3e285c022a35607d3b88f85c3d5.png

read-file2:

3140faf91910ccf1fdd0edde00445fcb.png

output-summary:

4b33e9285df9142042cf53aabe1e903d.png

  • 需要限制任务使用资源,有些任务对资源的使用太大,限制任务的执行资源,可以使用任务并发组功能,确保系统在任务量大的时候,保证集群正常提供服务。同时在任务并发组内还可以设置任务的优先级,在同一个组内,如果任务量超过了并发组的容量,系统会根据任务的优先级进行排队执行。

  • 我们经常遇到在任务执行的时候,由于网络或者环境的不稳定因素导致任务执行失败,那么就可以使用任务重试机制来让系统自动重试执行,在DolphinScheduler里,你可以设置任务失败重试的次数,并且还可以设置每次重试之间的间隔时间。

  • 当然如果我们对任务的执行时间有要求的话,可以使用超时设置,设定如果任务执行时长超过N分钟,就可以让系统发出警告或者直接让任务失败,进入重试阶段。

  • 我们执行任务的时候,经常也需要将不同任务使用不同的用户来执行。就可以在保存工作流的时候,指定工作流使用的租户,来达到使用多租户的目的。

  • 企业的不同部门都要使用同一个平台的话,可以使用worker分组将不同部门的服务拆分,每个部门的服务环境相互隔离,互不影响。

61eae3a0ba7145d80e28212c9c526889.png

03

运行工作流

在DolphinScheduler的设计中,每次运行工作流,都会生成一条当前工作流的实例,并且这个实例和工作流定义是分离的,也就是说如果实例运行失败,我们针对实例的修改,不会影响到工作流定义的内容。不过在产品设计上,提供了修改实例可以同步到工作流定义的功能,让用户更加方便地修改工作流。

系统支持多种运行模式:

  • 正常运行:直接在页面,点击运行按钮,立刻执行一次当前工作流。在工作流实例里面可以立马查询到当前运行的实例。

  • 运行部分任务:有一部分场景是我们在线下把一部分的任务数据准备好了,只需要运行某一部分任务即可。就可以在工作流的DAG页面通过右键点击某个任务运行,就可以通过选项:“仅运行选中任务”、“向后运行”、“向前运行” 来实现只运行DAG内的一部分任务的目的。

  • 补数运行:在日常的工作中,我们经常遇到重刷数据的场景:

    • 当天任务执行成功,但是校验数据的时候,发现上游数据错误,需要重刷数据。

    • 每月进行数据比对的时候,发现某些天的数据有误差,需要重刷数据

补数运行,就是在运行的时候,设置补数模式,处于补数模式时,用户在任务里使用的时间,会变成补数的时间。补数有两种选择:

  • 系统可以智能根据定时选择时间,比如我们定时了每天早上5点执行工作流,补数的时候可以选择一个是时间范围2022-12-01到2022-12-05,系统自动根据定时时间计算出补数的时间列表为:

  • 2022-12-01T05:00:00

  • 2022-12-02T05:00:00

  • 2022-12-03T05:00:00

  • 2022-12-04T05:00:00

  • 2022-12-05T05:00:00

  • 另外还可以通过手动输入补数时间列表,以解决需要补数不规则的时间列表。比如我们想补数2022-12-01,2022-12-04, 2022-12-05这三个日期的工作流,就可以使用日期列表补数实现。

运行完工作流以后,我们可以通过实例的DAG页面查看当前实例内任务的运行状况。并且通过右键某个任务实例,在页面上直接查看任务的运行日志,而不用去登录到服务器,或者其他系统中查找任务日志了。

如果工作流执行失败,我们可以对实例内失败的任务进行修改,然后再恢复运行,即可达到工作流断点执行的目的。

工作流实例也支持多种操作:暂停、停止、恢复执行、重跑、查看甘特图等。

04

总结

以上是DolphinScheduler的工作流的一些用法,当然还有更多工作流使用的细节,限于篇幅,我们下次再详细讨论。但是通过以上的内容,我们可以知道使用DolphinScheduler的工作流:

  • 可以专注于业务逻辑,不需要再关注系统复杂的运行机制了

  • 可以有效组织任务列表,很直观地看到任务的整个图谱,以及每个任务的影响范围

  • 支持页面可视化以及多种使用方式,适合不同类型的人员使用,降低企业的平台复杂度,降本增效

  • 所有配置可视化,降低用户的学习成本

  • 强大的调度能力,可以解决更多复杂的业务场景,比如:企业级分组、任务的判断/分支逻辑、多租户等需求。

参与贡献

随着国内开源的迅猛崛起,Apache DolphinScheduler 社区迎来蓬勃发展,为了做更好用、易用的调度,真诚欢迎热爱开源的伙伴加入到开源社区中来,为中国开源崛起献上一份自己的力量,让本土开源走向全球。

cbbcad8feec5ed5d60778a7041a0d68d.png

参与 DolphinScheduler 社区有非常多的参与贡献的方式,包括:

62049b65e0afe61f7fb2e889ed348fd2.png

贡献第一个PR(文档、代码) 我们也希望是简单的,第一个PR用于熟悉提交的流程和社区协作以及感受社区的友好度。

社区汇总了以下适合新手的问题列表:https://github.com/apache/dolphinscheduler/issues/5689

非新手问题列表:https://github.com/apache/dolphinscheduler/issues?q=is%3Aopen+is%3Aissue+label%3A%22volunteer+wanted%22

如何参与贡献链接:https://dolphinscheduler.apache.org/zh-cn/community/development/contribute.html

来吧,DolphinScheduler开源社区需要您的参与,为中国开源崛起添砖加瓦吧,哪怕只是小小的一块瓦,汇聚起来的力量也是巨大的。

参与开源可以近距离与各路高手切磋,迅速提升自己的技能,如果您想参与贡献,我们有个贡献者种子孵化群,可以添加社区小助手微信(Leonard-ds) ,手把手教会您( 贡献者不分水平高低,有问必答,关键是有一颗愿意贡献的心 )。

7a0d4dcb8b763e04322a09790bd279f4.jpeg

添加社区小助手微信(Leonard-ds) 

添加小助手微信时请说明想参与贡献。

来吧,开源社区非常期待您的参与。

< 🐬🐬 >

更多精彩推荐

☞干货教程 | DolphinScheduler 中的函数使用与扩展

☞优秀用户案例有奖征集 | 活动火热开启,快来投稿!

☞BIGO 如何做到夜间同时运行 2.4K 个工作流实例?

☞最新性能测试 | Apache DolphinScheduler 每分钟调度任务并发是 Apache Airflow 2 倍

☞名额已排到10月 | Apache DolphinScheduler Meetup分享嘉宾继续火热招募中

☞「2022 中国开源年度报告」OpenRank DolphinScheduler 名列前茅

☞分布式可视化作业调度平台 DolphinScheduler MasterServer 设计核心要点揭秘

我知道你在看80902eac89f1227c90229e0d5efee1df.png

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

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

相关文章

边玩边学,13个 Python 小游戏真有趣啊(含源码)

经常听到有朋友说&#xff0c;学习编程是一件非常枯燥无味的事情。其实&#xff0c;大家有没有认真想过&#xff0c;可能是我们的学习方法不对&#xff1f; 比方说&#xff0c;你有没有想过&#xff0c;可以通过打游戏来学编程&#xff1f; 今天我想跟大家分享几个Python小游…

Docker网络模式解析

目录 前言 一、常用基本命令 &#xff08;一&#xff09;查看网络 &#xff08;二&#xff09;创建网络 &#xff08;三&#xff09;查看网络源数据 &#xff08;四&#xff09;删除网络 二、网络模式 &#xff08;一&#xff09;总体介绍 &#xff08;二&#xff09…

使用SpringBoot实现无限级评论回复功能

评论功能已经成为APP和网站开发中的必备功能。本文采用springbootmybatis-plus框架,通过代码主要介绍评论功能的数据库设计和接口数据返回。我们返回的格式可以分两种方案,第一种方案是先返回评论,再根据评论id返回回复信息,第二种方案是将评论回复直接封装成一个类似于树的数据…

Coremail新春分享会:解读Coremail产品新亮点、邮件安全新趋势

2月15日&#xff0c;由Coremail主办的 “新年‘邮’新意 Coremail新春分享会”在线上直播间重磅开启&#xff01;现场分享精彩纷呈&#xff0c;好礼持续放送&#xff0c;场面火爆&#xff0c;收获观众过万点赞&#xff01; 直播现场 嘉宾分享了哪些行业干货&#xff1f;直播现场…

大数据开发-Linux环境搭建

1、操作系统 1.1 计算机原理 冯诺依曼结构&#xff1a;把程序当作数据存储在计算机存储设备中。 冯诺依曼三个基本原则&#xff1a; 采用二进制逻辑程序存储执行计算机由五个部分组成&#xff1a;运算器、控制器、储存器、输入和输出设备 计算机由软件和硬件组成&#xff0c…

图床(Typora + uPic/PicGo+ 七牛云)

图床&#xff08;Typora uPic/PicGo 七牛云&#xff09; 笔者平时使用 Typora 编写 markdown 文档&#xff0c;文档中常常会放置图片&#xff0c;如果文档不需要分享的话&#xff0c;其实讲图片存放在本地就可以了。由于我有在多台机器编写 markdown 笔记&#xff0c;还有将…

OAK相机跑各种yolo模型的检测帧率和深度帧率

编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查看首发地址链接。 ▌前言 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是助手…

Python字符串处理 -- 内附蓝桥题:门牌制作,卡片

字符串处理 ~~不定时更新&#x1f383;&#xff0c;上次更新&#xff1a;2023/02/20 &#x1f5e1;常用函数&#xff08;方法&#xff09; 1. s.count(str) --> 计算字符串 s 中有多少个 str 举个栗子&#x1f330; s "1354111" print(s.count(1)) # 答案为…

Docker 安装nacos并且配置数据库持久化(无脑CV版)

我们以运行ruoyi-cloud项目为例子 在安装之前请注意版本对应问题 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 由于我的是2021.0.4.0&#xff0c;因此安装2.0.4版本 否则可能会出现以下错误 在若依的issue有解决方案https:…

UnsupportedOperationException

原因&#xff1a;返回值为list时&#xff0c;返回值类型应为具体的类型参考文章&#xff1a;(139条消息) mybatis中返回结果类型为集合类型&#xff08;List、Map&#xff09;_毒毒毒毒丶的博客-CSDN博客_mybatis返回list<map>集合UnsupportedOperationException 是用于表…

【蓦然回首忆Java·基础卷Ⅱ】

文章目录对象内存解析方法的参数传递机制关键字&#xff1a;package、importpackage(包)JDK中主要的包介绍import(导入)JavaBeanUML类图继承的一些细节封装性中的4种权限修饰关键字&#xff1a;supersuper的理解super的使用场景子类中调用父类被重写的方法子类中调用父类中同名…

追梦之旅【数据结构篇】——详解C语言动态实现顺序表

详解C语言动态实现顺序表~&#x1f60e;前言&#x1f64c;顺序表概念及结构&#x1f64c;功能函数的具体实现分析&#xff1a;&#x1f64c;尾插函数具体实现&#xff1a;尾删函数具体实现&#xff1a;头插函数具体实现&#xff1a;头删插函数具体实现&#xff1a;任意插函数具…

EM算法总结

目录 一。Jensen不等式&#xff1a;若f是凸函数 二。最大似然估计 三。二项分布的最大似然估计 四。进一步考察 1.按照MLE的过程分析 2.化简对数似然函数 3.参数估计的结论 4.符合直观想象 五。从直观理解猜测GMM的参数估计 1.问题&#xff1a;随机变量无法直接…

SQL90 纠错3

描述OrderItems表含有order_num订单号order_numa002a002a002a004a007【问题】将下面代码修改正确后执行SELECT order_num, COUNT(*) AS items FROM OrderItems GROUP BY items HAVING COUNT(*) > 3 ORDER BY items, order_num;【示例结果】返回订单号order_num和出现的次数i…

数据结构之算法的时间复杂度和空间复杂度

本章重点&#xff1a; 1.算法效率 2.时间复杂度 3.空间复杂度 4. 常见时间复杂度以及复杂度oj练习 目录 1.算法效率 1.2算法的复杂度 2.时间复杂度 2.1 时间复杂度的概念 2.2 大O的渐进表示法 2.3常见时间复杂度计算举例 3.空间复杂度 4. 常见复杂度对比 5.复杂度…

在VMware Workstation中配置固定IP、在VMware Fusion中配置固定IP

1、在VMware Workstation中配置固定IP 配置固定IP需要2个大步骤&#xff1a; 1.在VMware Workstation&#xff08;或Fusion&#xff09;中配置IP地址网关和网段&#xff08;IP地址的范围&#xff09; 首先让我们&#xff0c;先进行第一步&#xff0c;跟随图片进行操作 现在进…

Pthreads实验

实验一&#xff1a;主线程与子线程 pthread_create函数&#xff1a; 1、简介&#xff1a;pthread_create是UNIX环境创建线程的函数 2、头文件&#xff1a;#include <pthread.h> 3、函数声明&#xff1a; int pthread_create(pthread_t* restrict tidp , const pthread_a…

java面试题-JUC锁

1.介绍下LockSupport&#xff1f;LockSupport 是 Java 并发包中的一个工具类&#xff0c;用于创建锁和其他同步类的基本线程阻塞原语。它也是 J.U.C 中的一个核心基础类。相较于 Object.wait() 和 Object.notify()&#xff0c;LockSupport 可以更加灵活地对线程进行阻塞和唤醒操…

以学校数据模型为例,掌握在DAS下使用GaussDB

文章目录题目具体操作一、表的创建二、表数据的插入三、数据查询目的&#xff1a; 这里以学校数据库模型为例&#xff0c;介绍GaussDB数据库、表等常见操作&#xff0c;以及SQL语法使用的介绍。题目 假设A市B学校为了加强对学校的管理&#xff0c;引入了华为GaussDB数据库。 在…

如何利用ChatGPT学习量化投资?

引言最近&#xff0c;ChatGPT持续火了很长时间&#xff0c;占领各大热点和头版头条&#xff0c;成为A股开年以来最大的热点之一。ChatGPT是OpenAI开发的一种语言生成模型&#xff0c;可以理解为智能问答机器人。最近围绕量化投资在上面试了很多问题&#xff0c;大部分回答还是很…