オープンソースのタスク スケジューリング プラットフォーム dolphinscheduler の導入と使用ガイド (未完成)

目次

イルカシュデュラーの調査

サポートされているタスクの種類:

1.1 dolphinsheduler クラスターのデプロイメント

1.1.1 必要な環境

1.1.2 dolphinshedulerのインストール

考えられるエラー: zk は正常です。一定時間が経過するとマスターまたはワーカーがハングアップします。

問題の原因

解決

1.1.3 リソースセンターの構成

1.2 パラメータ

1.2.1 タスクに表示されるすべてのパラメータ

1.2.2 組み込みパラメータ

1.2.3 グローバルパラメータ

1.2.4 ローカルパラメータ

考えられる問題: パラメータを取得できない

問題の原因

解決

1.2.5 パラメータの受け渡し

1.2.6 パラメータの優先順位

1.3 データソースセンター、リソースセンター、監視センター、セキュリティセンター

1.3.1 データソースセンター

(不完全) 1.3.2 リソースセンター

(未完成) 1.3.3 監視センター

1.3.4 セキュリティセンター

使いやすい 1.x dolphinsheduler

1.x.1 擬似クラスターモードのインストール

考えられるエラー (重大): 空のキー値マップを保存すると、ワークフローを編集できません

理由:

解決

考えられるエラー: chunjun タスクを保存できません

問題の原因

解決

考えられるエラー レポート: 同じ名前のクラスのエラー レポート

問題の原因

解決:

考えられるエラー (重大): ワークフローが停止した後は削除できず、ディスクがいっぱいになるまでログが繰り返しスワイプされます。

問題の原因

解決:

考えられるエラー: chunjun タスクは成功を示していますが、VM の初期化が送信されていません

問題の原因:

解決


イルカシュデュラーの調査

サポートされているタスクの種類:

タスクの種類

導入

レビュー

シェル

シェルスクリプト

ワーカーがタスクを実行すると、一時シェルスクリプトが生成され、テナントと同じ名前のLinuxユーザーを使用してスクリプトを実行します。

サブプロセス

サブプロセスノード

外部ワークフロー定義をノードとして実行します。

依存ストア型

依存関係チェックポイント

たとえば、プロセスAは昨日プロセスBが正常に実行されたことに依存しており、依存ノードは昨日プロセスBが正常に実行されたかどうかを確認します

手順

ストアド プロシージャ ノード

ストアド プロシージャを実行します。前提として、次のようなストアド プロシージャをデータベースに作成します。

CREATE PROCEDURE dolphinscheduler.test(in in1 INT、out out1 INT)

始める

       out1=in1 を設定します。

終わり

SQL

対応するSQLを実行する

データ ソースは「データ ソースの構成」で決定されます。現在サポートされているデータ ソースは、MySQL PostgreSQL Hive /Impala Spark clickhouse Oracle SQLserver 、 DB2 presto redshift athenaです。

スパーク

スパークアプリケーション

Worker は、2 つの異なるタイプのSparkコマンド送信タスクをサポートしています。

(1) スパークサブミットメソッド

(2) スパークSQLメソッド

MapReduce

MapReduceプログラム

ワーカーはHadoopコマンドhadoop jarを使用してタスクを送信します。

パイソン

Python脚本

ワーカーがタスクを実行すると、一時的なPythonスクリプトが生成され、テナントと同じ名前の Linuxユーザーを使用してスクリプトを実行します。

かなり

フリンクタスク

( 1 ) プログラムの種類がJava Scala 、またはPythonの場合ワーカーはFlinkコマンドを使用してタスクflink runを送信します

( 2 ) プログラム タイプがSQLの場合ワーカーはsql-client.shを使用してタスクを送信します。

HTTP

httpタスク

POSTGETなどの一般的なリクエスト タイプやhttpリクエスト検証などの機能もサポート

データX

DataXプログラム

DataXノードの場合ワーカーは${DATAX_HOME}/bin/datax.pyを実行して受信jsonファイルを解析します

