编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

DolphinScheduler学习(dolphinrescue讲解)

wxchong 2024-09-12 22:01:36 开源技术 9 ℃ 0 评论

## 1.查看文档

点击访问:https://dolphinscheduler.apache.org/zh-cn/docs

我们可以看到相关的文档简介里有

### 介绍

DolphinScheduler是Apache DolphinScheduler 是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景,提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。

### 作用

Apache DolphinScheduler 旨在解决复杂的大数据任务依赖关系,并为应用程序提供数据和各种 OPS 编排中的关系。 解决数据研发ETL依赖错综复杂,无法监控任务健康状态的问题。 DolphinScheduler 以 DAG(Directed Acyclic Graph,DAG)流式方式组装任务,可以及时监控任务的执行状态,支持重试、指定节点恢复失败、暂停、恢复、终止任务等操作。

我们是用来做seatunnel的文件同步操作研究需要使用这个

### 相关名词介绍

#### DAG

##### 介绍

然后有对应的相关名词介绍:如DAG 全称 Directed Acyclic Graph,简称 DAG。工作流中的 Task 任务以有向无环图的形式组装起来,从入度为零的节点进行拓扑遍历,直到无后继节点为止。举例如下图:

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/910e3a5c34584040b635d097d99941cc.png)

下面是百度到对dag的理解

有向无环图(Directed Acyclic Graph,DAG)是一种特殊的有向图,它没有任何环路。这意味着从图中的任意一个顶点出发,不可能通过一系列有向边回到该顶点。

##### 特性

有向性:图中的边有方向。

无环性:图中不存在任何环路,即不存在从某个顶点出发,经过若干条边又回到该顶点的路径。

应用

DAG在许多领域中有广泛的应用,包括:

任务调度:例如编译器的优化过程中,用DAG来表示指令的依赖关系,确保指令的执行顺序。

版本控制系统:如Git,使用DAG来表示提交历史,保证不同分支的提交历史可以正确地合并。

数据处理流水线:DAG可以用来表示数据处理的各个步骤及其依赖关系。

路径规划:例如在某些网络路由算法中,使用DAG来确保路径无环,从而避免路由循环。

例子

1. DAG 示例

plaintext

复制代码

```java

A → B → D

↓ ↓

C → E

```

在这个例子中,没有任何路径可以从一个节点回到自身,因此它是一个DAG。

##### 相关算法

DAG上有许多重要的算法,主要包括:

拓扑排序:拓扑排序是DAG的一个线性序列,满足对图中的每条有向边 (u, v),顶点 u 在 v 之前。常见的算法包括Kahn算法和基于深度优先搜索(DFS)的算法。

Kahn算法:基于入度的拓扑排序算法。

DFS算法:基于DFS的拓扑排序,利用递归实现。

最长路径:在DAG中寻找从起点到终点的最长路径,可以利用拓扑排序来简化计算。

最短路径:在DAG中寻找从起点到终点的最短路径,也可以利用拓扑排序来优化计算。

##### 个人理解

DAG就是有向无环图中的一种特殊的有向图,即不存在从某个顶点出发,经过若干条边又回到该顶点的路径且图中的边有方向,用于定义和管理任务之间的依赖关系。工作流中的 Task 任务以有向无环图的形式组装起来,从入度为零的节点进行拓扑遍历,直到无后继节点为止。

###### DAG在DolphinScheduler中的作用

任务依赖管理:DAG用于定义任务之间的依赖关系,确保任务按正确的顺序执行。

工作流调度:利用DAG结构,DolphinScheduler可以高效地调度和管理复杂的工作流。

错误处理和重试:在DAG中,如果某个任务失败,可以定义错误处理和重试策略。

###### DolphinScheduler中的DAG实现

DolphinScheduler使用JSON格式来定义工作流的DAG。每个工作流定义中包含多个任务节点和它们之间的依赖关系。

#### 流程定义:

通过拖拽任务节点并建立任务节点的关联所形成的可视化DAG

#### 流程实例:

流程实例是流程定义的实例化,可以通过手动启动或定时调度生成。每运行一次流程定义,产生一个流程实例

#### 任务实例:

任务实例是流程定义中任务节点的实例化,标识着某个具体的任务

