乐趣区

关于大数据:Apache-DolphinScheduler-简单任务定义及复杂的跨节点传参

点亮 ⭐️ Star · 照亮开源之路

GitHub:https://github.com/apache/dolphinscheduler

Apache DolphinScheduler 是一款十分不错的调度工具,可单机可集群可容 器,可调度 sql、存储过程、http、大数据等,也可应用 shell、python、java、flink 等语言及工具,功能强大类型丰盛,适宜各类调度型工作,社区及我的项目也非常沉闷,当初 Github 中已有 8.5k 的 star👍

筹备工作

浏览本文前建议您先浏览下官网的文档

文档链接:https://dolphinscheduler.apache.org/zh-cn/docs/latest/user_doc/guide/parameter/context.html

在这里,先筹备下 sql 表资源,以下为 postgresqlsql脚本:

表构造

CREATE TABLE dolphinscheduler.tmp (

id int4 NOT NULL,

"name" varchar(50) NULL,

"label" varchar(50) NULL,

update_time timestamp NULL,

score int4 NULL,

CONSTRAINT tmp_pkey PRIMARY KEY (id) );

表数据

INSERT INTO tmp (id,"name","label",update_time,score) VALUES

(3,'二狗子','','2022-07-06 21:49:26.872',NULL),

(2,'马云云','',NULL,NULL),

(1,'李思','','2022-07-05 19:54:31.880',85);

我这里应用的 postgresql 的数据库,如果您是 mysql 或者其余数据的用户,请自行更改以上表和数据并增加到库中即可~

表及数据入库,请将 tmp 所属的库配置到 DS 后盾 -> 数据源核心 -> 创立数据源,以下是我的配置,记住,这外面的所有数据库配置均恪守所属数据库类型的 jdbc 的 driver 的配置参数,配置实现也会在 DS 的数据库生成一条 jdbc 的连贯地址,这点要明确~

简略的我的项目创立及阐明

因为 DolphinScheduler 的工作是配置在我的项目上面,所以第一步得新建一个我的项目,这样:DS 后盾 -> 项目管理 -> 创立我的项目,这是我创立的请看下图:

筹备完我的项目之后,鼠标点进去,并进入到工作流定义菜单 页面,如下图:

简略解释下 DS 的根本构造

首先,DS 个别部署在 linux 服务器下,创立工作的用户须要在 admin 账户 下创立,重要的是创立的每个工作账户须要与操作系统用户一一对应.

比方你创立了一个 test 的 DS 账户,那所在的服务器也必须有一个 test 的账户才可行,这是 DS 的规定。

每个用户下(除了 admin 外)所能创立的调度工作均在各自创立的我的项目下,每个我的项目又分为多个工作(工作流定义), 一个工作下又可分为多个工作节点。

下图为工作定义

ok, 如果曾经筹备好以上步骤,上面开始持续定义一个简略的调度工作~

简略的参数传递

先看表:

如图咱们先做个简略的:

如果二狗子的本名叫李思,须要取  id=1  的 name 放到 id=3  的 label 中,并且更新 update_time 

01

在工作流定义列表,点击 创立工作流 就进入一个具体的工作 (工作流) 的定义, 同时咱们应用的是 sql 工作,须要从左侧拖动一个 sql 工作到画布中(右侧空白处):

拖动 sql 工作 到画布会自动弹出节点定义,上图为以后节点的一个定义,重点是:数据源、sql 类型、sql 语句,如官网所说,如果将 name 传递到上游,则须要在自定义参数重定义这个 name 为 out 方向 类型为 varchar。

02

因为传递到参数须要写入到表,这里咱们再定义一个节点,这个节点负责接管上游传递到 name,执行 update 时应用这个 name,以下是我的定义:

这里不仅仅要留神 sql 类型 (sql 类型与 sql 语句是一一对应的,类型不能错),还有就是前置工作肯定要选中(下面定义的) node1 节点。另外,须要留神的是当前任务是上下游传参,所以在 node2 中是间接应用 node1 中定义的 name 这个参数。

03