ウェブソケットサービス

条件

条件ノード

上流タスクの実行状況に応じて、どの下流タスクを実行するかを決定します。現在、Conditions は複数の上流タスクをサポートしていますが、下流タスクは 2 つだけです。上流タスクの数が複数の場合、and および or 演算子を使用して複雑な上流依存関係を実現できます。

スイッチ

判定ノード

グローバル変数の値とユーザが記述した式の判定結果に応じて、該当する分岐を実行します。式はjavax.script.ScriptEngine.evalを使用して実行されます

シートンネル

SeaTunnelミッション タイプ

構成ファイルは、start-seatunnel-spark.shまたはstart-seatunnel-flink.shコマンドによって解析されます。

アマゾンEMR

Amazon EMRタスクタイプ

用于在AWS上操作EMR集群并执行计算任务后台使用 aws-java-sdk JSON参数转换为任务对象,提交到AWS,目前支持两种程序类型:

1RUN_JOB_FLOW

2ADD_JOB_FLOW_STEPS

Apache Zeppelin

Zeppelin任务类型

worker 执行该任务的时候,会通过Zeppelin Cient API触发Zeppelin Notebook Paragraph

Jupyter

Jupyter任务

需要在common.properties配置conda.path,用于创建并执行Jupyter类型任务。worker 执行该任务的时候,会通过papermill执行jupyter note

Hive CLI

hivesql任务

执行任务的worker会通过hive -e命令执行hive SQL脚本语句或者通过hive -f命令执行资源中心中的hive SQL文件

1Hive CLI任务插件直接连接HDFSHive Metastore来执行hive类型的任务,所以需要能够访问到对应的服务。在生产调度中,Hive CLI任务插件能够提供更可靠的稳定性。

2)使用Hive数据源的SQL插件不需要在worker节点上有相应的Hive jar包以及HiveHDFS的配置文件,而且支持 Kerberos认证。 但是在生产调度中,若调度压力很大,使用这种方式可能会遇到HiveServer2服务过载失败等问题。

Kubernetes

kubernetes任务

用于在kubernetes上执行一个短时和批处理的任务。worker最终会通过使用kubernetes client提交任务。

MLflow

用于管理机器学习的生命周期,包括实验、可再现性、部署和中心模型注册。

Openmldb

openmldb是开源机器学习数据库,可以连接OpenMLDB集群执行任务

DVC

机器学习版本管理系统

Dinky

Dinky任务

用于创建并执行Dinky类型任务以支撑一站式的开发、调试、运维 FlinkSQLFlink JarSQLworker 执行该任务的时候,会通过Dinky API触发Dinky 的作业

SageMaker

云机器学习平台

ChunJun

chunjun任务

数据同步任务

Pytorch

机器学习库

官方文档(https://dolphinscheduler.apache.org/zh-cn/docs/3.1.3/%E5%8A%9F%E8%83%BD%E4%BB%8B%E7%BB%8D_menu)

1.1 dolphinsheduler集群部署

1.1.1 需要的环境

(1)三台节点均需部署JDK(1.8+),并配置相关环境变量。
(2)需部署数据库,支持MySQL(5.7+)或者PostgreSQL(8.2.15+)。
(3)需部署Zookeeper(3.4.6+)。
(4)三台节点均需安装进程管理工具包psmisc

yum install psmisc

(5)保证三台节点可以互相免密ssh

6)需要在MySQLPostgreSQL上创建元数据库

(7)生产环境

CPU

内存

硬盘类型

网络

实例数量

4核+

8 GB+

SAS

千兆网卡

1+

以上建议配置为部署 DolphinScheduler 的最低配置,生产环境强烈推荐使用更高的配置,硬盘大小配置建议 50GB+ ,系统盘和数据盘分开

(8)DolphinScheduler正常运行提供如下的网络端口配置:

组件

默认端口

说明

MasterServer

5678

非通信端口,只需本机端口不冲突即可

WorkerServer

1234

非通信端口,只需本机端口不冲突即可