任务类型:目前支持有 SHELL、SQL、SUB_PROCESS(子流程)、PROCEDURE、MR、SPARK、PYTHON、DEPENDENT(依赖),同时计划支持动态插件扩展,注意:其中 SUB_PROCESS类型的任务需要关联另外一个流程定义,被关联的流程定义是可以单独启动执行的

#### 调度方式:

系统支持基于 cron 表达式的定时调度和手动调度。命令类型支持:启动工作流、从当前节点开始执行、恢复被容错的工作流、恢复暂停流程、从失败节点开始执行、补数、定时、重跑、暂停、停止、恢复等待线程。 其中 恢复被容错的工作流 和 恢复等待线程 两种命令类型是由调度内部控制使用,外部无法调用

#### 定时调度:

系统采用 quartz 分布式调度器,并同时支持cron表达式可视化的生成

#### 依赖:

系统不单单支持 DAG 简单的前驱和后继节点之间的依赖,同时还提供任务依赖节点,支持流程间的自定义任务依赖

#### 优先级 :

支持流程实例和任务实例的优先级,如果流程实例和任务实例的优先级不设置,则默认是先进先出

#### 邮件告警:

支持 SQL任务 查询结果邮件发送,流程实例运行结果邮件告警及容错告警通知

#### 失败策略:

对于并行运行的任务,如果有任务失败,提供两种失败策略处理方式,继续是指不管并行运行任务的状态,直到流程失败结束。结束是指一旦发现失败任务,则同时Kill掉正在运行的并行任务,流程失败结束

#### 补数:

补历史数据,支持区间并行和串行两种补数方式,其日期选择方式包括日期范围和日期枚举两种

#### 模块介绍

dolphinscheduler-master master模块,提供工作流管理和编排服务。

dolphinscheduler-worker worker模块,提供任务执行管理服务。

dolphinscheduler-alert 告警模块,提供 AlertServer 服务。

dolphinscheduler-api web应用模块,提供 ApiServer 服务。

dolphinscheduler-common 通用的常量枚举、工具类、数据结构或者基类

dolphinscheduler-dao 提供数据库访问等操作。

dolphinscheduler-extract extract模块,包含master/worker/alert的sdk

dolphinscheduler-service service模块,包含Quartz、Zookeeper、日志客户端访问服务,便于server模块和api模块调用

### 安装

#### 快速安装

第一次看的时候看的不说很懂安装模式,没认真看的话就只看到dokcer的安装模式,然后本人的开发环境docker问题,一大堆下载不下来,后面认真看了一下发现一种更简单的不用docker安装,外面也有很多安装教程不过都很麻烦我只是要快速搭建实现和了解一下。我们可以在**快速上手**里面的**设置 Dolphinscheduler**有个**standalone server**点击这个就有用安装包安装的快速教程。跳转页面是没有中文的我是用电脑win10字带Microsoft Edge中文翻译转成中文看的。我是跳转https://dolphinscheduler.apache.org/en-us/docs/3.1.3/guide/installation/standalone这个地址你可以看到一个不需要任何配置的只需要下载一个 apache-dolphinscheduler-*-bin.tar.gz包解压启动bash ./bin/dolphinscheduler-daemon.sh start standalone-server然后等几秒后就可以访问

admin/dolphinscheduler123http://localhost:12345/dolphinscheduler/ui页面了

##### 缺点

Standalone 只建议使用少于 20 个工作流,因为它默认使用内存 H2 数据库,ZooKeeper 测试服务器,任务过多可能会导致不稳定。 当 Standalone 停止或重新启动时,内存中 H2 数据库将清理。要将 Standalone 用于 mysql 或 postgresql 等外部数据库

##### 修改配置

如果你想用数据库mysql和pg增加数据容量点击到文档最下面有个数据库配置点击

datasource-setting 就可以找到对应的配置去修改对应的配置。

数据库配置从文档知道如mysql在bin/env/dolphinscheduler_env.sh

```java


export DATABASE=${DATABASE:-mysql}

export SPRING_PROFILES_ACTIVE=${DATABASE}

export SPRING_DATASOURCE_URL="jdbc:mysql://127.0.0.1:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8&useSSL=false"

export SPRING_DATASOURCE_USERNAME=root

export SPRING_DATASOURCE_PASSWORD=1234

```

其如果是mysql驱动在最下面有 但如果想使用 MySQL 作为 DolphinScheduler 的元数据库,它只支持 [8.0.16 及以上]