定义实现当前任务须要保留:点右上角保留,填写并保留后点敞开以退出定义;

04

定义的工作须要上线了才可执行,所以在工作流定义列表先点该工作的黄色按钮(工作上线),而后才是点绿色按钮(执行工作):

05

工作执行胜利与否,具体得看工作实例,这是执行 node2 节点 的日志:

顺带再看看数据库表是否实在胜利:

完满😊

简单的跨节点传参

首先看表:

思考一个问题:能够看到李思的 score 是 85,依据 score 应该被评为 B(>=90 的为 A)并写入到 label 字段,该怎么办呢?如果这个分数是 90 分又该怎么办呢?如果基本没有 score(分值) 这个工作是不是就不须要更新李思的 label(评分)呢?

对于下面问题能够有一些偏门的解决办法,比方在 sql 中塞一个异样值,这样看似不错,不过作为调度工具倡议还是在 condition 节点或者 switch 节点解决是最好的,目前我用的 2.0.5 版本对于这两类工作节点是没法接管参数的,这是一个遗憾;

集体感觉较好的形式是在写入节点之前减少一个判断节点,将谬误抛出(没有 score 的)最好~,对于此,我应用了一个 shell 的两头节点。

上面是我定义的三个节点:

node1 节点定义:

node2 节点定义:

脚本内容

#!/bin/bash echo "=====>input param start<=====" echo "id=${id}" echo "score=${score}" echo "=====>input param end<=====" id=${id} echo '${setValue(id2='$id')}' if ["${score}" -ge "90" ];then echo '${setValue(label2=level A)}' echo "level A" elif ["${score}" -ge "80" ];then echo '${setValue(label2=level B)}' echo "level B" elif ["${score}" -ge "60" ];then echo '${setValue(label2=level C)}' echo "level C" elif ["${score}" -ge "0" ];then echo '${setValue(label2=F!)}' echo "F!" else echo "NO score ,please check!" exit 1 fi

node3 节点定义:

看一眼后果🤓:

小结

1、对于 shell 脚本 不相熟的,判断节点其实还是有一些难度的,这是很重要的一点;

2、node2(判断节点)不能有反复的参数,不论部分的还是 node1(上一级) 传递过去的,均不能反复;

3、因为在 node2(判断节点) 须要将 id 以及 label 持续往下传 (to node3), 这时候就须要给 id 以及 label 定义一个映射的out 变量(id2、label2);

3、node2 中从新设置参数麻烦,须要在 shell 中从新定义变量 (id2、label2), 同时须要在 shell 工作内应用拼接的形式赋值(如:echo ‘${setValue(id2=’$id’)}’);

4、sql 类型 以及不同节点下不同参数时常搞错,不是任何节点都能够接管下级节点参数,以及局部变量与传递变量以及全局变量优先级区别及可能造成抵触;

5、DS 列表传参 (2.0 是不能够的) 很鸡肋, 对于列表传参又不能在下一级节点做循环赋值,这点对于 DS 是有改良的空间的;

DolphinScheduler 还有很多可扩大的中央(因为理论须要),我还做了一些二次开发😂,前面会聊 … 大家期待哟😚

参加奉献

随着国内开源的迅猛崛起,Apache DolphinScheduler 社区迎来蓬勃发展,为了做更好用、易用的调度,真挚欢送酷爱开源的搭档退出到开源社区中来,为中国开源崛起献上一份本人的力量,让外乡开源走向寰球。

欢送关注

参加 DolphinScheduler 社区有十分多的参加奉献的形式,包含:

奉献第一个 PR(文档、代码) 咱们也心愿是简略的,第一个 PR 用于相熟提交的流程和社区合作以及感触社区的友好度。

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

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

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

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

参加开源能够近距离与各路高手切磋,迅速晋升本人的技能,如果您想参加奉献,咱们有个贡献者种子孵化群,能够增加社区 Leonard-ds,手把手教会您(贡献者不分程度高下,有问必答,要害是有一颗违心奉献的心)。

增加小助手时请阐明想参加奉献。

来吧,开源社区十分期待您的参加。

< 🐬🐬 >

退出移动版