ApiApplicationServer

12345

提供后端通信端口

默认端口可以在安装后的application.yaml修改

1.1.2 dolphinsheduler安装

1)官网下载安装包(https://github.com/apache/dolphinscheduler/archive/refs/tags/3.1.3.tar.gz

或打包源码:

./mvnw clean install -Prelease -"Dmaven.test.skip=true"

默认zk3.8版本,实测3.6.4也可以运行,若想支持zk3.4在打包阶段需加参数

./mvnw clean install -Prelease -"Dmaven.test.skip=true" -"Dzk-3.4"

使用zk3.4参数打包时可能报错

定位源码

 

原因可能是zk3.4的包中缺少相关类,不过查看源码StringUtils仅使用了isEmpty()方法,完全可以用lang3的StringUtils替代

修改原引用为:

import org.apache.commons.lang3.StringUtils;

进行过任意修改源码的行为后记得运行mvn spotless:apply 检查格式,否则打包阶段会报错

注意windows下打包源码在安装时会提示类似无“/t”的报错(忘了截图了),这是因为.sh脚本文件在windows打包时为dos格式,可以下载命令yum –y dos2unix,使用dos2unix将脚本格式转为unix

2)上传至服务器后tar –zxvf解压

3)修改dolpinscheduler/bin/env目录下install_env.shdolphinscheduler_env.sh

因为部署脚本会通过 scp 的方式将安装需要的资源传输到各个机器上,所以这一步仅需要修改运行install.sh脚本的所在机器的配置即可。

4)初始化数据库

将与数据库版本匹配的mysql-connectorjar包复制到tools/libs

运行

sh tools/bin/upgrade-schema.sh 

(5)资源中心配置,详见1.1.3,若不进行配置正式使用时会显示储存未开启,资源中心功能无法使用

(6)执行安装文件,需要先启动zookeeper

sh dolphinscheduler/bin/install.sh

(7)查看前端界面

http://${apiServers}:12345/dolphinscheduler/ui 为web界面访问地址。默认的用户名和密码是 admin/dolphinscheduler123

可能的报错:zk正常,master或worker一段时间后挂掉

master或worker启动一段时间后挂掉,查看log显示zookeeper connect timeout: localhost:2181,但zookeeper集群在线

问题原因

网络或内存原因造成阻塞

解决办法

修改master-server/conf/application.yaml中的block-until-connected为6000ms

增加阻塞直到连接成功的等待时间

1.1.3 资源中心配置

① 资源中心通常用于上传文件、UDF 函数,以及任务组管理等操作。

② 资源中心可以对接分布式的文件存储系统,如Hadoop(2.6+)或者MinIO集群,也可以对接远端的对象存储,如AWS S3或者阿里云 OSS等。

③ 资源中心也可以直接对接本地文件系统。在单机模式下,您无需依赖Hadoop或S3一类的外部存储系统,可以方便地对接本地文件系统进行体验。

④ 除此之外,对于集群模式下的部署,您可以通过使用S3FS-FUSE将S3挂载到本地,或者使用JINDO-FUSE将OSS挂载到本地等,再用资源中心对接本地文件系统方式来操作远端对象存储中的文件。

1、对接本地文件系统

(1)配置common.properties

集群模式或者伪集群模式部署DolphinScheduler,需要配置以下文件:api-server/conf/common.properties和worker-server/conf/common.properties

(2)resource.storage.upload.base.path为资源目录的路径, 如resource.storage.upload.base.path=/dolphinscheduler-3.1.4。请确保部署 DolphinScheduler 的用户拥有读写权限,例如:当路径不存在时会自动创建文件夹

(3)修改resource.storage.type=HDFS和resource.hdfs.fs.defaultFS=file:///。

(4)修改resource.hdfs.root.user=user,user需要有在hdfs根目录创建目录的权限,我在这里使用root

(5)当resource.storage.upload.base.path=/dolphinscheduler-3.1.4且resource.hdfs.fs.defaultFS=file: hdfs://master:9000时,资源目录创建路径为hdfs://master:9000/dolphinscheduler-3.1.4/