[下载地址](https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.16/mysql-connector-java-8.0.16.jar)

然后把包复制到底下的目录底下

api-server/libs alert-server/libs master-server/libs worker-server/libs tools/libs

我看教程少了个tools/libs在执行bash tools/bin/upgrade-schema.sh会报

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/fe9ba18e0cbf48ea94e57a9e14e1ec73.png)

最后执行下面命令就可以了

Start Standalone Server

bash ./bin/dolphinscheduler-daemon.sh start standalone-server

Stop Standalone Server

bash ./bin/dolphinscheduler-daemon.sh stop standalone-server

最后访问http://localhost:12345/dolphinscheduler/ui登录成功就算安装成功了

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4c2b566b771f41a894612f799cecc316.png)

###### 安装过程碰到问题:

通过文档和上面的操作启动的时候还是会报错,启动后去standalone-server/logs下面查看启动的日志会发现

![org.h2.Drive驱动配置对应的mysql](https://i-blog.csdnimg.cn/direct/d3a176e3e2994ba98a176f67e6c14de2.png)

这时候就需要修改standalone-server/conf 底下的 application.yaml文件

把原先的

```java

# datasource:

# driver-class-name: org.h2.Driver

# url: jdbc:h2:mem:dolphinscheduler;MODE=MySQL;DB_CLOSE_DELAY=-1;DATABASE_TO_LOWER=true

# username: sa

# password: ""

改成对应的mysql,

头部改成对应的

spring:

profiles:

active: mysql

jackson:

time-zone: UTC

date-format: "yyyy-MM-dd HH:mm:ss"

banner:

charset: UTF-8

sql:

init:

schema-locations: classpath:sql/dolphinscheduler_mysql.sql

datasource:

driver-class-name: com.mysql.cj.jdbc.Driver

url: jdbc:mysql://127.0.0.1:3380/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8

username: root

password: 334


```

如果还不行的话试下把底下的mysql配置也改一下改成对应的你的数据库还有一个就是libs底下复制mnysql驱动这几个

### seatunnel操作

操作安装文档步骤来就可以,我这边是seatunnel使用举个例子根据官方文档说明:在·/dolphinscheduler/bin/env/dolphinscheduler_env.sh 目录的文件下

```java

export SEATUNNEL_HOME=${SEATUNNEL_HOME:-/app01/seatuunel/apache-seatunnel-2.3.3}

export PATH=$SEATUNNEL_HOME/bin:$PATH

```

然后重启操作在工作流里

在流程定义里面选择数据集成的seatuunel如图:

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4be7a118b2f8488983881bf412816d0a.png)

部署方式要选择不然默认是使用clien命令如下语句

{SEATUNNEL_HOME}/bin/seatunnel.sh --config /tmp/dolphinscheduler/exec/process/root/115422800628448/115425147423552_1/2/3/seatunnel_2_3.conf --deploy-mode client

![在这里插入图片描述]

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/a9d5521d082849748cf7b76d4cc6aa24.png)

如下脚本本地上传到ftp的文件

```java

env {

parallelism = 1

job.mode = "BATCH"

}

source {

LocalFile {

path = "/data/FTP/sourceFile/source_data.txt"

field_delimiter = "\t"

row_delimiter = "\n"

file_format_type = "TEXT"

schema {

fields {

name = string

age = int

}

}

}

}

transform {

}

sink {

FtpFile {

host = "10.19.11.19"

port = 21

user = "ftpuser"

password = "xdjr0lxGu"

path = "/data/FTP/sourceFile/"

tmp_path = "/data/FTP/sourceFile/"

file_format_type = "TEXT"

field_delimiter = "\t"

row_delimiter = "\n"

sink_columns = ["name","age"]

custom_filename = true

file_name = "output_data.txt"

}

}

```

可以看到实现过程结果如下:

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4fa5a792ae4b42ba9b0c3909e6c23a9a.png)

如果有报错可以去工作流实例里面去查看日志详情。

#### 定时任务设置:

在工作流定义里面设置执行时间我是一分钟一次

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/811781ad06ee4cbd9a3301f5f59bcd77.png)

然后在点击定时上线就会生成一分钟一次的工作流实例

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/2baca948fc6f4b94a93e8cdfa37324fd.png)

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表