其他分享
首页 > 其他分享> > Apache DolphinScheduler新一代分布式工作流任务调度平台实战-中

Apache DolphinScheduler新一代分布式工作流任务调度平台实战-中

作者:互联网

@

目录

架构设计

总体架构

image-20220801143454572

启动流程图

image-20220801143556961

架构设计思想简述

DolphinScheduler架构和实现中有非常多的优秀设计思想,详细可以查阅官方说明,下面是核心点简述:

负载均衡

参数

参数优先级

DolphinScheduler 中所涉及的参数值的定义可能来自三种类型:

因为参数的值存在多个来源,当参数名相同时,就需要会存在参数优先级的问题。DolphinScheduler 参数的优先级从高到低为:本地参数 > 上游任务传递的参数 > 全局参数

在上游任务传递的参数中,由于上游可能存在多个任务向下游传递参数,当上游传递的参数名称相同时:

内置参数

基础内置参数

变量名 声明方式 含义
system.biz.date ${system.biz.date} 日常调度实例定时的定时时间前一天,格式为 yyyyMMdd
system.biz.curdate ${system.biz.curdate} 日常调度实例定时的定时时间,格式为 yyyyMMdd
system.datetime ${system.datetime} 日常调度实例定时的定时时间,格式为 yyyyMMddHHmmss

衍生内置参数

本地参数和全局参数

本地参数的作用域:在任务定义页面配置的参数,默认作用域仅限该任务,如果配置了参数传递则可将该参数作用到下游任务中。

使用前面shell演示工作流定义,在shell-nodeA添加本地参数:

image-20220802184914182

全局参数作用域:全局参数是指针对整个工作流的所有任务节点都有效的参数,在工作流定义页面配置。本地任务引用全局参数的前提是已经定义了全局参数,使用方式和本地参数中的使用方式类似,但是参数的值需要配置成全局参数中的 key。

在shell-nodeB和shell-nodeC中的脚本输出echo ${dt},然后点击保存工作流,添加全局变量

image-20220802185556563

从任务实例点击右边查看日志,可以看到shell-nodeA输出的是当天日期2022-08-02,而shell-nodeB和shell-nodeC输出的是前一天日期2022-08-01。

工作流传参

DolphinScheduler 允许在任务间进行参数传递,目前传递方向仅支持上游单向传递给下游。目前支持这个特性的任务类型有Shell、SQL、Procedure。

当定义上游节点时,如果有需要将该节点的结果传递给有依赖关系的下游节点,需要在【当前节点设置】的【自定义参数】设置一个方向是 OUT 的变量。目前我们主要针对 SQL 和 SHELL 节点做了可以向下传递参数的功能。

下面通过 SHELL 任务来创建本地参数并赋值传递给下游,用户需要传递参数,在定义 SHELL 脚本时,需要输出格式为 ${setValue(key=value)} 的语句,key 为对应参数的 prop,value 为该参数的值。在shell-nodeA任务节点中的自定义参数中添加设置参数传递如下:

image-20220803135820606

在shell-nodeC中脚本输出echo ${transfer},保存工作流定义-上线-运行,查看shell-nodeC任务示例的日志,可以得到输出了20220701达到工作流参数。

数据源管理

支持数据源

数据源中心支持MySQL、POSTGRESQL、HIVE/IMPALA、SPARK、CLICKHOUSE、ORACLE、SQLSERVER等数据源。

以 MySQL 为例,如果想要使用 MySQL 数据源,需要先在 mysql maven 仓库 中下载对应版本的 JDBC 驱动,将其移入 api-server/libs 以及 worker-server/libs 文件夹中,最后重启 api-serverworker-server 服务,即可使用 MySQL 数据源。如果你使用容器启动 DolphinScheduler,同样也是将 JDBC 驱动挂载放到以上两个服务的对应路径下后,重启驱动即可。

创建MySQL数据源

由于前面部署DolphinScheduler集群已将MySQL的驱动复制到所有节点master和worker、api-server、alert-server上了,因此这里可以开始创建MySQL数据源

image-20220802112921160

jdbc连接参数如下:

{
    "useSSL": "false",
    "useUnicode": "true",
    "characterEncoding": "utf-8",
    "allowMultiQueries": "true",
    "zeroDateTimeBehavior": "convertToNull",
    "allowPublicKeyRetrieval": "true"
}

点击数据源记录的数据源参数

image-20220802121308522

创建ClickHouse数据源

这里我们使用前面部署好的ClickHouse,CLICKHOUSE数据源驱动原生已支持

image-20220802122100919

工作流实践

SQL工作流

拖拉SQL引擎图标,创建名称为sql_node1任务定义

insert into table01 
values('1001',99.9,'2022-08-02 22:00:00');

CREATE TABLE table01
(
    `id` String,
    `price` Float64,
    `create_time` DateTime
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(create_time)
ORDER BY id;

image-20220802180852012

创建名称为sql_node2任务定义

insert into table02 
values('1002',199.9,'2022-08-02 23:00:00');

CREATE TABLE table02
(
    `id` String,
    `price` Float64,
    `create_time` DateTime
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(create_time)
ORDER BY id;

image-20220802183954330
创建名称为sql_node3任务定义

insert into table03 select * from table01 
union all select * from table02;

CREATE TABLE table03
(
    `id` String,
    `price` Float64,
    `create_time` DateTime
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(create_time)
ORDER BY id;

image-20220802182923983

编辑好工作流的依赖关系,sql_node1和sql_node2都完成后再执行sql_node3,保存名称为sql演示工作流。

image-20220802182103074

上线sql演示工作流并点击执行,查询工作流实例执行结果

image-20220802183746437

查询任务实例执行结果

image-20220802183645989

使用ClickHouse的客户端登录ClickHouse查询数据,已经显示正确的结果

image-20220802184058126

工作流定时

大部分任务都会有定时运行的需求,这就需要定时工作流,创建步骤:点击项目管理->工作流->工作流定义,进入工作流定义页面,上线工作流,点击"定时"按钮,弹出定时参数设置弹框:

image-20220803163829335

告警

告警模块支持场景

用户需要创建告警实例,在创建告警实例时,需要选择告警策略,有三个选项,成功发、失败发,以及成功和失败都发。在执行完工作流或任务时,如果触发告警,调用告警实例发送方法会进行逻辑判断,将告警实例与任务状态进行匹配,匹配则执行该告警实例发送逻辑,不匹配则过滤。创建完告警实例后,需要同告警组进行关联,一个告警组可以使用多个告警实例。 告警模块支持场景如下:

image-20220803155642085

邮件告警示例

先准备一个邮箱,开启POP3/SMTP服务,由于是要用来发送主要是SMTP,得到授权码,保存修改。

image-20220803161649495

使用管理员用户登录,进入到安全中心,选择告警实例管理,创建一个告警实例,然后选择对应的告警插件EMAIL,填写相关如下参数。

image-20220803162258355

然后选择告警组管理,创建告警组,选择相应的告警实例即可。

image-20220803162421446

工作流定义运行中配置通知策略为成功或失败都发,告警组为前面创建测试告警组

image-20220803163335087

查看邮箱确认已收到邮件信息

image-20220803163503224

**本人博客网站 **IT小神 www.itxiaoshen.com

标签:数据源,DolphinScheduler,worker,任务,参数,Apache,告警,任务调度,定时
来源: https://www.cnblogs.com/itxiaoshen/p/16549272.html