(6)启动hdfs后再次点击创建文件夹成功创建

(7)如果 Hadoop 集群的 NameNode 配置了 HA 的话,需要开启 HDFS 类型的资源上传,同时需要将 Hadoop 集群下的 core-site.xmlhdfs-site.xml 复制到 worker-server/conf 以及 api-server/conf,非 NameNode HA 跳过次步骤。

2、对接分布式或远端对象存储

未尝试

1.2 参数

1.2.1 任务中可能出现的所有参数

任务参数

描述

任务名称

任务的名称,同一个工作流定义中的节点名称不能重复。

运行标志

标识这个节点是否需要调度执行,如果不需要执行,可以打开禁止执行开关。

描述

当前节点的功能描述。

任务优先级

worker线程数不足时,根据优先级从高到低依次执行任务,优先级一样时根据先到先得原则执行。

Worker分组

设置分组后,任务会被分配给worker组的机器机执行。若选择Default,则会随机选择一个worker执行。

任务组名称

任务资源组,未配置则不生效。

组内优先级

一个任务组内此任务的优先级。

环境名称

配置任务执行的环境。

失败重试次数

任务失败重新提交的次数,可以在下拉菜单中选择或者手动填充。

失败重试间隔

任务失败重新提交任务的时间间隔,可以在下拉菜单中选择或者手动填充。

CPU 配额

为执行的任务分配指定的CPU时间配额,单位为百分比,默认-1代表不限制,例如1个核心的CPU满载是100%,16个核心的是1600%。 task.resource.limit.state

最大内存

为执行的任务分配指定的内存大小,超过会触发OOM被Kill同时不会进行自动重试,单位MB,默认-1代表不限制。该功能由 task.resource.limit.state 控制。

超时告警

设置超时告警、超时失败。当任务超过"超时时长"后,会发送告警邮件并且任务执行失败。该功能由 task.resource.limit.state 控制。

资源

任务执行时所需资源文件

前置任务

设置当前任务的前置(上游)任务。

延时执行时间

任务延迟执行的时间,以分为单位

任务中可能出现的参数选项,任务不同参数也不同

1.2.2 内置参数

变量名

声明方式

含义

system.biz.date

${system.biz.date}

日常调度实例定时的定时时间前一天,格式为 yyyyMMdd

system.biz.curdate

${system.biz.curdate}

日常调度实例定时的定时时间,格式为 yyyyMMdd

system.datetime

${system.datetime}

日常调度实例定时的定时时间,格式为 yyyyMMddHHmmss

衍生内置参数

支持代码中自定义变量名,声明方式:${变量名}。可以是引用 "系统参数"

定义基准变量为 $[...],$[yyyyMMddHHmmss] 是可以任意分解组合的,比如:$[yyyyMMdd], $[HHmmss], $[yyyy-MM-dd] 等

也可以通过以下两种方式:

1、使用add_months()函数,该函数用于加减月份, 第一个入口参数为[yyyyMMdd],表示返回时间的格式 第二个入口参数为月份偏移量,表示加减多少个月

后 N 年:$[add_months(yyyyMMdd,12*N)]

前 N 年:$[add_months(yyyyMMdd,-12*N)]

后 N 月:$[add_months(yyyyMMdd,N)]

前 N 月:$[add_months(yyyyMMdd,-N)]

2、直接加减数字 在自定义格式后直接“+/-”数字

后 N 周:$[yyyyMMdd+7*N]

前 N 周:$[yyyyMMdd-7*N]

后 N 天:$[yyyyMMdd+N]

前 N 天:$[yyyyMMdd-N]

后 N 小时:$[HHmmss+N/24]

前 N 小时:$[HHmmss-N/24]

后 N 分钟:$[HHmmss+N/24/60]

前 N 分钟:$[HHmmss-N/24/60]

1.2.3 全局参数

全局参数是指针对整个工作流的所有任务节点都有效的参数,在工作流定义页面-保存中配置。

创建一个shell,内容为返回dt的值

在保存中创建全局变量

点击查看变量可以发现我们设置的参数

查看日志可以发现“当前日期加十天”可以被正常输出

1.2.4 本地参数

任务中可以设置的自定义参数

IN代表为局部参数,仅能在当前节点使用,OUT表示参数在下游使用

运行后发现

如果想用自定义参数而不是常量值来实现参数 export,并下游任务中使用它们,你可以在通过 setValue 和 自定义参数实现,当你想改变参数的值时可以直接改变 “自定义参数”模块中的值,这让程序更加容易维护。

①Shell 任务中使用语法

 echo "#{setValue(set_val_param=${val})}"

添加新的IN变量用于确认val输入值

添加OUT变量用于export本地参数set_val_param

如果想用 bash 变量而不是常量值 export 参数,并在下游任务中使用它们,你可以在通过 setValue 和 Bash 变量实现,它更灵活,例如你动态获取现有的本地 或 HTTP 资源获取设定变量。 可以使用类似的语法:

lines_num=$(wget https://raw.githubusercontent.com/apache/dolphinscheduler/dev/README.md -q -O - | wc -l | xargs)

echo "#{setValue(set_val_var=${lines_num})}"

可能出现的问题:参数无法获取到

实测在同一个任务中,既添加了使用setValue的0非常量参数,又添加了自定义常数参数,如下图,既定义了set_val_param=${param}、set_dt_param=${dt}又定义了flow这样一个常数参数

可能导致在后续的调用时取不到flow的值

 

问题原因

未知

解决方法

将常数与非常数的定义分开,在下游任务中均可调用常数参数了

1.2.5 参数传递

DolphinScheduler 提供参数间相互引用的能力,包括:本地参数引用全局参数、上下游参数传递。

本地任务引用全局参数的前提是,你已经定义了全局参数,使用方式和本地参数中的使用方式类似,但是参数的值需要配置成全局参数中的 key,例如上述例子中的dt

echo '#{setValue(set_dt_param=${dt})}'

在下游中可以通过调用set_dt_param获得全局变量的值

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

Shell

SQL

Procedure

Python

上游传递的参数可以在下游节点中被更新,

如果定义了同名的传递参数,上游节点的参数将被覆盖。

注:若节点之间没有依赖关系,则局部参数无法通过上游传递。

1.2.6 参数优先级

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

全局参数:在工作流保存页面定义时定义的变量

上游任务传递的参数:上游任务传递过来的参数

本地参数:节点的自有变量,用户在“自定义参数”定义的变量,并且用户可以在工作流定义时定义该部分变量的值

因为参数的值存在多个来源,当参数名相同时,就需要会存在参数优先级的问题。DolphinScheduler 参数的优先级从高到低为:

本地参数 > 上游任务传递的参数 > 全局参数

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

① 下游节点会优先使用值为非空的参数

② 如果存在多个值为非空的参数,则按照上游任务的完成时间排序,选择完成时间最早的上游任务对应的参数

1.3 数据源中心、资源中心、监控中心、安全中心

1.3.1 数据源中心

(1)数据源中心配置的数据源可以直接被任务中的SQL任务调用,换句话说,SQL任务仅支持数据源中心可以配置的数据源

(2)目前支持的数据源有:MySQL、PostgreSQL、Hive/Impala、Spark、clickhouse、Oracle、SQLserver、DB2、presto、redshift、athena

(3)数据源编写与其余同种类型软件都相似,不详细写配置了 ,值得注意的是如果希望在同一个会话中执行多个 HIVE SQL,可以修改配置文件 common.properties 中的配置,设置 support.hive.oneSession = true。HIVE SQL support.hive.oneSession 默认值为 false,多条 SQL 在不同的会话中运行

(未完)1.3.2 资源中心

1、文件管理

创建文件前需要给当前用户配置租户

目前支持的文件类型有:txt、log、sh、bat、conf、cfg、py、java、sql、xml、hql、properties、json、yml、yaml、ini、js

按照3.1.3配置好后便可以使用资源中心功能,普通用户创建的文件管理员也可以使用,管理员用户创建的文件夹只有管理员有权使用,

管理员在安全中心-用户管理界面可以将其他用户创建的资源授权给普通用户,所有用户创建文件时不允许创建同目录下同名文件夹或同名文件

定义shell任务,可以运行定义好的shtest.sh,注意在引用时写全资源所在路径

2、UDF管理

主要用来上传hive的UDF函数,且目前只支持hiveUDF

3、任务组管理

任务组主要用于控制任务实例并发,旨在控制其他资源的压力(也可以控制 Hadoop 集群压力,不过集群会有队列管控)。可在新建任务定义时,配置对应的任务组,并配置任务在任务组内运行的优先级

【任务组名称】:任务组在被使用时显示的名称

【项目名称】:任务组作用的项目,该项为非必选项,如果不选择,则整个系统所有项目均可使用该任务组。

【资源容量】:允许任务实例并发的最大数量

创建任务组

【任务组名称】:任务组配置页面显示的任务组名称,这里只能看到该项目有权限的任务组(新建任务组时选择了该项目),或作用在全局的任务组(新建任务组时没有选择项目)

【组内优先级】:在出现等待资源时,优先级高的任务会最先被 master 分发给 worker 执行,该部分数值越大,优先级越高。

实现逻辑:

① Master 在分发任务时判断该任务是否配置了任务组

② 如果任务没有配置,则正常抛给 worker 运行

③ 如果配置了任务组,在抛给 worker 执行之前检查任务组资源池剩余大小是否满足当前任务运行

④ 如果满足资源,继续运行

⑤ 如果不满足则退出任务分发,等待其他任务结束唤醒

⑥ 当使用任务组资源的任务结束运行后,会释放任务组资源,释放后会检查当前任务组是否有任务等待

⑦ 如果有,则标记优先级最高的任务可以运行,并新建一个可以执行的event。该event中存储着被标记并且可以获取资源的任务id

⑧ 获取任务组资源然后运行。

(未完)1.3.3 监控中心

主要是 master、worker、database 的使用率等信息。

统计管理中几个参数为元数据库中的数据

待执行命令数:统计 t_ds_command 表的数据

执行失败的命令数:统计 t_ds_error_command 表的数据

不过数据过于简单,不如看Grafana指标

1.3.4 安全中心

1、租户管理

租户对应的是 Linux 的用户,用于 worker 提交作业所使用的用户。如果 linux 没有这个用户,则会导致任务运行失败。

可以通过修改 worker.properties 配置文件中参数 worker.tenant.auto.create=true 实现当 linux 用户不存在时自动创建该用户。worker.tenant.auto.create=true 参数会要求 worker 可以免密运行 sudo 命令

【操作系统队列】:Linux上 的用户,唯一,不能重复

创建租户

【队列】:为yarn队列管理中创建的队列,后续会提到

2、用户管理

用户分为管理员用户和普通用户

管理员有授权和用户管理、创建项目和工作流定义等权限。

普通用户可以创建项目和对工作流定义的创建,编辑,执行等操作。

注意:如果该用户切换了租户,则该用户所在租户下所有资源将复制到切换的新租户下。

创建普通用户

绑定租户,新用户包括管理员用户都必须绑定租户后才能运行工作流

普通用户的安全中心只有令牌管理一项功能

权限管理

管理员用户可以对普通用户授权,权限包括项目、资源、数据源、UDF函数和K8S命名空间

假如管理员A创建了项目a,普通用户B1创建了项目b1,普通用户B2创建了项目b2,那么在A的项目列表中会有项目a、b1、b2;B1的项目列表中有b1;B2的项目列表中有b2。

既管理员用户拥有本身和所有普通用户创建项目的权限,普通用户仅有自己创建的项目的权限。而授权可以将任何项目权限赋予普通用户,比如将a,b2赋予B1,则B1可以编辑a、b1、b2项目。

其他的资源、数据源等同理

3、警告组管理

创建警告组需要先创建警告实例,见4

4、警告实例管理

例如QQ邮箱,需要先去设置中开启SMTP服务,邮箱如何开启SMTP可以自行搜索

5、worker分组管理

6、yarn队列管理

此处创建出的队列,可供后续任务进行选择。在dolphinscheduler中创建队列,并不会影响到 Yarn 调度器的队列配置。

7、环境管理

8、集群管理

1.x-1各任务类型详解

1.x dolphinsheduler简单使用

1.x.1 伪集群模式安装

官网文档中推荐内存大于8g,测试环境不符合要求因此使用伪集群模式试用功能

伪集群模式配置只与集群模式有细微差别

① 修改dolphinscheduler/bin/env/install_env.sh

先前配置好的dolphinscheduler_env.sh可不做修改,配置方法见1.1.2(3),并且保证mysql中数据库已经创建完毕

将之前指定的各节点均指定master即可

② 启动zookeeper

③ 然后sh dolphinscheduler/bin/install.sh安装伪集群模式

④ 全局命令

start-all.sh启动所有服务

stop-all.sh关闭所有服务

status-all.sh查看所有服务状态

dolphinscheduler-daemon.sh 单独操作某个服务,例如:

sh dolphinscheduler-daemon.sh start/stop/status master-server

⑤ 同样的方式——见1.1.2(6)——登入web界面,

创建项目

创建任务组

创建租户,租户为shell等命令在集群上提交运行的用户,测试可以直接使用root

绑定租户

新建工作流,拖动新建任务

编辑任务

datax为python2版本,注意目录下要有到python2的链接

可能出现的报错(严重):保存空key值Map导致工作流无法编辑

com.fasterxml.jackson.databind.JsonMappingException: Null key for a Map not allowed in JSON (use a converting NullKeySerializer?) (through reference chain: org.apache.dolphinscheduler.api.utils.Result["data"]->org.apache.dolphinscheduler.dao.entity.DagData["taskDefinitionList"]->java.util.ArrayList[2]->org.apache.dolphinscheduler.dao.entity.TaskDefinitionLog["taskParamMap"])

原因:

类似github这个issue

[BUG] 编辑过程时不显示任何内容 ·问题 #12525 ·阿帕奇/海豚调度器 (github.com)

解决办法

目前没有好的解决办法,复制先前工作流实例的内容,删除工作流重新编写

可能出现的报错:chunjun任务无法保存

在任务流包含chunjun任务时无法保存,并提示参数无效

截至2023.02所有版本chunjun任务保存均异常,等待官方后续更新,下文有临时解决办法

[bug] [task-chunjun] can not submit successfully cause check err · Issue #13108 · apache/dolphinscheduler (github.com)

问题原因

chunjun功能上线时间短,源码逻辑可能有问题,customConfig默认为false导致任务无法创建

[错误][UI] 创建工作流包含春君节点失败 ·问题 #11321 ·阿帕奇/海豚调度器 (github.com)

[fix-11321][ui] fix create workflow contains chunjun node failed · jkhhuse/dolphinscheduler@5062324 (github.com)

解决办法

方法1、重新编译

(1)修改dolphinscheduler-ui/src/views/projects/task/components/node/tasks/use-chunjun.ts的customConfig为true

[fix-11321][ui] fix create workflow contains chunjun node failed · jkhhuse/dolphinscheduler@5062324 (github.com)

(2)解压安装包,启动zookeeper

(3)复制原本配置好的install_env.sh,dolphinscheduler_env.sh到新bin/env下,执行bin/install_all.sh

打包步骤见1.1.2(1)

运行结束后可以在目录dolphinscheduler-dist/target下找到压缩包

方法2、直接修改编译后的js文件

经过测试,编译后的use-chunjun.js所在路径有两个,

(1)ui文件夹下的 dolphinscheduler/ui/assets/detail-*.js

(2)api文件夹下的 api-server/ui/assets/detail-*.js

detail.js每次编译后缀都不一样,一共只有三个文件,可以依次Ctrl+F

修改完成后按步骤重启dolphinscheduler

进入前端界面后在工作流中创建chunjun任务可以正常保存

点击保存发现保存成功

可能出现的报错:重名class报错

non-compatible bean definition of same name

报错日志

org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'registryClient' for bean class [org.apache.dolphinscheduler.registry.api.RegistryClient] conflicts with existing, non-compatible bean definition of same name and class [org.apache.dolphinscheduler.service.registry.RegistryClient]

问题原因

由于之前版本未删除,就将新版本安装到源路径下,两个版本间存在相同名称的class在不同的包中就会出现同名报错

解决办法:

彻底删除过去版本后再install.sh新版本

可能出现的报错(严重):工作流停止后无法删除,log重复刷屏直至磁盘存满

[ERROR] 2023-02-09 10:53:38.955 +0800 org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteRunnable:[704] - [WorkflowInstance-0][TaskInstance-0] - Start workflow error

java.lang.NullPointerException: null

    at java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1011)

    at java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:1006)

    at org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteRunna

问题原因

编写工作流后执行,失败后,更改任务的信息,再上线,执行,出现上面错误。

以上方法也不能完全复现,在任务状态为正在执行时点击停止就有概率触发,频繁地重复更改、上下线同一个任务或内存不足等有可能提高该bug几率。

以下issue也是相似问题,但都没有得到解决

[Bug] [Worker] concurrent task response occasional cause status error · Issue #13409 · apache/dolphinscheduler (github.com)(最相似的原因)

[Bug] [dolphinscheduler master] Infinite loop process_instance when status is prepare to stop · Issue #12440 · apache/dolphinscheduler (github.com)

[Bug] [Master] Stopping a workflow does not update task status correctly · Issue #13244 · apache/dolphinscheduler (github.com)

解决办法:

方法1、建议定期备份元数据库的表,最快最彻底解决这个报错的办法是回滚

方法2、或是修改元数据表中相关实例的状态

select t1.task_code,t1.state,t2.state

from

t_ds_task_instance t1

left join

t_ds_process_instance t2

on t1.process_instance_id = t2.id

where t1.task_code='${your_error_task_code}'

update state=7

其中工作流实例t_ds_process_instance,一个工作流实例对应一个或多个任务实例t_ds_task_instance,state

两种方法都不是最佳解决办法,需等待官方版本更新或自行研究修改源码相关逻辑

可能出现的报错:chunjun任务显示成功但并没被提交  initialization of VM

chunjun任务可以正常提交但并不会启动chunjun,显示initialization of VM

问题原因:

正常任务流程:dolphin点击运行->新建临时路径->在临时路径生成任务->执行任务->更新任务pid->删除临时路径

报错流程:dolphin点击运行->新建临时路径->在临时路径生成任务->更新任务pid->删除临时路径->执行任务

由于pid过早更新导致临时任务还没能运行就被标记为运行成功,由于执行任务时任务所在路径已经被删除,在已删除目录下运行则报initialization of VM

chunjun任务提交时生成的临时目录与临时任务如下所示

${CHUNJUN_HOME}/bin/start-chunjun -mode yarn-per-job -jobType sync -job /tmp/dolphinscheduler/exec/process/root/8511129061728/8655529352544_8/55/112/55_112_job.json -chunjunDistDir ${CHUNJUN_HOME}/chunjun-dist -flinkConfDir ${FLINK_HOME}/conf -flinkLibDir ${FLINK_HOME}/lib -hadoopConfDir ${HADOOP_HOME}/etc/hadoop

解决办法

在3.1.4版本已解决上述问题

安装包可能没有更新,请下载源码打包,打包步骤见1.1.2(1)

[Improvement][worker] task instance's pid need to be insert to DB during running · Issue #13201 · apache/dolphinscheduler (github.com)

おすすめ

転載: blog.csdn.net/weixin_44382736/article/details/129099368