DolphinScheduler部署及使用

工作流任务调度系统:Apache DolphinScheduler

DolphoinScheduler 1.3.2 已经发布许久,相比于文中的 1.2.0 版本新增了许多特性,比如 支持 sqoop ,优化界面 UI 等。
DolphoinScheduler 1.3.2 详细文档请移步: https://www.yuque.com/docs/share/454e9a42-b6c7-44b2-9d29-1d5795199456?# 《DolphinScheduler - 1.3.2 Document》
关于 1.3.2 的部署,建议参考文档中源码编译的方式进行部署

一、文档说明

1.1 DolphinScheduler 说明

Apache DolphinScheduler 是一个分布式去中心化,易扩展的可视化 DAG 工作流任务调度系统。
致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用。

1.2 相关网址

官网:

https://dolphinscheduler.apache.org/zh-cn/index.html

Git 地址:

https://github.com/apache/incubator-dolphinscheduler

系统架构设计:

https://dolphinscheduler.apache.org/zh-cn/blog/architecture-design.html

FAQ:

https://dolphinscheduler.apache.org/zh-cn/docs/faq.html

1.3 名词解释

  • MasterServer

MasterServer采用分布式无中心设计理念,MasterServer主要负责 DAG 任务切分、任务提交监控,并同时监听其它MasterServer和WorkerServer的健康状态。 MasterServer服务启动时向Zookeeper注册临时节点,通过监听Zookeeper临时节点变化来进行容错处理。 MasterServer基于netty提供监听服务。

该服务内主要包含:
Distributed Quartz分布式调度组件,主要负责定时任务的启停操作,当quartz调起任务后,Master内部会有线程池具体负责处理任务的后续操作
MasterSchedulerThread是一个扫描线程,定时扫描数据库中的 command 表,根据不同的命令类型进行不同的业务操作
MasterExecThread主要是负责DAG任务切分、任务提交监控、各种不同命令类型的逻辑处理
MasterTaskExecThread主要负责任务的持久化

  • WorkerServer

WorkerServer也采用分布式无中心设计理念,WorkerServer主要负责任务的执行和提供日志服务。 WorkerServer服务启动时向Zookeeper注册临时节点,并维持心跳。 Server基于netty提供监听服务.

该服务包含:
FetchTaskThread主要负责不断从Task Queue中领取任务,并根据不同任务类型调用TaskScheduleThread对应执行器。
LoggerServer是一个RPC服务,提供日志分片查看、刷新和下载等功能

  • ZooKeeper

ZooKeeper服务,系统中的MasterServer和WorkerServer节点都通过ZooKeeper来进行集群管理和容错。另外系统还基于ZooKeeper进行事件监听和分布式锁。 我们也曾经基于Redis实现过队列,不过我们希望DolphinScheduler依赖到的组件尽量地少,所以最后还是去掉了Redis实现。

  • Task Queue

提供任务队列的操作,目前队列也是基于Zookeeper来实现。由于队列中存的信息较少,不必担心队列里数据过多的情况,实际上我们压测过百万级数据存队列,对系统稳定性和性能没影响。

  • Alert

提供告警相关接口,接口主要包括告警两种类型的告警数据的存储、查询和通知功能。其中通知功能又有邮件通知和SNMP(暂未实现)两种。

  • API

API接口层,主要负责处理前端UI层的请求。该服务统一提供RESTful api向外部提供请求服务。 接口包括工作流的创建、定义、查询、修改、发布、下线、手工启动、停止、暂停、恢复、从该节点开始执行等等。

  • UI

系统的前端页面,提供系统的各种可视化操作界面,详见https://dolphinscheduler.apache.org/zh-cn/docs/user_doc/system-manual.html部分。
DolphinScheduler官方网站

  • DAG: 全称 Directed Acyclic Graph,简称 DAG。工作流中的 Task
    任务以有向无环图的形式组装起来,从入度为零的节点进行拓扑遍历,直到无后继节点为止。
  • 流程定义:通过拖拽 任务节点 并建立 任务节点的关联 所形成的 可视化DAG
  • 流程实例:流程定义的实例化,可以通过手动启动或定时调度生成,流程定义每运行一次,产生一个流程实例
  • 任务实例:流程定义 中 任务节点的实例化,标识着具体的 任务执行状态
  • 任务类型:目前支持有SHELL、SQL、SUB_PROCESS(子流程)、PROCEDURE、MR、SPARK、PYTHON、DEPENDENT(依赖),同时计划支持动态插件扩展,注意:其中子
    SUB_PROCESS 也是一个单独的流程定义,是可以单独启动执行的
  • 调度方式:系统支持基于 cron 表达式的定时调度和手动调度。
  • 命令类型支持:启动工作流、从当前节点开始执行、恢复被容错的工作流、恢复暂停流程、从失败节点开始执行、补数、定时、重跑、暂停、停止、恢复等待线程。其中
    恢复被容错的工作流 和 恢复等待线程 两种命令类型是由调度内部控制使用,外部无法调用
  • 定时调度:系统采用 quartz 分布式调度器,并同时支持 cron 表达式可视化的生成
  • 依赖:系统不单单支持 DAG 简单的前驱和后继节点之间的依赖,同时还提供任务依赖节点,支持流程间的自定义任务依赖
  • 优先级 :支持流程实例和任务实例的优先级,如果流程实例和任务实例的优先级不设置,则默认是先进先出
  • 邮件告警:支持 SQL任务 查询结果邮件发送,流程实例运行结果邮件告警及容错告警通知
  • 失败策略:对于并行运行的任务,如果有任务失败,提供两种失败策略处理方式,继续 是指不管并行运行任务的状态,直到流程失败结束。结束
    是指一旦发现失败任务,则同时Kill掉正在运行的并行任务,流程失败结束
  • 补数:补历史数据,支持 区间并行和串行 两种补数方式
  • 元数据解释
    Mysql核心表概览
表名表信息
t_ds_access_token访问ds后端的token
t_ds_alert告警信息
t_ds_alertgroup告警组
t_ds_command执行命令
t_ds_datasource数据源
t_ds_error_command错误命令
t_ds_process_definition流程定义
t_ds_process_instance流程实例
t_ds_project项目
t_ds_queue队列
t_ds_relation_datasource_user用户关联数据源
t_ds_relation_process_instance子流程
t_ds_relation_project_user用户关联项目
t_ds_relation_resources_user用户关联资源
t_ds_relation_udfs_user用户关联UDF函数
t_ds_relation_user_alertgroup用户关联告警组
t_ds_resources资源文件
t_ds_schedules流程定时调度
t_ds_session用户登录的session
t_ds_task_instance任务实例
t_ds_tenant租户
t_ds_udfsUDF资源
t_ds_user用户
t_ds_versionds版本信息

1.4 DolphinScheduler 架构设计

  • 系统架构图

在这里插入图片描述

  • 启动流程活动图
    在这里插入图片描述

1.4.1 MasterServer

MasterServer 采用分布式无中心设计理念,MasterServer 主要负责 DAG 任务切分、任务提交监控,并同时监听其它 MasterServer 和 WorkerServer 的健康状态。 MasterServer 服务启动时向 Zookeeper 注册临时节点,通过 监听 Zookeeper 临时节点 变化来进行容错处理。
该服务内主要包含:

  • Distributed Quartz 分布式调度组件,主要负责 定时任务的启停 操作,当 quartz 调起任务后,Master
    内部会有线程池具体负责处理任务的后续操作
  • MasterSchedulerThread 是一个扫描线程,定时扫描数据库中的 command 表,根据不同的命令类型进行不同的业务操作
  • MasterExecThread 主要是负责 DAG任务切分、任务提交监控、各种不同命令类型的逻辑处理
  • MasterTaskExecThread 主要负责任务的持久化

1.4.2 WorkerServer

WorkerServer 也采用分布式无中心设计理念,WorkerServer 主要负责 任务的执行和提供日志服务。WorkerServer 服务启动时向 Zookeeper 注册临时节点,并维持心跳。
该服务包含:

  • FetchTaskThread 主要负责不断 从 Task Queue
    中领取任务,并根据不同任务类型调用TaskScheduleThread 对应执行器。
  • LoggerServer 是一个RPC服务,提供日志分片查看、刷新和下载等功能

1.4.3 ZooKeeper

ZooKeeper 服务,系统中的 MasterServer 和 WorkerServer 节点都通过 ZooKeeper 来进行 集群管理和容错。另外系统还基于 ZooKeeper 进行 事件监听和分布式锁。 我们也曾经基于Redis实现过队列,不过我们希望 DolphinScheduler 依赖到的组件尽量地少,所以最后还是去掉了 Redis 实现。

1.4.4 Task Queue

提供 任务队列 的操作,目前队列也是基于 Zookeeper 来实现。由于队列中存的信息较少,不必担心队列里数据过多的情况,实际上我们压测过百万级数据存队列,对系统稳定性和性能没影响。

1.4.5 Alert

提供 告警相关 接口,接口主要包括告警两种类型的告警数据的存储、查询和通知功能。其中通知功能又有邮件通知和SNMP(暂未实现)两种。

1.4.6 API

API接口层,主要负责 处理前端UI层的请求。该服务统一提供 RESTful api 向外部提供请求服务。 接口包括工作流的创建、定义、查询、修改、发布、下线、手工启动、停止、暂停、恢复、从该节点开始执行等等。

1.4.7 UI

系统的前端页面,提供系统的各种可视化操作界面。

二、集群规划

2.1 集群配置

2.2 软件版本

软件版本
CDHCloudera 6.2.0
dolphinscheduler1.2.0

2.3 集群规划

注:

  • 以下所有节点均已部署 CDH 版本大数据相关组件。
  • 若为 Apache 版本,则需要将大数据组件的环境变量设为全局,或者在各个租户下添加环境变量和线上环境的配置参数,防止出现 sudo -u
    $tenant 无法调用大数据组件的情况。
hostnameMasterServerWorkerServer/LoggerServerAlertServerApiServerUI
10.30.64.240
10.30.64.241
10.30.64.242

三、环境准备

3.1 基础软件准备(必装项请自行安装)

Mysql (5.5+) : 必装
JDK (1.8+) : 必装
ZooKeeper (3.4.6+) :必装
Hadoop (2.6+) :选装, 如果需要使用到资源上传功能,MapReduce任务提交则需要配置Hadoop(上传的资源文件目前保存在Hdfs上)
Hive(1.2.1) : 选装,hive任务提交需要安装
Spark (1.x,2.x) : 选装,Spark任务提交需要安装
PostgreSQL (8.2.15+) : 选装,PostgreSQL PostgreSQL存储过程需要安装
注意:DolphinScheduler 本身不依赖 Hadoop、Hive、Spark、PostgreSQL,仅是会调用他们的 Client,用于对应任务的运行。

3.2 pip、kazoo 安装

在主服务器(下发DolphinScheduler的机器)上执行以下操作:

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo python get-pip.py
pip --version
pip install kazoo

3.3 创建部署用户

在所有部署服务器上创建部署用户,并配置 sudo 权限(worker 服务是以 sudo -u {linux-user} 方式来执行作业)

# 创建部署用户
userdel -r dscheduler 
useradd dscheduler && echo dscheduler | passwd --stdin dscheduler
# 赋予 sudo 权限
chmod 640 /etc/sudoers
vim /etc/sudoers
# 大概在100行,在root下添加如下
dscheduler  ALL=(ALL)       NOPASSWD: NOPASSWD: ALL
# 并且需要注释掉 Default requiretty 一行。如果有则注释,没有没有跳过
#Default requiretty

3.4 对部署用户配置免密

dolphinscheduler 一键部署原理:在 主机器(下载安装包的机器) 修改好配置文件,通过 scp 方式将后端安装包发送到各个机器,并通过 ssh 方式在部署机器上启动相关服务。故此处,需要给 主机器上的 部署用户(dscheduler) 配置到 各个服务器的部署用户(dscheduler) 的免密权限。

su - dscheduler 
ssh-keygen -t rsa
cd ~/.ssh && cp id_rsa.pub authorized_keys
chmod 700 authorized_keys
#ssh-copy-id hostname
ssh-copy-id localhost

3.5 dolphinscheduler 安装包下载

在主服务器上执行以下操作:

# 创建安装目录
#sudo mkdir /u01/dolphinscheduler && sudo chown -R dscheduler:dscheduler /u01/dolphinscheduler && sudo ln -s /u01/dolphinscheduler /opt/dolphinscheduler
sudo mkdir /opt/dolphinscheduler && sudo chown -R dscheduler:dscheduler /opt/dolphinscheduler 

# 下载后端安装包(dolphinscheduler-backend)
wget http://mirror.bit.edu.cn/apache/incubator/dolphinscheduler/1.2.0/apache-dolphinscheduler-incubating-1.2.0-dolphinscheduler-backend-bin.tar.gz -P /opt/dolphinscheduler
# 下载前端安装包(dolphinscheduler-ui)
wget http://mirror.bit.edu.cn/apache/incubator/dolphinscheduler/1.2.0/apache-dolphinscheduler-incubating-1.2.0-dolphinscheduler-front-bin.tar.gz -P /opt/dolphinscheduler

四、软件部署

4.1 为 dolphinscheduler 创建 Mysql 数据库

CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'dscheduler'@'10.10.7.%' IDENTIFIED BY 'Ds@12345';
#GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'dscheduler'@'10.158.1.%' IDENTIFIED BY 'Ds@12345';
#drop user dscheduler@'%';
flush privileges;

4.2 解压 dolphinscheduler 安装包

4.2.1 dolphinscheduler-backend

cd /opt/dolphinscheduler && tar -zxf apache-dolphinscheduler-incubating-1.2.0-dolphinscheduler-backend-bin.tar.gz
ln -s apache-dolphinscheduler-incubating-1.2.0-dolphinscheduler-backend-bin dolphinscheduler-backend

# 目录介绍
cd dolphinscheduler-backend && tree -L 1
.
├── bin           # 基础服务启动脚本
├── conf          # 项目配置文件
├── DISCLAIMER-WIP# DISCLAIMER文件
├── install.sh    # 一键部署脚本
├── lib           # 项目依赖jar包,包括各个模块jar和第三方jar
├── LICENSE       # LICENSE文件
├── licenses      # 运行时license
├── NOTICE        # NOTICE文件
├── script        # 集群启动、停止和服务监控启停脚本
└── sql           # 项目依赖sql文件

4.2.2 dolphinscheduler-ui

cd /opt/dolphinscheduler && tar -zxf apache-dolphinscheduler-incubating-1.2.0-dolphinscheduler-front-bin.tar.gz
ln -s apache-dolphinscheduler-incubating-1.2.0-dolphinscheduler-front-bin dolphinscheduler-front

4.3 dolphinscheduler-backend 部署

4.3.1 数据库配置

1.修改配置文件

vim /opt/dolphinscheduler/dolphinscheduler-backend/conf/application-dao.properties
 # postgre
 #spring.datasource.driver-class-name=org.postgresql.Driver
 #spring.datasource.url=jdbc:postgresql://192.168.xx.xx:5432/dolphinscheduler
 # mysql
 spring.datasource.driver-class-name=com.mysql.jdbc.Driver
 spring.datasource.url=jdbc:mysql://10.10.7.209:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8
 spring.datasource.username=dscheduler
 spring.datasource.password=Ds@12345

2.添加 mysql 驱动

 cp /usr/share/java/mysql-connector-java.jar /opt/dolphinscheduler/dolphinscheduler-backend/lib
 或
 cd /opt/dolphinscheduler && wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.46.tar.gz
 tar zxvf mysql-connector-java-5.1.46.tar.gz
 cp mysql-connector-java-5.1.46/mysql-connector-java-5.1.46-bin.jar /opt/dolphinscheduler/dolphinscheduler-backend/lib

4.3.2 初始化数据库

sh /opt/dolphinscheduler/dolphinscheduler-backend/script/create-dolphinscheduler.sh
# create dolphinscheduler success -> 表示数据库初始化成功

4.3.3 修改环境变量配置

vim /opt/dolphinscheduler/dolphinscheduler-backend/conf/env/.dolphinscheduler_env.sh
# ==========
# CDH 版
# ==========
export HADOOP_HOME=/opt/cloudera/parcels/CDH/lib/hadoop
export HADOOP_CONF_DIR=/opt/cloudera/parcels/CDH/lib/hadoop/etc/hadoop
export SPARK_HOME1=/opt/cloudera/parcels/CDH/lib/spark
export SPARK_HOME2=/opt/cloudera/parcels/CDH/lib/spark
export PYTHON_HOME=/usr/bin/python
export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
export HIVE_HOME=/opt/cloudera/parcels/CDH/lib/hive
export FLINK_HOME=/opt/soft/flink
export PATH=$HADOOP_HOME/bin:$SPARK_HOME1/bin:$SPARK_HOME2/bin:$PYTHON_HOME:$JAVA_HOME/bin:$HIVE_HOME/bin:$PATH:$FLINK_HOME/bin:$PATH

4.3.4 修改集群部署配置

cp /opt/dolphinscheduler/dolphinscheduler-backend/install.sh /opt/dolphinscheduler/dolphinscheduler-backend/install.sh_b
vim /opt/dolphinscheduler/dolphinscheduler-backend/install.sh
# 注:以下参数仅为核心部分配置,并未包含 install.sh 脚本全部内容
......................................................
source ${workDir}/conf/config/run_config.conf
source ${workDir}/conf/config/install_config.conf

# 1. 数据库配置
# ${installPath}/conf/quartz.properties
#dbtype="postgresql"
dbtype="mysql"
dbhost="10.10.7.209"
dbname="dolphinscheduler"
username="dscheduler"
# Note: if there are special characters, please use the \ transfer character to transfer
passowrd="Ds@12345"

# 2. 集群部署环境配置
# ${installPath}/conf/config/install_config.conf
installPath="/opt/dolphinscheduler/dolphinscheduler-agent"
# deployment user
# Note: the deployment user needs to have sudo privileges and permissions to operate hdfs. If hdfs is enabled, the root directory needs to be created by itself
deployUser="dscheduler"
# zk cluster
zkQuorum="test01:2181,test02:2181,test03:2181"
# install hosts
ips="test01,test02,test03"

# 3. 各节点服务配置
# ${installPath}/conf/config/run_config.conf
# run master machine
masters="test02,test03"
# run worker machine
workers="test01,test02,test03"
# run alert machine
alertServer="test03"
# run api machine
apiServers="test03"


# 4. alert 配置
# ${installPath}/conf/alert.properties
# 若公司未开启 SSL 服务,可设置: mailServerPort="25" ; starttlsEnable="false" ; sslEnable="false"
# mail protocol
mailProtocol="SMTP"
# mail server host
mailServerHost="smtp.sohh.cn"
# mail server port
mailServerPort="465"
# sender
mailSender="dashuju@sohh.cn"
# user
mailUser="dashuju@sohh.cn"
# sender password
mailPassword="dashuju@123"
# TLS mail protocol support
starttlsEnable="false"
sslTrust="*"
# SSL mail protocol support
# note: The SSL protocol is enabled by default. 
# only one of TLS and SSL can be in the true state.
sslEnable="true"
# download excel path
xlsFilePath="/tmp/xls"
# Enterprise WeChat Enterprise ID Configuration
enterpriseWechatCorpId="xxxxxxxxxx"
# Enterprise WeChat application Secret configuration
enterpriseWechatSecret="xxxxxxxxxx"
# Enterprise WeChat Application AgentId Configuration
enterpriseWechatAgentId="xxxxxxxxxx"
# Enterprise WeChat user configuration, multiple users to , split
enterpriseWechatUsers="xxxxx,xxxxx"
# alert port
alertPort=7789

# 5. 开启监控自启动脚本
# 控制是否启动自启动脚本(监控master,worker状态,如果掉线会自动启动) 
# whether to start monitoring self-starting scripts
monitorServerState="true"

# 6. 资源中心配置
# ${installPath}/conf/common/ 中
# resource Center upload and select storage method:HDFS,S3,NONE
resUploadStartupType="HDFS"
# if resUploadStartupType is HDFS,defaultFS write namenode address,HA you need to put core-site.xml and hdfs-site.xml in the conf directory.
# if S3,write S3 address,HA,for example :s3a://dolphinscheduler,
# Note,s3 be sure to create the root directory /dolphinscheduler
defaultFS="hdfs://stcluster:8020"

# if S3 is configured, the following configuration is required.
s3Endpoint="http://192.168.xx.xx:9010"
s3AccessKey="xxxxxxxxxx"
s3SecretKey="xxxxxxxxxx"

# resourcemanager HA configuration, if it is a single resourcemanager, here is yarnHaIps=""
yarnHaIps="test03,test02"
# if it is a single resourcemanager, you only need to configure one host name. If it is resourcemanager HA, the default configuration is fine.
singleYarnIp="ark1"

# hdfs root path, the owner of the root path must be the deployment user. 
# versions prior to 1.1.0 do not automatically create the hdfs root directory, you need to create it yourself.
hdfsPath="/dolphinscheduler"
# have users who create directory permissions under hdfs root path /
# Note: if kerberos is enabled, hdfsRootUser="" can be used directly.
hdfsRootUser="hdfs"

# 7. common 配置
# ${installPath}/conf/common/common.properties 中
# common config
# Program root path
programPath="/tmp/dolphinscheduler"
# download path
downloadPath="/tmp/dolphinscheduler/download"
# task execute path
execPath="/tmp/dolphinscheduler/exec"
# SHELL environmental variable path
shellEnvPath="$installPath/conf/env/.dolphinscheduler_env.sh"
# suffix of the resource file
resSuffixs="txt,log,sh,conf,cfg,py,java,sql,hql,xml"
# development status, if true, for the SHELL script, you can view the encapsulated SHELL script in the execPath directory. 
# If it is false, execute the direct delete
devState="true"
# kerberos config
# kerberos whether to start
kerberosStartUp="false"
# kdc krb5 config file path
krb5ConfPath="$installPath/conf/krb5.conf"
# keytab username
keytabUserName="hdfs-mycluster@ESZ.COM"
# username keytab path
keytabPath="$installPath/conf/hdfs.headless.keytab"

# 8. zk 配置
# ${installPath}/conf/zookeeper.properties
# zk config
# zk root directory
zkRoot="/dolphinscheduler"
# used to record the zk directory of the hanging machine
zkDeadServers="$zkRoot/dead-servers"
# masters directory
zkMasters="$zkRoot/masters"
# workers directory
zkWorkers="$zkRoot/workers"
# zk master distributed lock
mastersLock="$zkRoot/lock/masters"
# zk worker distributed lock
workersLock="$zkRoot/lock/workers"
# zk master fault-tolerant distributed lock
mastersFailover="$zkRoot/lock/failover/masters"
# zk worker fault-tolerant distributed lock
workersFailover="$zkRoot/lock/failover/workers"
# zk master start fault tolerant distributed lock
mastersStartupFailover="$zkRoot/lock/failover/startup-masters"
# zk session timeout
zkSessionTimeout="300"
# zk connection timeout
zkConnectionTimeout="300"
# zk retry interval
zkRetrySleep="100"
# zk retry maximum number of times
zkRetryMaxtime="5"

# 9. master config
# ${installPath}/conf/master.properties
# master execution thread maximum number, maximum parallelism of process instance
masterExecThreads="100"
# the maximum number of master task execution threads, the maximum degree of parallelism for each process instance
masterExecTaskNum="20"
# master heartbeat interval
masterHeartbeatInterval="10"
# master task submission retries
masterTaskCommitRetryTimes="5"
# master task submission retry interval
masterTaskCommitInterval="100"
# master maximum cpu average load, used to determine whether the master has execution capability
masterMaxCpuLoadAvg="10"
# master reserve memory to determine if the master has execution capability
masterReservedMemory="1"
# master port
masterPort=5566

# 10. worker config
# ${installPath}/conf/worker.properties
# worker execution thread
workerExecThreads="100"
# worker heartbeat interval
workerHeartbeatInterval="10"
# worker number of fetch tasks
workerFetchTaskNum="3"
# worker reserve memory to determine if the master has execution capability
workerReservedMemory="1"
# master port
workerPort=7788

# 11. api config
# ${installPath}/conf/application.properties
# api server port
apiServerPort="12345"
# api session timeout
apiServerSessionTimeout="7200"
# api server context path
apiServerContextPath="/dolphinscheduler/"
# spring max file size
springMaxFileSize="1024MB"
# spring max request size
springMaxRequestSize="1024MB"
# api max http post size
apiMaxHttpPostSize="5000000"

# 1,replace file
echo "1,replace file"
......................................................

4.3.5 添加 Hadoop 配置文件

# 若 install.sh 中,resUploadStartupType 为 HDFS,且配置为 HA,则需拷贝 hadoop 配置文件到 conf 目录下
cp /etc/hadoop/conf.cloudera.yarn/hdfs-site.xml /opt/dolphinscheduler/dolphinscheduler-backend/conf/
cp /etc/hadoop/conf.cloudera.yarn/core-site.xml /opt/dolphinscheduler/dolphinscheduler-backend/conf/

# 若需要修改 hadoop 配置文件,则需拷贝 hadoop 配置文件到 $installPath/conf 目录下,并重启 api-server 服务
#cp /etc/hadoop/conf.cloudera.yarn/hdfs-site.xml /opt/dolphinscheduler/dolphinscheduler-agent/conf/
#cp /etc/hadoop/conf.cloudera.yarn/core-site.xml /opt/dolphinscheduler/dolphinscheduler-agent/conf/
#sh /opt/dolphinscheduler/dolphinscheduler-agent/bin/dolphinscheduler-daemon.sh start api-server
#sh /opt/dolphinscheduler/dolphinscheduler-agent/bin/dolphinscheduler-daemon.sh stop api-server

4.3.6 一键部署

执行脚本部署并启动

sh /opt/dolphinscheduler/dolphinscheduler-backend/install.sh

查看日志

tree /opt/dolphinscheduler/dolphinscheduler/logs
-------------------------------------------------
/opt/DolphinScheduler/dolphinscheduler/logs
├── dolphinscheduler-alert.log
├── dolphinscheduler-alert-server-node-b.test.com.out
├── dolphinscheduler-alert-server.pid
├── dolphinscheduler-api-server-node-b.test.com.out
├── dolphinscheduler-api-server.log
├── dolphinscheduler-api-server.pid
├── dolphinscheduler-logger-server-node-b.test.com.out
├── dolphinscheduler-logger-server.pid
├── dolphinscheduler-master.log
├── dolphinscheduler-master-server-node-b.test.com.out
├── dolphinscheduler-master-server.pid
├── dolphinscheduler-worker.log
├── dolphinscheduler-worker-server-node-b.test.com.out
├── dolphinscheduler-worker-server.pid
└── {processDefinitionId}
    └── {processInstanceId}
        └── {taskInstanceId}.log

查看Java进程

jps
8138 MasterServer              # master服务
8165 WorkerServer              # worker服务
8206 LoggerServer              # logger服务
8240 AlertServer               # alert服务
8274 ApiApplicationServer      # api服务

Worker 启动失败

less /opt/dolphinscheduler/dolphinscheduler-agent/logs/dolphinscheduler-worker-server-test01.out
#nohup: 无法运行命令"/bin/java": 没有那个文件或目录

#解决方法:创建 java 软链
cd /usr/bin/ && sudo ln -s /usr/java/jdk1.8.0_181-cloudera/bin/java /usr/bin/java

4.3.7 指令

# 一键部署(含暂停、重发安装包、启动等操作)
sh /opt/dolphinscheduler/dolphinscheduler-backend/install.sh

# 一键启停集群所有服务
sh /opt/dolphinscheduler/dolphinscheduler-backend/bin/start-all.sh
sh /opt/dolphinscheduler/dolphinscheduler-backend/bin/stop-all.sh
或
sh /opt/dolphinscheduler/dolphinscheduler-agent/bin/start-all.sh
sh /opt/dolphinscheduler/dolphinscheduler-agent/bin/stop-all.sh

# 启停 Master
sh /opt/dolphinscheduler/dolphinscheduler-agent/bin/dolphinscheduler-daemon.sh start master-server
sh /opt/dolphinscheduler/dolphinscheduler-agent/bin/dolphinscheduler-daemon.sh stop master-server

# 启停 Worker
sh /opt/dolphinscheduler/dolphinscheduler-agent/bin/dolphinscheduler-daemon.sh start worker-server
sh /opt/dolphinscheduler/dolphinscheduler-agent/bin/dolphinscheduler-daemon.sh stop worker-server

# 启停 Api
sh /opt/dolphinscheduler/dolphinscheduler-agent/bin/dolphinscheduler-daemon.sh start api-server
sh /opt/dolphinscheduler/dolphinscheduler-agent/bin/dolphinscheduler-daemon.sh stop api-server

# 启停 Logger
sh /opt/dolphinscheduler/dolphinscheduler-agent/bin/dolphinscheduler-daemon.sh start logger-server
sh /opt/dolphinscheduler/dolphinscheduler-agent/bin/dolphinscheduler-daemon.sh stop logger-server

# 启停Alert
sh /opt/dolphinscheduler/dolphinscheduler-agent/bin/dolphinscheduler-daemon.sh start alert-server
sh /opt/dolphinscheduler/dolphinscheduler-agent/bin/dolphinscheduler-daemon.sh stop alert-server

4.3.8 数据库升级(略)

# 数据库升级是在1.0.2版本增加的功能,执行以下命令即可自动升级数据库
sh /opt/dolphinscheduler/dolphinscheduler-agent/script/upgrade_dolphinscheduler.sh

4.4 dolphinscheduler-ui 部署

4.4.1 dolphinscheduler-ui 部署说明

在部署 ApiApplicationServer 的服务器上部署 UI 服务。
前端部署分自动和手动两种方式:

  • 自动部署脚本会用 yum 安装 Nginx,通过引导设置后的 Nginx 配置文件为
    /etc/nginx/conf.d/dolphinscheduler.conf
  • 如果本地已经存在 Nginx,则需手动部署,创建 Nginx 配置文件
    /etc/nginx/conf.d/dolphinscheduler.conf

4.4.2 自动部署

sudo sh /opt/dolphinscheduler/dolphinscheduler-front/install-dolphinscheduler-ui.sh
············
请输入nginx代理端口,不输入,则默认8888 :8886
请输入api server代理ip,必须输入,例如:192.168.xx.xx :10.10.7.209
请输入api server代理端口,不输入,则默认12345 :12345
=================================================
1.CentOS6安装
2.CentOS7安装
3.Ubuntu安装
4.退出
=================================================
请输入安装编号(1|2|3|4):2
············ 
Complete!
port option is needed for add
FirewallD is not running
setenforce: SELinux is disabled
请浏览器访问:http://10.10.7.209:8886

4.4.3 手动部署

vim /etc/nginx/conf.d/dolphinscheduler.conf
    server {
        listen       8886;# access port
        server_name  localhost;
        #charset koi8-r;
        #access_log  /var/log/nginx/host.access.log  main;
        location / {
        root   /opt/dolphinscheduler/dolphinscheduler-front/dist; # static file directory
        index  index.html index.html;
        }
        location /dolphinscheduler {
        proxy_pass http://10.10.7.209:12345; # interface address
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header x_real_ipP $remote_addr;
        proxy_set_header remote_addr $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_connect_timeout 300s;
        proxy_read_timeout 300s;
        proxy_send_timeout 300s;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection upgrade;
        }
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
        root   /usr/share/nginx/html;
        }
    }

4.4.4 修改上传文件大小限制

sudo vim /etc/nginx/nginx.conf
# 在 http 内加入
client_max_body_size 1024m;

重启 nginx 服务

systemctl restart nginx  

4.4.5 dolphinscheduler 首次登录

访问 http://10.10.7.209:8886  
初始用户:admin  
初始密码:dolphinscheduler123  
注:若访问网址提示 404,则删除 /etc/nginx/conf.d/default.conf 文件  

4.4.6 Nginx 相关

4.4.6.1 CentOS7 安装 Nginx
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install nginx
systemctl start nginx.service
4.4.6.2 Nginx 指令
# 启动
systemctl start nginx
# 重启
systemctl restart nginx
# 状态
systemctl status nginx
# 停止
systemctl stop nginx

五、使用与测试

5.1 安全中心(Security)

5.1.1 队列管理(Queue manage)

说明:队列是在执行 spark、mapreduce 等程序,需要用到“队列”参数时使用的(创建后不可删除)。
详见:附录.队列管理

例:

安全中心 -> 队列管理 -> 创建队列
------------------------------------------------------
名称:quene_test
队列值:quene_test
------------------------------------------------------
提交

5.1.2 租户管理(Tenant Manage)

说明:
租户对应的是 Linux 的用户,用于 worker 提交作业所使用的用户。
如果 Linux 没有这个用户,worker 会在执行脚本的时候创建这个用户。
租户编码:
租户编码是 Linux 上的用户,唯一,不能重复。
新建的租户会在 HDFS 上 $hdfsPath("/dolphinscheduler") 目录下创建租户目录,租户目录下为该租户上传的文件和 UDF 函数
租户名称:
租户编码的别名

例:

#安全中心 -> 租户管理 -> 创建租户
#------------------------------------------------------
#租户编码:developer
#租户名称:DEFAULT-TENANT
#队列值:default
#------------------------------------------------------
#提交

#为该用户在 HDFS 上创建用户目录
sudo -u hdfs hadoop fs -mkdir /user/developer
sudo -u hdfs hadoop fs -chown developer:developer /user/developer

注:

此处为 管理员 创建管理员租户 dscheduler(租户编码:dscheduler 租户名称:WARING-DSCHEDULER)
sudo -u hdfs hadoop fs -mkdir /user/dscheduler
sudo -u hdfs hadoop fs -chown dscheduler:dscheduler /user/dscheduler

5.1.3 用户管理(User Manage)

说明:用户分为管理员用户和普通用户。
授予权限包括:项目权限,资源权限,数据源权限,UDF函数权限。
管理员可以对普通用户进行非其创建的项目、资源、数据源和UDF函数进行授权。

例:

安全中心 -> 用户管理 -> 创建用户
------------------------------------------------------
用户名称:tourist
密码:DS1234
租户:DEFAULT-TENANT
队列:default
邮箱:tourist@sohh.cn
手机号:
-----------------------------------------------------+-
提交

注:

实际生产环境中,可将 项目、用户、租户 相关联,即为某个大的项目创建一个用户及对应的租户。若需要删除用户,则应首先将项目内的任务删除,然后删除项目,再删除用户及关联的租户,否则会出现任务无法运行,项目不可见等情况(1.2 版本)
如果该 用户切换租户,则该 用户在当前租户下创建的所有资源 将 复制 到新的租户下(对于 HDFS 平台来说,则是将当前租户目录下该用户创建的所有资源复制到新租户的目录下,不复制被赋权的文件,且被赋权的文件仍有权限)。需要注意的是,此后进行文件删除操作时,旧租户下的对应的文件并不会被删除。

5.1.4 告警组管理(Warning group manage)

说明:告警组是在启动时设置的参数,在流程结束以后会将流程的状态和其他信息以邮件形式发送给告警组。

例:略

5.1.5 Worker分组管理(Worker group manage)

说明:
worker 分组,提供了一种让任务在指定的 worker 上运行的机制。
管理员创建 worker 分组,在任务节点和运行参数中设置中可以指定该任务运行的 worker 分组。
如果指定的分组被删除或者没有指定分组,则该任务会在任意一个 worker 上运行。worker 分组内多个 ip 地址(不能写别名),以英文逗号分隔。

例:

安全中心 -> Worker分组管理 -> 创建Worker分组
------------------------------------------------------
组名称:test01
IP:10.10.7.1
------------------------------------------------------
提交

5.1.6 令牌管理(Token manage)

说明:由于后端接口有登录检查,令牌管理,提供了一种可以通过调用接口的方式对系统进行各种操作。
调用示例:略。详见:附录.令牌管理

5.2 监控中心(Monitor)

5.3 数据源中心(Datasource)

数据源中心支持MySQL、POSTGRESQL、HIVE及Spark等数据源

5.3.1 MySQL 数据源

例:

数据源中心 -> 创建数据源 -> MYSQL
------------------------------------------------------
数据源名称:test_mysql_mdb
描述:
IP主机名:test03
端口:3306
用户名:testuser
密码:Test@1234
数据库名:mydb
jdbc连接参数:
------------------------------------------------------
测试链接 -> 编辑

5.3.2 POSTGRESQL 数据源

5.3.3 HIVE 数据源

5.3.3.1 使用 HiveServer2 方式连接

例:

数据源中心 -> 创建数据源 -> HIVE/IMPALA
------------------------------------------------------
数据源名称:test_hiveserver2
描述:
IP主机名:test03
端口:10000
用户名:hive
密码:12341234
数据库名:mdb
jdbc连接参数:
------------------------------------------------------
测试链接 -> 编辑
5.3.3.2 使用 HiveServer2 HA Zookeeper 方式连接

例:

数据源中心 -> 创建数据源 -> HIVE/IMPALA
------------------------------------------------------
数据源名称:test_hiveserver2_ha
描述:
IP主机名:test01,test02,test03
端口:2181
用户名:hive
密码:12341234
数据库名:mydb
jdbc连接参数:{"serviceDiscoveryMode":"zooKeeper","zooKeeperNamespace":"hiveserver2_zk"}
------------------------------------------------------
测试链接 -> 编辑
注意:如果开启了kerberos,则需要填写 Principal  

5.3.4 Spark 数据源

5.3.5 CLICKHOUSE

5.3.6 ORACLE

5.3.7 SQLSERVER

5.4 资源中心(Resources)

资源中心所有文件对应的 Mysql 表为:t_ds_resources
UDF 对应的 Mysql 表为:t_ds_udfs
资源中心的文件上传、删除操作使用的用户均为 install.sh 中指定的 $hdfsRootUser

5.4.1 文件管理

包含创建文件、上传文件、文件查看、下载文件、文件重命名、删除等功能
文件所在 HDFS 上的路径为: h d f s P a t h / hdfsPath/ hdfsPath/tenant/resources/
创建文件支持的文件类型:txt、log、sh、conf、cfg、py、java、sql、xml、hql
上传文件常用于:用户程序,脚本及配置文件
注:

关于文件已存在(resource already exists )问题
文件管理中的文件,有 名称 和 文件名称 两个属性,判断文件是否存在,是根据 名称 进行判断的。
创建文件时,默认为 名称 与 文件名称 同名,若提示已存在,则需修改创建文件操作下的文件名称内容。新建的文件 名称 与 文件名称 都为修改后的文件名。
上传文件时,默认为 名称 与 文件名称 同名,若提示已存在,则需修改文件上传操作下的文件名称内容。上传的文件 名称 为修改后的文件名,文件名称 为上传文件的原文件名。
HDFS 上实际存储的文件,文件名为 名称 显示的内容。
在工作流定义中调用资源时,选取的是此处的 名称 属性。

5.4.2 UDF 管理

5.4.2.1 资源管理

上传 UDF 资源,同文件管理的上传文件操作。

5.4.2.2 函数管理

点击“创建UDF函数”,输入udf函数参数,选择udf资源,点击“提交”,创建udf函数。
注:目前只支持HIVE的 临时 UDF 函数

5.5 项目管理(Project)

5.5.1 创建项目

项目名称 不可重复。即使为不同用户,创建项目时若 项目名称 已存在。会提示 “project Test already exists”。
若要删除项目,需要确认项目中所有 工作流定义 都已下线并删除,才能进行删除操作。
实际生产环境中,建议使用 管理员账户 创建项目,并对开发人员赋权。

例:

项目管理 -> 创建项目
------------------------------------------------------
项目名称:Demo
描述:
------------------------------------------------------
提交

5.5.2 项目首页

点击“项目名称”,进入“项目首页”。

  • 任务状态统计:是指在指定时间范围内,统计 任务实例 中的待运行、失败、运行中、完成、成功的个数
  • 流程状态统计:是指在指定时间范围内,统计 工作流实例 中的待运行、失败、运行中、完成、成功的个数
  • 流程定义统计:是统计当前用户有权限的项目的 工作流定义 总数
    注:
    工作流定义 的工作流每运行一次,产生一个 工作流实例,一个 工作流实例 包含一到多个 任务实例。同一 任务实例 仅被统计一次,按最近时间状态进行统计。

5.5.3 工作流定义

5.5.3.1 创建工作流定义

例:

项目管理 -> 工作流 -> 工作流定义 -> 创建工作流
Step 1:拖拽“SHELL"节点到画布,新增一个Shell任务。
------------------------------------------------------
节点名称:task01
描述:This is a test task.
任务优先级:MEDIUM
Worker分组:Default
失败重试次数:0
失败重试间隔:1
脚本:
    #!/bin/sh
    echo "HELLO WORLD."
资源:
自定义参数:
------------------------------------------------------
    确认添加

Step 2:拖拽“SHELL"节点到画布,新增一个Shell任务。
------------------------------------------------------
节点名称:task02
描述:This is another test task.
任务优先级:MEDIUM
Worker分组:Default
失败重试次数:0
失败重试间隔:1
脚本:
    #!/bin/sh
    echo "HELLO DOLPHIN SCHEDULER."
资源:
自定义参数:
-> 确认添加
------------------------------------------------------
Step 3:“选择线条连接”,连接任务1、2,tesk01、task02 会串行执行。
Step 4:保存
------------------------------------------------------
设置DAG图名称:Test_shell
选择租户:Default
------------------------------------------------------
-> 添加

更多任务类型详见:六、任务节点类型和参数设置

5.5.3.2 工作流定义操作功能

工作流定义列表的操作功能如下:

  • 编辑: 只能编辑"下线"的工作流定义。工作流DAG编辑同创建工作流定义。
  • 上线: 工作流状态为"下线"时,上线工作流,只有"上线"状态的工作流能运行,但不能编辑。
  • 下线: 工作流状态为"上线"时,下线工作流,下线状态的工作流可以编辑,但不能运行。
  • 运行: 只有上线的工作流能运行。运行操作步骤见 5.5.3.3 运行工作流
  • 定时: 只有上线的工作流能设置定时,系统自动定时调度工作流运行。创建定时后的状态为"下线",需在定时管理页面上线定时才生效。定时操作步骤见
    5.5.3.4 工作流定时。
  • 定时管理: 定时管理页面可编辑、上线/下线、删除定时。
  • 删除: 删除工作流定义。
  • 下载: 下载工作流定义到本地
  • 树形图: 以树形结构展示任务节点的类型及任务状态
5.5.3.3 运行工作流

工作流运行参数说明:

  • 失败策略:当某一个任务节点执行失败时,其他并行的任务节点需要执行的策略。”继续“表示:某一任务失败后,其他任务节点正常执行;”结束“表示:终止所有正在执行的任务,并终止整个流程。
  • 通知策略:当流程结束,根据流程状态发送流程执行信息通知邮件,包含任何状态都不发,成功发,失败发,成功或失败都发。
  • 流程优先级:流程运行的优先级,分五个等级:最高(HIGHEST),高(HIGH),中(MEDIUM),低(LOW),最低(LOWEST)。当master线程数不足时,级别高的流程在执行队列中会优先执行,相同优先级的流程按照先进先出的顺序执行。
  • worker分组:该流程只能在指定的worker机器组里执行。默认是Default,可以在任一worker上执行。
  • 通知组:选择通知策略||超时报警||发生容错时,会发送流程信息或邮件到通知组里的所有成员。
  • 收件人:选择通知策略||超时报警||发生容错时,会发送流程信息或告警邮件到收件人列表。
  • 抄送人:选择通知策略||超时报警||发生容错时,会抄送流程信息或告警邮件到抄送人列表。
  • 补数:包括串行补数、并行补数2种模式。串行补数:指定时间范围内,从开始日期至结束日期依次执行补数,只生成一条流程实例;并行补数:指定时间范围内,多天同时进行补数,生成N条流程实例。
    例:
项目管理 -> 工作流 -> 工作流定义 ->   
选择工作流名称“Test_shell” -> 上线 -> 运行(参数均为默认,不做修改)
5.5.3.4 工作流定时

选择指定工作流,点击“定时”,选择起止时间、定时等选择定时执行时间。

  • 点击"创建"按钮,创建定时成功,此时定时状态为"下线",定时需上线才生效。
  • 定时上线:点击"定时管理"按钮,进入定时管理页面,点击"上线"按钮,定时状态变为"上线",如下图所示,工作流定时生效。

下线 工作流定义 后,定时任务业务也会同时下线,工作流定义 上线后,需要重新手动上线定时任务

5.5.3.5 导入工作流

点击项目管理->工作流->工作流定义,进入工作流定义页面,点击"导入工作流"按钮,导入本地工作流文件,工作流定义列表显示导入的工作流,状态为下线。

5.5.4 工作流实例

查看工作流实例:

项目管理 -> 工作流 -> 工作流实例 -> 点击工作流名称 -> 进入DAG查看页面,查看任务执行状态

查看任务日志:

进入DAG查看页面 -> 双击任务节点 -> 查看日志

查看任务历史记录:

进入DAG查看页面 -> 双击任务节点 -> 查看历史

查看运行参数:

进入工作流DAG页面 -> 点击左上角图标,查看工作流实例的启动参数、全局参数和局部参数

工作流实例操作功能:

  • 编辑:可以对已经终止的流程进行编辑,编辑后保存的时候,可以选择是否 更新到工作流定义
  • 重跑:可以对已经终止的流程进行重新执行
  • 恢复失败:针对失败的流程,可以执行恢复失败操作,从失败的节点开始执行
  • 停止:对正在运行的流程进行停止操作,后台会先 kill worker 进程,再执行 kill -9 操作
  • 暂停:可以对正在运行的流程进行暂停操作,系统状态变为等待执行,会等待正在执行的任务结束,暂停下一个要执行的任务
  • 恢复暂停:可以对暂停的流程恢复,直接从暂停的节点开始运行
  • 删除:删除工作流实例及工作流实例下的任务实例
  • 甘特图:Gantt图纵轴是某个工作流实例下的任务实例的拓扑排序,横轴是任务实例的运行时间

5.5.5 任务实例

任务实例 -> 点击工作流实例名称 -> 可跳转到工作流实例DAG图查看任务状态
任务实例 -> 查看日志

六、任务节点类型和参数设置

6.1 Shell节点

运行说明:shell 节点,在 worker 执行的时候,会生成一个临时 shell 脚本,使用租户同名的linux 用户执行这个脚本。
参数说明:

  • 节点名称:一个工作流定义中的节点名称是唯一的
  • 运行标志:标识这个节点是否能正常调度,如果不需要执行,可以打开禁止执行开关
  • 描述信息:描述该节点的功能
  • 任务优先级:级别高的任务在执行队列中会优先执行,相同优先级的任务按照先进先出的顺序执行
  • Worker分组:指定任务运行的机器列表
  • 失败重试次数:任务失败重新提交的次数,支持下拉和手填
  • 失败重试间隔:任务失败重新提交任务的时间间隔,支持下拉和手填
  • 超时告警:当任务执行时间超过超时时长可以告警并且超时失败
  • 脚本:用户开发的SHELL程序
  • 资源:是指脚本中需要调用的资源文件列表
  • 自定义参数:是SHELL局部的用户自定义参数,会替换脚本中以${变量}的内容
    例:
项目管理 -> 工作流 -> 工作流定义 -> 创建工作流
------------------------------------------------------
拖拽“SHELL"节点到画布,新增一个Shell任务。
节点名称:Test_shell_01
运行标志:正常
描述:
任务优先级:MEDIUM
Worker分组:Default
失败重试次数:0
失败重试间隔:1
超时告警:off
脚本:
    #!/bin/sh
    for i in {1..10};do echo $i;done
资源:
自定义参数:
-> 确认添加
------------------------------------------------------
保存 -> 
设置DAG图名称:Test_shell
选择租户:Default
超时告警:off
设置全局:
------------------------------------------------------
添加 -> 上线 -> 运行

6.2 子流程节点

运行说明:子流程节点,就是把外部的某个工作流定义当做一个任务节点去执行。
参数说明:

  • 节点名称:一个工作流定义中的节点名称是唯一的
  • 运行标志:标识这个节点是否能正常调度
  • 描述信息:描述该节点的功能
  • 超时告警:勾选超时告警、超时失败,当任务超过"超时时长"后,会发送告警邮件并且任务执行失败
  • 子节点:是选择子流程的工作流定义,右上角进入该子节点可以跳转到所选子流程的工作流定义

例:

项目管理 -> 工作流 -> 工作流定义 -> 创建工作流
------------------------------------------------------
Task 1:拖拽 SHELL 节点到画布,新增一个 Shell 任务
节点名称:Test_subprocess_01
... ...
脚本:
    #!/bin/sh
    for i in {1..10};do echo $i;done
-> 确认添加
Task 2:拖拽 SUB_PROCESS 节点到画布,新增一个 SUB_PROCESS 任务
节点名称:Test_subprocess_02
... ...
子节点:Test_shell
-> 确认添加
------------------------------------------------------
串联任务节点 Task1 和 Task2
------------------------------------------------------
保存 -> 
设置DAG图名称:Test_subprocess
选择租户:Default
超时告警:off
设置全局:
------------------------------------------------------
添加 -> 上线 -> 运行

6.3 存储过程节点

运行说明:根据选择的数据源,执行存储过程。
参数说明:

  • 数据源:存储过程的数据源类型支持 MySQL、POSTGRESQL、CLICKHOUSE、ORACLE、SQLSERVER
    等,选择对应的数据源
  • 方法:是存储过程的方法名称
  • 自定义参数:存储过程的自定义参数类型支持 IN、OUT 两种,数据类型支持
    VARCHAR、INTEGER、LONG、FLOAT、DOUBLE、DATE、TIME、TIMESTAMP、BOOLEAN 九种数据类型

例:

Test_procedure(略)

6.4 SQL节点

参数说明:

  • 数据源:选择对应的数据源
  • sql类型:支持查询和非查询两种,查询是 select 类型的查询,是有结果集返回的,可以指定邮件通知为 表格、附件 或 表格与附件
    三种模板。非查询是没有结果集返回的,是针对 update、delete、insert 三种类型的操作
  • 主题、收件人、抄送人:邮件相关配置
  • sql参数:输入参数格式为 key1=value1;key2=value2…
  • sql语句:SQL语句
  • UDF函数:对于HIVE类型的数据源,可以引用资源中心中创建的UDF函数,其他类型的数据源暂不支持UDF函数
  • 自定义参数:SQL任务类型,而存储过程是自定义参数顺序的给方法设置值自定义参数类型和数据类型同存储过程任务类型一样。区别在于SQL任务类型自定义参数会替换sql语句中
    ${变量}
  • 前置sql:执行 “sql语句” 前的操作
  • 后置sql:执行 “sql语句” 后的操作

6.4.1 Mysql

例:

项目管理 -> 工作流 -> 工作流定义 -> 创建工作流
------------------------------------------------------
Task 1:拖拽 SQL 节点到画布,新增一个 SQL 任务
节点名称:Test_sql_mysql_01
... ...
数据源:MYSQL   test01_mysql
sql类型:查询   表格:√ 附件:√
主题:Test MySQL
收件人:tourist@sohh.cn
sql语句:
    select * from test_table where score=${i};
自定义参数:
    i -> IN -> INTEGER -> 97
前置sql:
    INSERT INTO test_table values(null, 'Dog',97)
后置sql:
-> 确认添加
Task 2:拖拽 SQL 节点到画布,新增一个 SQL 任务
节点名称:Test_sql_mysql_02
... ...
数据源:MYSQL   test01_mysql
sql类型:非查询
sql语句:
    create table test_table2 as select * from test_table;
自定义参数:
前置sql:
后置sql:
-> 确认添加
------------------------------------------------------
串联任务节点 Test_sql_mysql_01、Test_sql_mysql_02
------------------------------------------------------
保存 -> 
设置DAG图名称:Test_sql_mysql
选择租户:Default
超时告警:off
设置全局:
------------------------------------------------------
添加 -> 上线 -> 运行

6.4.2 Hive

例:

项目管理 -> 工作流 -> 工作流定义 -> 创建工作流
------------------------------------------------------
Task 1:拖拽 SQL 节点到画布,新增一个 SQL 任务
节点名称:Test_sql_hive_01
... ...
数据源:Hive  test_hiveserver2
sql类型:查询   表格:√ 附件:√
主题:Test Hive
收件人:tourist@sohh.cn
sql语句(结尾不要加分号):
    select * from test_table where score=${i}
自定义参数:
    i -> IN -> INTEGER -> 97
前置sql:
    INSERT INTO test_table values(null, 'Dog',97)
后置sql:
-> 确认添加
Task 2:拖拽 SQL 节点到画布,新增一个 SQL 任务
节点名称:Test_sql_hive_02
... ...
数据源:Hive  test_hiveserver2_ha
sql类型:非查询
sql语句(结尾不要加分号):
    create table test_table2 as select * from test_table
自定义参数:
前置sql:
后置sql:
-> 确认添加
------------------------------------------------------
串联任务节点 Test_sql_hive_01、 Test_sql_hive_02
------------------------------------------------------
保存 -> 
设置DAG图名称:Test_sql_hive
选择租户:Default
超时告警:off
设置全局:
------------------------------------------------------
添加 -> 上线 -> 运行

6.4.3 Other

POSTGRESQL、SPARK、CLICKHOUSE、ORACLE、SQLSERVER(略)

6.5 SPARK节点

执行说明:通过 SPARK 节点,可以直接直接执行 SPARK 程序,对于 spark 节点,worker 会使用 spark-submit 方式提交任务
参数说明:

  • 程序类型:支持JAVA、Scala和Python三种语言
  • 主函数的class:是Spark程序的入口Main Class的全路径
  • 主jar包:是Spark的jar包
  • 部署方式:支持yarn-cluster、yarn-client、和local三种模式
  • Driver:设置 Driver内核数 及 内存数
  • Executor:设置 Executor数量、Executor内存数、Executor内核数
  • 命令行参数:是设置Spark程序的输入参数,支持自定义参数变量的替换。
  • 其他参数:支持 --jars、–files、–archives、–conf格式
  • 资源:如果其他参数中引用了资源文件,需要在资源中选择指定
  • 自定义参数:是 MR 局部的用户自定义参数,会替换脚本中以${变量}的内容
    注意:JAVA和Scala只是用来标识,没有区别,如果是Python开发的Spark则没有主函数的class,其他都是一样

例:略

6.6 Flink节点

参数说明:

  • 程序类型:支持JAVA、Scala和Python三种语言
  • 主函数的class:是Flink程序的入口Main Class的全路径
  • 主jar包:是Flink的jar包
  • 部署方式:支持cluster、local三种模式
  • slot数量:可以设置slot数
  • taskManage数量:可以设置taskManage数
  • jobManager内存数:可以设置jobManager内存数
  • taskManager内存数:可以设置taskManager内存数
  • 命令行参数:是设置Spark程序的输入参数,支持自定义参数变量的替换。
  • 其他参数:支持 --jars、–files、–archives、–conf格式
  • 资源:如果其他参数中引用了资源文件,需要在资源中选择指定
  • 自定义参数:是Flink局部的用户自定义参数,会替换脚本中以${变量}的内容
    注意:JAVA和Scala只是用来标识,没有区别,如果是Python开发的Flink则没有主函数的class,其他都是一样

例:略

6.7 MapReduce(MR)节点

执行说明:使用 MR 节点,可以直接执行 MR 程序。对于 MR 节点,worker 会使用 hadoop jar 方式提交任务

6.7.1 Java 程序

参数说明:

  • 程序类型:JAVA
  • 主函数的class:是MR程序的入口Main Class的全路径
  • 主jar包:是MR的jar包
  • 命令行参数:是设置MR程序的输入参数,支持自定义参数变量的替换
  • 其他参数:支持 –D、-files、-libjars、-archives格式
  • 资源:如果其他参数中引用了资源文件,需要在资源中选择指定
  • 自定义参数:是MR局部的用户自定义参数,会替换脚本中以${变量}的内容

例:

# 将 MR 的示例 jar 包上传到 资源中心;并创建测试文本上传到 HDFS 目录
# CDH 版本 Jar 包位置:/opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar
项目管理 -> 工作流 -> 工作流定义 -> 创建工作流
------------------------------------------------------
拖拽 MR 节点到画布,新增一个 MR 任务
节点名称:Test_mr_java_01
... ...
程序类型:JAVA
主函数的class:wordcount
主jar包:hadoop-mapreduce-examples.jar
命令行参数:/tmp/test.txt /tmp/output
其他参数:
资源:
自定义参数:
-> 确认添加
------------------------------------------------------
保存 -> 
设置DAG图名称:Test_mr_java
选择租户:Default
超时告警:off
设置全局:
------------------------------------------------------
添加 -> 上线 -> 运行(运行MR的权限问题此处不再描述)
------------------------------------------------------
查看结果:
sudo -u hdfs hadoop fs -cat /tmp/output/*

6.7.2 Python 程序

参数说明:

  • 程序类型:Python
  • 主jar包:运行 MR 的 Python jar包
  • 其他参数:支持 –D、-mapper、-reducer、-input
    -output格式,这里可以设置用户自定义参数的输入,比如:-mapper “mapper.py 1” -file mapper.py -reducer reducer.py -file reducer.py –input /journey/words.txt -output /journey/out/mr/${currentTimeMillis} 其中 -mapper 后的 mapper.py 1是两个参数,第一个参数是mapper.py,第二个参数是1
  • 资源:如果其他参数中引用了资源文件,需要在资源中选择指定
  • 自定义参数:是MR局部的用户自定义参数,会替换脚本中以${变量}的内容

6.8 Python节点

运行说明:使用python节点,可以直接执行python脚本,对于python节点,worker会使用python 方式提交任务。
参数说明:

  • 脚本:用户开发的Python程序
  • 资源:是指脚本中需要调用的资源文件列表
  • 自定义参数:是Python局部的用户自定义参数,会替换脚本中以${变量}的内容

例:

项目管理 -> 工作流 -> 工作流定义 -> 创建工作流
------------------------------------------------------
拖拽 Python 节点到画布,新增一个 Python 任务
节点名称:Test_python_01
... ...
脚本:
    #!/user/bin/python
    # -*- coding: UTF-8 -*-
    for num in range(0, 10): print 'Round %d ...' % num
资源:
自定义参数:
-> 确认添加
------------------------------------------------------
保存 -> 
设置DAG图名称:Test_python
选择租户:Default
超时告警:off
设置全局:
------------------------------------------------------
添加 -> 上线 -> 运行

6.9 依赖(DEPENDENT)节点

运行说明:依赖节点,就是依赖检查节点。比如A流程依赖昨天的B流程执行成功,依赖节点会去检查B流程在昨天是否有执行成功的实例。

6.10 HTTP节点

参数说明:

  • 节点名称:一个工作流定义中的节点名称是唯一的。
  • 运行标志:标识这个节点是否能正常调度,如果不需要执行,可以打开禁止执行开关。
  • 描述信息:描述该节点的功能。
  • 任务优先级:worker线程数不足时,根据优先级从高到低依次执行,优先级一样时根据先进先出原则执行。
  • Worker分组:任务分配给worker组的机器机执行,选择Default,会随机选择一台worker机执行。
  • 失败重试次数:任务失败重新提交的次数,支持下拉和手填。
  • 失败重试间隔:任务失败重新提交任务的时间间隔,支持下拉和手填。
  • 超时告警:勾选超时告警、超时失败,当任务超过"超时时长"后,会发送告警邮件并且任务执行失败.
  • 请求地址:http请求URL。
  • 请求类型:支持GET、POSt、HEAD、PUT、DELETE。
  • 请求参数:支持Parameter、Body、Headers。
  • 校验条件:支持默认响应码、自定义响应码、内容包含、内容不包含。
  • 校验内容:当校验条件选择自定义响应码、内容包含、内容不包含时,需填写校验内容。
  • 自定义参数:是http局部的用户自定义参数,会替换脚本中以${变量}的内容。

例:略

七、参数

7.1 系统参数

  • ${system.biz.date} : 日常调度实例定时的定时时间前一天,格式为 yyyyMMdd,补数据时,该日期 +1
  • ${system.biz.curdate} : 日常调度实例定时的定时时间,格式为 yyyyMMdd,补数据时,该日期 +1
  • ${system.datetime} : 日常调度实例定时的定时时间,格式为 yyyyMMddHHmmss,补数据时,该日期 +1

7.2 时间自定义参数

时间自定义参数支持代码中自定义变量名,声明方式:${变量名}。可以是引用 “系统参数” 或指定 “常量”。

我们定义这种基准变量为 […] 格式的,[yyyyMMddHHmmss] 是可以任意分解组合的,比如:$[yyyyMMdd], $[HHmmss], $[yyyy-MM-dd] 等。

例:

  • 后 N 年:$[add_months(yyyyMMdd,12*N)]
  • 前 N 年:$[add_months(yyyyMMdd,-12*N)]
  • 后 N 月:$[add_months(yyyyMMdd,N)]
  • 前 N 月:$[add_months(yyyyMMdd,-N)]
  • 后 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]

7.3 用户自定义参数

用户自定义参数分为全局参数和局部参数。
全局参数是保存工作流定义和工作流实例的时候传递的全局参数,全局参数可以在整个流程中的任何一个任务节点的局部参数引用。

例:

项目管理 -> 工作流 -> 工作流定义 -> 创建工作流
------------------------------------------------------
拖拽 Shell 节点到画布,新增一个 Shell 任务
节点名称:Test_parameters
... ...
脚本:
    #!/bin/sh
    echo "---------------------------------------"
    echo "# 时间自定义参数"
    echo "后 1 年:" $[add_months(yyyyMMdd, 12*1)]
    echo "前 1 年:" $[add_months(yyyyMMdd, -12*1)]
    echo "后 1 月:" $[add_months(yyyyMMdd,1)]
    echo "前 1 月:" $[add_months(yyyyMMdd,-1)]
    echo "后 1 周:" $[yyyyMMdd+7*1]
    echo "前 1 周:" $[yyyyMMdd-7*1]
    echo "后 1 天:" $[yyyyMMdd+1]
    echo "前 1 天:" $[yyyyMMdd-1]
    echo "后 1 小时:" $[HHmmss+1/24]
    echo "前 1 小时:" $[HHmmss-1/24]
    echo "后 1 分钟:" $[HHmmss+1/24/60]
    echo "前 1 分钟:" $[HHmmss-1/24/60]
    
    echo "---------------------------------------"
    echo "# 用户自定义参数"
    echo "dt_yesterday: " ${dt_yesterday}
    echo "dt_datetime: " ${dt_datetime}
    echo "dt_today: " ${dt_today}
    echo "dt_today_global: " ${dt_today_global}

资源:
自定义参数:
    dt_yesterday    ${system.biz.date}
    dt_datetime     ${system.datetime}
    dt_today        ${system.biz.curdate}
-> 确认添加
------------------------------------------------------
保存 -> 
设置DAG图名称:Test_parameters
选择租户:Default
超时告警:off
设置全局:
    dt_today_global ${system.biz.curdate}
------------------------------------------------------
添加 -> 上线 -> 运行

八、DolphinScheduler操作说明

8.1 登录系统

  • 访问前端页面地址,接口ip(自行修改) http://192.168.xx.xx:12345/dolphinscheduler
  • 账号:admin
  • 密码:dolphinscheduler123
    在这里插入图片描述

8.2 DolphinScheduler登录后操作说明

8.2.1 租户用户

进入小海豚,我们会被直接拉入安全中心页面,难道不应该是炫酷的首页么?其实这是告诉我们这个页面很重要,为什么呢?
因为我们需要做我们的租户用户管理,我们先建立,慢慢解释。

在这里插入图片描述

  • 创建dolphinscheduler租户,这里的租户需要和我们的linux用户关联,也就是说liunx必须有。
    在这里插入图片描述
  • 然后是创建用户(下图例子为创建开发账号dev2020),这里我们的admin用户不做修改,只作为管理账号使用。
    在这里插入图片描述
    在这里插入图片描述

从图中我们看见租户的选择。其实意思也显而易见了,比如我们根据业务环境来区分用户,那么这个用户,在提交我们小海豚上编辑的流程时,小海豚会去liunx上执行,这时使用的就是我们的租户(也就是liunx用户)。
注意:租户编码:租户编码是Linux上的用户,唯一,不能重复

8.2.2 警告组

在这里插入图片描述
在这里插入图片描述

警告组的意思是,在我们出现错误或者执行完成的时候会给那些人发送消息,把这些人放在一起,方便组播,因为公司都是分部门,分小组的嘛。
这里我们添加警告组,将开发人dev2020添加进去

8.2.3 Worker分组

在这里插入图片描述

因为这里部署的单台worker,所以不能进行编辑,解释一下,我们部署多台worker的时候,肯定会有想手工指定执行机器的需求,那么这个时候我们的worker就体现了价值,他将我们的多台worker进行分组,这样我们就能手工指定任务的执行节点。

在这里插入图片描述

点击“创建Worker分组”按钮,创建Worker分组。worker分组内有多个ip地址(不能写别名),以英文逗号分隔

8.2.4 列队

  • 队列是在执行spark、mapreduce等程序,需要用到“队列”参数时使用的。
    在这里插入图片描述

8.2.5 令牌

由于后端接口有登录检查,令牌管理提供了一种可以通过调用接口的方式对系统进行各种操作。

管理员进入安全中心->令牌管理页面,点击“创建令牌”按钮,选择失效时间与用户,点击"生成令牌"按钮,点击"提交"按钮,则选择用户的token创建成功。

在这里插入图片描述

普通用户登录后,点击用户名下拉框中的用户信息,进入令牌管理页面,选择失效时间,点击"生成令牌"按钮,点击"提交"按钮,则该用户创建token成功。

在这里插入图片描述

  • 调用示例:
 /**
     * test token
     */
    public  void doPOSTParam()throws Exception{
        // create HttpClient
        CloseableHttpClient httpclient = HttpClients.createDefault();

        // create http post request
        HttpPost httpPost = new HttpPost("http://127.0.0.1:12345/escheduler/projects/create");
        httpPost.setHeader("token", "123");
        // set parameters
        List<NameValuePair> parameters = new ArrayList<NameValuePair>();
        parameters.add(new BasicNameValuePair("projectName", "qzw"));
        parameters.add(new BasicNameValuePair("desc", "qzw"));
        UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters);
        httpPost.setEntity(formEntity);
        CloseableHttpResponse response = null;
        try {
            // execute
            response = httpclient.execute(httpPost);
            // response status code 200
            if (response.getStatusLine().getStatusCode() == 200) {
                String content = EntityUtils.toString(response.getEntity(), "UTF-8");
                System.out.println(content);
            }
        } finally {
            if (response != null) {
                response.close();
            }
            httpclient.close();
        }
    }

8.2.6 权限

授予权限包括项目权限,资源权限,数据源权限,UDF函数权限。

管理员可以对普通用户进行非其创建的项目、资源、数据源和UDF函数进行授权。因为项目、资源、数据源和UDF函数授权方式都是一样的,所以以项目授权为例介绍。
注意:对于用户自己创建的项目,该用户拥有所有的权限。则项目列表和已选项目列表中不会显示。

  • 管理员进入安全中心->用户管理页面,点击需授权用户的“授权”按钮,如下图所示:

在这里插入图片描述

  • 选择项目,进行项目授权。
    在这里插入图片描述
  • 资源、数据源、UDF函数授权同项目授权。

8.2.7 首页

  • 首页包含用户所有项目的任务状态统计、流程状态统计、工作流定义统计。
    在这里插入图片描述
    在这里插入图片描述

8.2.8 监控

  • master监控
    在这里插入图片描述
  • worker监控
    在这里插入图片描述
  • Zookeeper监控
    在这里插入图片描述
  • DB监控
    在这里插入图片描述
  • 统计管理
    在这里插入图片描述
  • 待执行命令数:统计t_ds_command表的数据
  • 执行失败的命令数:统计t_ds_error_command表的数据
  • 待运行任务数:统计Zookeeper中task_queue的数据
  • 待杀死任务数:统计Zookeeper中task_kill的数据

8.2.9 资源中心

8.2.9.1 文件管理

是对各种资源文件的管理,包括创建基本的txt/log/sh/conf/py/java等文件、上传jar包等各种类型文件,可进行编辑、重命名、下载、删除等操作。

在这里插入图片描述
在这里插入图片描述

  • 创建文件

文件格式支持以下几种类型:txt、log、sh、conf、cfg、py、java、sql、xml、hql、properties

在这里插入图片描述

  • 查看文件

在这里插入图片描述

还可以对文件进行上传和下载哦!

  • 删除

文件列表->点击"删除"按钮,删除指定文件

8.2.9.2 UDF管理
  • 资源管理

资源管理和文件管理功能类似,不同之处是资源管理是上传的UDF函数,文件管理上传的是用户程序,脚本及配置文件 操作功能:重命名、下载、删除。

  • 上传udf资源

和上传文件相同。

  • 函数管理
  • 创建udf函数

点击“创建UDF函数”,输入udf函数参数,选择udf资源,点击“提交”,创建udf函数。

目前只支持HIVE的临时UDF函数

  • UDF函数名称:输入UDF函数时的名称
  • 包名类名:输入UDF函数的全路径
  • UDF资源:设置创建的UDF对应的资源文件

在这里插入图片描述
在这里插入图片描述

8.2.10 数据源中心

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

8.2.10.1 创建/编辑Mysq数据源
  1. 点击“数据源中心->创建数据源”,根据需求创建不同类型的数据源。
  2. 数据源:选择MYSQL
  3. 数据源名称:输入数据源的名称
  4. 描述:输入数据源的描述
  5. IP主机名:输入连接MySQL的IP
  6. 端口:输入连接MySQL的端口
  7. 用户名:设置连接MySQL的用户名
  8. 密码:设置连接MySQL的密码
  9. 数据库名:输入连接MySQL的数据库名称
  10. Jdbc连接参数:用于MySQL连接的参数设置,以JSON形式填写

在这里插入图片描述

8.2.10.2 创建/编辑Hive数据源
  1. 数据源:选择HIVE
  2. 数据源名称:输入数据源的名称
  3. 描述:输入数据源的描述
  4. IP/主机名:输入连接HIVE的IP
  5. 端口:输入连接HIVE的端口
  6. 用户名:设置连接HIVE的用户名
  7. 密码:设置连接HIVE的密码
  8. 数据库名:输入连接HIVE的数据库名称
  9. Jdbc连接参数:用于HIVE连接的参数设置,以JSON形式填写
    在这里插入图片描述
8.2.10.3 创建/编辑POSTGRESQL数据源
  1. 数据源:选择POSTGRESQL
  2. 数据源名称:输入数据源的名称
  3. 描述:输入数据源的描述
  4. IP/主机名:输入连接POSTGRESQL的IP
  5. 端口:输入连接POSTGRESQL的端口
  6. 用户名:设置连接POSTGRESQL的用户名
  7. 密码:设置连接POSTGRESQL的密码
  8. 数据库名:输入连接POSTGRESQL的数据库名称
  9. Jdbc连接参数:用于POSTGRESQL连接的参数设置,以JSON形式填写

在这里插入图片描述

8.2.10.4 创建/编辑Spark数据源
  1. 数据源:选择Spark
  2. 数据源名称:输入数据源的名称
  3. 描述:输入数据源的描述
  4. IP/主机名:输入连接Spark的IP
  5. 端口:输入连接Spark的端口
  6. 用户名:设置连接Spark的用户名
  7. 密码:设置连接Spark的密码
  8. 数据库名:输入连接Spark的数据库名称
  9. Jdbc连接参数:用于Spark连接的参数设置,以JSON形式填写

在这里插入图片描述

注意:如果开启了kerberos,则需要填写 Principal

在这里插入图片描述

8.2.11 项目管理

要编辑我们的任务流,首先要有项目,使用我们的开发账号dev2020登录

  • 点击"项目管理"进入项目管理页面,点击“创建项目”按钮,输入项目名称,项目描述,点击“提交”,创建新的项目。
    在这里插入图片描述
  • 项目首页

在项目管理页面点击项目名称链接,进入项目首页,如下图所示,项目首页包含该项目的任务状态统计、流程状态统计、工作流定义统计。

  • 任务状态统计:在指定时间范围内,统计任务实例中状态为提交成功、正在运行、准备暂停、暂停、准备停止、停止、失败、成功、需要容错、kill、等待线程的个数
  • 流程状态统计:在指定时间范围内,统计工作流实例中状态为提交成功、正在运行、准备暂停、暂停、准备停止、停止、失败、成功、需要容错、kill、等待线程的个数
  • 工作流定义统计:统计用户创建的工作流定义及管理员授予该用户的工作流定义

在这里插入图片描述

8.2.11.1 创建工作流定义

点击项目管理->工作流->工作流定义,进入工作流定义页面,点击“创建工作流”按钮,进入工作流DAG编辑页面,如下图所示:

在这里插入图片描述

  • 工具栏中在这里插入图片描述拖拽到画板中,新增一个Shell任务,如下图所示:

在这里插入图片描述
添加shell任务的参数设置:

  1. 填写“节点名称”,“描述”,“脚本”字段;
  2. “运行标志”勾选“正常”,若勾选“禁止执行”,运行工作流不会执行该任务;
  3. 选择“任务优先级”:当worker线程数不足时,级别高的任务在执行队列中会优先执行,相同优先级的任务按照先进先出的顺序执行;
  4. 超时告警(非必选):勾选超时告警、超时失败,填写“超时时长”,当任务执行时间超过超时时长,会发送告警邮件并且任务超时失败;
  5. 资源(非必选)。资源文件是资源中心->文件管理页面创建或上传的文件,如文件名为test.sh,脚本中调用资源命令为sh test.sh;
  6. 自定义参数(非必填),参考https://dolphinscheduler.apache.org/zh-cn/docs/1.3.1/user_doc/system-manual.html#UserDefinedParameters
  7. 点击"确认添加"按钮,保存任务设置。

增加任务执行的先后顺序: 点击右上角图标连接任务;如下图所示,任务2和任务3并行执行,当任务1执行完,任务2、3会同时执行。
在这里插入图片描述

  • 删除依赖关系: 点击右上角"箭头"图标在这里插入图片描述,选中连接线,点击右上角"删除"图标在这里插入图片描述,删除任务间的依赖关系。
    在这里插入图片描述
  • 保存工作流定义:
    点击”保存“按钮,弹出"设置DAG图名称"弹框,如下图所示,输入工作流定义名称,工作流定义描述,设置全局参数(选填,参考https://dolphinscheduler.apache.org/zh-cn/docs/1.3.1/user_doc/system-manual.html#UserDefinedParameters),点击"添加"按钮,工作流定义创建成功。
    在这里插入图片描述
  • 其他类型任务,请参考
    https://dolphinscheduler.apache.org/zh-cn/docs/1.3.1/user_doc/system-manual.html#TaskParamers。
8.2.11.2 工作流定义操作功能

点击项目管理->工作流->工作流定义,进入工作流定义页面,如下图所示:

在这里插入图片描述
工作流定义列表的操作功能如下:

  1. 编辑: 只能编辑"下线"的工作流定义。工作流DAG编辑同创建工作流定义。
  2. 上线: 工作流状态为"下线"时,上线工作流,只有"上线"状态的工作流能运行,但不能编辑。
  3. 下线: 工作流状态为"上线"时,下线工作流,下线状态的工作流可以编辑,但不能运行。
  4. 运行: 只有上线的工作流能运行。
  5. 定时: 只有上线的工作流能设置定时,系统自动定时调度工作流运行。创建定时后的状态为"下线",需在定时管理页面上线定时才生效。
  6. 定时管理: 定时管理页面可编辑、上线/下线、删除定时。 删除: 删除工作流定义。
  7. 下载: 下载工作流定义到本地。
  8. 树形图: 以树形结构展示任务节点的类型及任务状态,如下图所示:
    在这里插入图片描述
8.2.11.3 运行工作流

点击项目管理->工作流->工作流定义,进入工作流定义页面,如下图所示,点击"上线"按钮在这里插入图片描述,上线工作流。

在这里插入图片描述

点击”运行“按钮,弹出启动参数设置弹框,如下图所示,设置启动参数,点击弹框中的"运行"按钮,工作流开始运行,工作流实例页面生成一条工作流实例。

在这里插入图片描述

运行参数说明

  1. 失败策略:当某一个任务节点执行失败时,其他并行的任务节点需要执行的策略。”继续“表示:某一任务失败后,其他任务节点正常执行;”结束“表示:终止所有正在执行的任务,并终止整个流程。

  2. 通知策略:当流程结束,根据流程状态发送流程执行信息通知邮件,包含任何状态都不发,成功发,失败发,成功或失败都发。

  3. 流程优先级:流程运行的优先级,分五个等级:最高(HIGHEST),高(HIGH),中(MEDIUM),低(LOW),最低(LOWEST)。当master线程数不足时,级别高的流程在执行队列中会优先执行,相同优先级的流程按照先进先出的顺序执行。

  4. worker分组:该流程只能在指定的worker机器组里执行。默认是Default,可以在任一worker上执行。

  5. 通知组:选择通知策略||超时报警||发生容错时,会发送流程信息或邮件到通知组里的所有成员。

  6. 收件人:选择通知策略||超时报警||发生容错时,会发送流程信息或告警邮件到收件人列表。

  7. 抄送人:选择通知策略||超时报警||发生容错时,会抄送流程信息或告警邮件到抄送人列表。

  8. 补数:包括串行补数、并行补数2种模式。串行补数:指定时间范围内,从开始日期至结束日期依次执行补数,只生成一条流程实例;并行补数:指定时间范围内,多天同时进行补数,生成N条流程实例。

补数:执行指定日期的工作流定义,可以选择补数时间范围(目前只支持针对连续的天进行补数),比如需要补5月1号到5月10号的数据,如下图所示:
在这里插入图片描述

串行模式:补数从5月1号到5月10号依次执行,流程实例页面生成一条流程实例;

并行模式:同时执行5月1号到5月10号的任务,流程实例页面生成十条流程实例。

8.2.11.4 工作流定时

创建定时:点击项目管理->工作流->工作流定义,进入工作流定义页面,上线工作流,点击"定时"按钮,弹出定时参数设置弹框,如下图所示:

在这里插入图片描述

  • 选择起止时间。在起止时间范围内,定时运行工作流;不在起止时间范围内,不再产生定时工作流实例。
  • 添加一个每天凌晨5点执行一次的定时,如下图所示:
    在这里插入图片描述
  • 失败策略、通知策略、流程优先级、Worker分组、通知组、收件人、抄送人同https://dolphinscheduler.apache.org/zh-cn/docs/1.3.1/user_doc/system-manual.html#runParamers。
  • 点击"创建"按钮,创建定时成功,此时定时状态为"下线",定时需上线才生效。
  • 定时上线:点击"定时管理"按钮,进入定时管理页面,点击"上线"按钮,定时状态变为"上线",如下图所示,工作流定时生效。
    在这里插入图片描述
8.2.11.5 导入工作流

点击项目管理->工作流->工作流定义,进入工作流定义页面,点击"导入工作流"按钮,导入本地工作流文件,工作流定义列表显示导入的工作流,状态为下线。

8.2.11.6 查看工作流实例
  • 点击项目管理->工作流->工作流实例,进入工作流实例页面,如下图所示:
    在这里插入图片描述
  • 点击工作流名称,进入DAG查看页面,查看任务执行状态,如下图所示。
    在这里插入图片描述
8.2.11.7 查看任务日志
  • 进入工作流实例页面,点击工作流名称,进入DAG查看页面,双击任务节点,如下图所示:
    在这里插入图片描述
  • 点击"查看日志",弹出日志弹框,如下图所示,任务实例页面也可查看任务日志,参考https://dolphinscheduler.apache.org/zh-cn/docs/1.3.1/user_doc/system-manual.html#taskLog。
    在这里插入图片描述
8.2.11.8 查看任务历史记录
  • 点击项目管理->工作流->工作流实例,进入工作流实例页面,点击工作流名称,进入工作流DAG页面;
  • 双击任务节点,如下图所示,点击"查看历史",跳转到任务实例页面,并展示该工作流实例运行的任务实例列表
    在这里插入图片描述
8.2.11.9 查看运行参数

点击项目管理->工作流->工作流实例,进入工作流实例页面,点击工作流名称,进入工作流DAG页面;
点击左上角图标在这里插入图片描述,查看工作流实例的启动参数;点击图标在这里插入图片描述),查看工作流实例的全局参数和局部参数,如下图所示:

在这里插入图片描述

8.2.11.10 工作流实例操作功能
  • 点击项目管理->工作流->工作流实例,进入工作流实例页面,如下图所示:
    在这里插入图片描述
  • 编辑:只能编辑已终止的流程。点击"编辑"按钮或工作流实例名称进入DAG编辑页面,编辑后点击"保存"按钮,弹出保存DAG弹框,如下图所示,在弹框中勾选"是否更新到工作流定义",保存后则更新工作流定义;若不勾选,则不更新工作流定义。
    在这里插入图片描述
  • 重跑:重新执行已经终止的流程。
  • 恢复失败: 针对失败的流程,可以执行恢复失败操作,从失败的节点开始执行。
  • 停止: 对正在运行的流程进行停止操作,后台会先killworker进程,再执行kill -9操作
  • 暂停: 对正在运行的流程进行暂停操作,系统状态变为等待执行,会等待正在执行的任务结束,暂停下一个要执行的任务。
  • 恢复暂停: 对暂停的流程恢复,直接从暂停的节点开始运行
  • 删除: 删除工作流实例及工作流实例下的任务实例
  • 甘特图: Gantt图纵轴是某个工作流实例下的任务实例的拓扑排序,横轴是任务实例的运行时间,如图示:
    在这里插入图片描述
8.2.11.11 任务实例
  • 点击项目管理->工作流->任务实例,进入任务实例页面,如下图所示,点击工作流实例名称,可跳转到工作流实例DAG图查看任务状态。
    在这里插入图片描述
  • 查看日志:点击操作列中的“查看日志”按钮,可以查看任务执行的日志情况。

8.2.12 任务节点类型和参数设置

8.2.12.1 Shell节点

shell节点,在worker执行的时候,会生成一个临时shell脚本,使用租户同名的linux用户执行这个脚本。

  • 点击项目管理-项目名称-工作流定义,点击"创建工作流"按钮,进入DAG编辑页面。
  • 工具栏中拖动在这里插入图片描述到画板中,如下图所示:
    在这里插入图片描述
  • 节点名称:一个工作流定义中的节点名称是唯一的。
  • 运行标志:标识这个节点是否能正常调度,如果不需要执行,可以打开禁止执行开关。
  • 描述信息:描述该节点的功能。
  • 任务优先级:worker线程数不足时,根据优先级从高到低依次执行,优先级一样时根据先进先出原则执行。
  • Worker分组:任务分配给worker组的机器机执行,选择Default,会随机选择一台worker机执行。
  • 失败重试次数:任务失败重新提交的次数,支持下拉和手填。
  • 失败重试间隔:任务失败重新提交任务的时间间隔,支持下拉和手填。
  • 超时告警:勾选超时告警、超时失败,当任务超过"超时时长"后,会发送告警邮件并且任务执行失败.
  • 脚本:用户开发的SHELL程序。
  • 资源:是指脚本中需要调用的资源文件列表,资源中心-文件管理上传或创建的文件。
  • 自定义参数:是SHELL局部的用户自定义参数,会替换脚本中以${变量}的内容。
8.2.12.2 子流程节点
  • 子流程节点,就是把外部的某个工作流定义当做一个任务节点去执行。

拖动工具栏中的在这里插入图片描述任务节点到画板中,如下图所示:

在这里插入图片描述

  • 节点名称:一个工作流定义中的节点名称是唯一的
  • 运行标志:标识这个节点是否能正常调度
  • 描述信息:描述该节点的功能
  • 超时告警:勾选超时告警、超时失败,当任务超过"超时时长"后,会发送告警邮件并且任务执行失败.
  • 子节点:是选择子流程的工作流定义,右上角进入该子节点可以跳转到所选子流程的工作流定义
8.2.12.3 依赖(DEPENDENT)节点
  • 依赖节点,就是依赖检查节点。比如A流程依赖昨天的B流程执行成功,依赖节点会去检查B流程在昨天是否有执行成功的实例。

拖动工具栏中的任务节点在这里插入图片描述到画板中,如下图所示:

在这里插入图片描述

依赖节点提供了逻辑判断功能,比如检查昨天的B流程是否成功,或者C流程是否执行成功。

在这里插入图片描述

例如,A流程为周报任务,B、C流程为天任务,A任务需要B、C任务在上周的每一天都执行成功,如图示:

在这里插入图片描述

假如,周报A同时还需要自身在上周二执行成功:

在这里插入图片描述

8.2.12.4 存储过程节点
  • 根据选择的数据源,执行存储过程。

拖动工具栏中的在这里插入图片描述任务节点到画板中,如下图所示:

在这里插入图片描述

  • 数据源:存储过程的数据源类型支持MySQL和POSTGRESQL两种,选择对应的数据源
  • 方法:是存储过程的方法名称
  • 自定义参数:存储过程的自定义参数类型支持IN、OUT两种,数据类型支持VARCHAR、INTEGER、LONG、FLOAT、DOUBLE、DATE、TIME、TIMESTAMP、BOOLEAN九种数据类型
8.2.12.5 SQL节点
  • 拖动工具栏中的在这里插入图片描述任务节点到画板中
  • 非查询SQL功能:编辑非查询SQL任务信息,sql类型选择非查询,如下图所示:
    在这里插入图片描述
  • 查询SQL功能:编辑查询SQL任务信息,sql类型选择查询,选择表格或附件形式发送邮件到指定的收件人,如下图所示。
    在这里插入图片描述
  • 数据源:选择对应的数据源
  • sql类型:支持查询和非查询两种,查询是select类型的查询,是有结果集返回的,可以指定邮件通知为表格、附件或表格附件三种模板。非查询是没有结果集返回的,是针对update、delete、insert三种类型的操作。
  • sql参数:输入参数格式为key1=value1;key2=value2…
  • sql语句:SQL语句
  • UDF函数:对于HIVE类型的数据源,可以引用资源中心中创建的UDF函数,其他类型的数据源暂不支持UDF函数。
  • 自定义参数:SQL任务类型,而存储过程是自定义参数顺序的给方法设置值自定义参数类型和数据类型同存储过程任务类型一样。区别在于SQL任务类型自定义参数会替换sql语句中${变量}。
  • 前置sql:前置sql在sql语句之前执行。
  • 后置sql:后置sql在sql语句之后执行。
8.2.12.6 SPARK节点
  • 通过SPARK节点,可以直接直接执行SPARK程序,对于spark节点,worker会使用spark-submit方式提交任务

拖动工具栏中的在这里插入图片描述任务节点到画板中,如下图所示:

在这里插入图片描述

  • 程序类型:支持JAVA、Scala和Python三种语言
  • 主函数的class:是Spark程序的入口Main Class的全路径
  • 主jar包:是Spark的jar包
  • 部署方式:支持yarn-cluster、yarn-client和local三种模式
  • Driver内核数:可以设置Driver内核数及内存数
  • Executor数量:可以设置Executor数量、Executor内存数和Executor内核数
  • 命令行参数:是设置Spark程序的输入参数,支持自定义参数变量的替换。
  • 其他参数:支持 --jars、–files、–archives、–conf格式
  • 资源:如果其他参数中引用了资源文件,需要在资源中选择指定
  • 自定义参数:是MR局部的用户自定义参数,会替换脚本中以${变量}的内容

注意:JAVA和Scala只是用来标识,没有区别,如果是Python开发的Spark则没有主函数的class,其他都是一样

8.2.12.7 MapReduce(MR)节点
  • 使用MR节点,可以直接执行MR程序。对于mr节点,worker会使用hadoop jar方式提交任务

拖动工具栏中的在这里插入图片描述任务节点到画板中,如下图所示:

1. JAVA程序

在这里插入图片描述

  • 主函数的class:是MR程序的入口Main Class的全路径
  • 程序类型:选择JAVA语言
  • 主jar包:是MR的jar包
  • 命令行参数:是设置MR程序的输入参数,支持自定义参数变量的替换
  • 其他参数:支持 –D、-files、-libjars、-archives格式
  • 资源: 如果其他参数中引用了资源文件,需要在资源中选择指定
  • 自定义参数:是MR局部的用户自定义参数,会替换脚本中以${变量}的内容

2. Python程序
在这里插入图片描述

  • 程序类型:选择Python语言
  • 主jar包:是运行MR的Python jar包
  • 其他参数:支持 –D、-mapper、-reducer、-input -output格式,这里可以设置用户自定义参数的输入,比如:
    -mapper “mapper.py 1” -file mapper.py -reducer reducer.py -file reducer.py –input /journey/words.txt -output
    /journey/out/mr/${currentTimeMillis} 其中 -mapper 后的 mapper.py
    1是两个参数,第一个参数是mapper.py,第二个参数是1
  • 资源: 如果其他参数中引用了资源文件,需要在资源中选择指定
  • 自定义参数:是MR局部的用户自定义参数,会替换脚本中以${变量}的内容
8.2.12.8 Python节点
  • 使用python节点,可以直接执行python脚本,对于python节点,worker会使用python **方式提交任务。

拖动工具栏中的在这里插入图片描述任务节点到画板中,如下图所示:

在这里插入图片描述

  • 脚本:用户开发的Python程序
  • 资源:是指脚本中需要调用的资源文件列表
  • 自定义参数:是Python局部的用户自定义参数,会替换脚本中以${变量}的内容
8.2.12.9 Flink节点
  • 拖动工具栏中的在这里插入图片描述任务节点到画板中,如下图所示:
    在这里插入图片描述
  • 程序类型:支持JAVA、Scala和Python三种语言
  • 主函数的class:是Flink程序的入口Main Class的全路径
  • 主jar包:是Flink的jar包
  • 部署方式:支持cluster、local三种模式
  • slot数量:可以设置slot数
  • taskManage数量:可以设置taskManage数
  • jobManager内存数:可以设置jobManager内存数
  • taskManager内存数:可以设置taskManager内存数
  • 命令行参数:是设置Spark程序的输入参数,支持自定义参数变量的替换。
  • 其他参数:支持 --jars、–files、–archives、–conf格式
  • 资源:如果其他参数中引用了资源文件,需要在资源中选择指定
  • 自定义参数:是Flink局部的用户自定义参数,会替换脚本中以${变量}的内容

注意:JAVA和Scala只是用来标识,没有区别,如果是Python开发的Flink则没有主函数的class,其他都是一样

8.2.12.10 http节点
  • 拖动工具栏中的在这里插入图片描述任务节点到画板中,如下图所示:
    在这里插入图片描述
  • 节点名称:一个工作流定义中的节点名称是唯一的。
  • 运行标志:标识这个节点是否能正常调度,如果不需要执行,可以打开禁止执行开关。
  • 描述信息:描述该节点的功能。
  • 任务优先级:worker线程数不足时,根据优先级从高到低依次执行,优先级一样时根据先进先出原则执行。
  • Worker分组:任务分配给worker组的机器机执行,选择Default,会随机选择一台worker机执行。
  • 失败重试次数:任务失败重新提交的次数,支持下拉和手填。
  • 失败重试间隔:任务失败重新提交任务的时间间隔,支持下拉和手填。
  • 超时告警:勾选超时告警、超时失败,当任务超过"超时时长"后,会发送告警邮件并且任务执行失败.
  • 请求地址:http请求URL。
  • 请求类型:支持GET、POSt、HEAD、PUT、DELETE。
  • 请求参数:支持Parameter、Body、Headers。
  • 校验条件:支持默认响应码、自定义响应码、内容包含、内容不包含。
  • 校验内容:当校验条件选择自定义响应码、内容包含、内容不包含时,需填写校验内容。
  • 自定义参数:是http局部的用户自定义参数,会替换脚本中以${变量}的内容。
8.2.12.11 DATAX节点
  • 拖动工具栏中的在这里插入图片描述任务节点到画板中
    在这里插入图片描述
  • 自定义模板:打开自定义模板开关时,可以自定义datax节点的json配置文件内容(适用于控件配置不满足需求时)
  • 数据源:选择抽取数据的数据源
  • sql语句:目标库抽取数据的sql语句,节点执行时自动解析sql查询列名,映射为目标表同步列名,源表和目标表列名不一致时,可以通过列别名(as)转换
  • 目标库:选择数据同步的目标库
  • 目标表:数据同步的目标表名
  • 前置sql:前置sql在sql语句之前执行(目标库执行)。
  • 后置sql:后置sql在sql语句之后执行(目标库执行)。
  • json:datax同步的json配置文件
  • 自定义参数:SQL任务类型,而存储过程是自定义参数顺序的给方法设置值自定义参数类型和数据类型同存储过程任务类型一样。区别在于SQL任务类型自定义参数会替换sql语句中${变量}。

8.2.13 参数

8.2.13.1 系统参数
变量含义
${system.biz.date}日常调度实例定时的定时时间前一天,格式为 yyyyMMdd,补数据时,该日期 +1
${system.biz.curdate}日常调度实例定时的定时时间,格式为 yyyyMMdd,补数据时,该日期 +1
${system.datetime}日常调度实例定时的定时时间,格式为 yyyyMMddHHmmss,补数据时,该日期 +1
8.2.13.2 时间自定义参数
  • 支持代码中自定义变量名,声明方式:${变量名}。可以是引用 “系统参数” 或指定 “常量”。
  • 我们定义这种基准变量为 […] 格式的,[yyyyMMddHHmmss] 是可以任意分解组合的,比如:$[yyyyMMdd],
    $[HHmmss], $[yyyy-MM-dd] 等
  • 也可以使用以下格式:
 - 后 N 年:$[add_months(yyyyMMdd,12*N)]
 - 前 N 年:$[add_months(yyyyMMdd,-12*N)]
 - 后 N 月:$[add_months(yyyyMMdd,N)]
 - 前 N 月:$[add_months(yyyyMMdd,-N)]
 - 后 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]
8.2.13.3 用户自定义参数
  • 用户自定义参数分为全局参数和局部参数。全局参数是保存工作流定义和工作流实例的时候传递的全局参数,全局参数可以在整个流程中的任何一个任务节点的局部参数引用。
    例如:
    在这里插入图片描述
  • global_bizdate为全局参数,引用的是系统参数。
    在这里插入图片描述
  • 任务中local_param_bizdate通过 g l o b a l b i z d a t e 来 引 用 全 局 参 数 , 对 于 脚 本 可 以 通 过 {global_bizdate}来引用全局参数,对于脚本可以通过 globalbizdate{local_param_bizdate}来引全局变量global_bizdate的值,或通过JDBC直接将local_param_bizdate的值set进去

附录.队列管理

Q : DolphinScheduler中的队列怎么用,用户队列和租户队列是什么意思
A : DolphinScheduler 中的队列可以在用户或者租户上指定队列,用户指定的队列优先级是高于租户队列的优先级的。例如:对MR任务指定队列,是通过 mapreduce.job.queuename 来指定队列的。

# 注意:MR在用以上方法指定队列的时候,传递参数请使用如下方式:
Configuration conf = new Configuration();
GenericOptionsParser optionParser = new GenericOptionsParser(conf, args);
String[] remainingArgs = optionParser.getRemainingArgs();

# 如果是Spark任务 --queue 方式指定队列

附录.令牌管理

调用示例:

/**
 * test token
 */
public  void doPOSTParam()throws Exception{
    // create HttpClient
    CloseableHttpClient httpclient = HttpClients.createDefault();

    // create http post request
    HttpPost httpPost = new HttpPost("http://127.0.0.1:12345/dolphinscheduler/projects/create");
    httpPost.setHeader("token", "123");
    // set parameters
    List<NameValuePair> parameters = new ArrayList<NameValuePair>();
    parameters.add(new BasicNameValuePair("projectName", "qzw"));
    parameters.add(new BasicNameValuePair("desc", "qzw"));
    UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters);
    httpPost.setEntity(formEntity);
    CloseableHttpResponse response = null;
    try {
        // execute
        response = httpclient.execute(httpPost);
        // response status code 200
        if (response.getStatusLine().getStatusCode() == 200) {
            String content = EntityUtils.toString(response.getEntity(), "UTF-8");
            System.out.println(content);
        }
    } finally {
        if (response != null) {
            response.close();
        }
        httpclient.close();
    }
}
ration conf = new Configuration();
GenericOptionsParser optionParser = new GenericOptionsParser(conf, args);
String[] remainingArgs = optionParser.getRemainingArgs();
# 如果是Spark任务 --queue 方式指定队列

附录.令牌管理

调用示例:

/**
 * test token
 */
public  void doPOSTParam()throws Exception{
    // create HttpClient
    CloseableHttpClient httpclient = HttpClients.createDefault();

    // create http post request
    HttpPost httpPost = new HttpPost("http://127.0.0.1:12345/dolphinscheduler/projects/create");
    httpPost.setHeader("token", "123");
    // set parameters
    List<NameValuePair> parameters = new ArrayList<NameValuePair>();
    parameters.add(new BasicNameValuePair("projectName", "qzw"));
    parameters.add(new BasicNameValuePair("desc", "qzw"));
    UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters);
    httpPost.setEntity(formEntity);
    CloseableHttpResponse response = null;
    try {
        // execute
        response = httpclient.execute(httpPost);
        // response status code 200
        if (response.getStatusLine().getStatusCode() == 200) {
            String content = EntityUtils.toString(response.getEntity(), "UTF-8");
            System.out.println(content);
        }
    } finally {
        if (response != null) {
            response.close();
        }
        httpclient.close();
    }
}
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
dolphinscheduler是一个分布式任务调度平台,可以在Linux系统上进行部署。以下是dolphinscheduler在Linux上的部署步骤: 1. 首先,请下载最新版本的dolphinscheduler后端安装包,并将其上传至服务器的目标部署目录,例如创建/opt/dolphinscheduler作为安装部署目录。 2. 解压安装包,执行以下命令: ``` mkdir -p /opt/dolphinscheduler cd /opt/dolphinscheduler tar -zxvf apache-dolphinscheduler-incubating-1.3.1-dolphinscheduler-bin.tar.gz -C /opt/dolphinscheduler mv apache-dolphinscheduler-incubating-1.3.1-dolphinscheduler-bin dolphinscheduler-bin ``` 3. 创建部署用户并赋予目录操作权限。以创建dolphinscheduler用户为例: ``` useradd dolphinscheduler echo "dolphinscheduler" | passwd --stdin dolphinscheduler sed -i '$adolphinscheduler ALL=(ALL) NOPASSWD: NOPASSWD: ALL' /etc/sudoers sed -i 's/Defaults requirett/#Defaults requirett/g' /etc/sudoers chown -R dolphinscheduler:dolphinscheduler dolphinscheduler-bin ``` 4. 如果需要使用资源中心功能,请执行以下命令: ``` sudo mkdir /data/dolphinscheduler sudo chown -R dolphinscheduler:dolphinscheduler /data/dolphinscheduler ``` 5. 切换到部署用户,执行一键部署脚本: ``` sh install.sh ``` 6. 部署成功后,可以通过访问前端页面地址来登录系统。前端页面地址为http://服务器IP地址:12345/dolphinscheduler,默认用户名和密码为admin/dolphinscheduler123。 7. 若要启停服务,可以使用以下命令: ``` # 一键停止集群所有服务 sh ./bin/stop-all.sh # 一键开启集群所有服务 sh ./bin/start-all.sh # 启停Master sh ./bin/dolphinscheduler-daemon.sh start master-server sh ./bin/dolphinscheduler-daemon.sh stop master-server # 启停Worker sh ./bin/dolphinscheduler-daemon.sh start worker-server sh ./bin/dolphinscheduler-daemon.sh stop worker-server # 启停Api sh ./bin/dolphinscheduler-daemon.sh start api-server sh ./bin/dolphinscheduler-daemon.sh stop api-server # 启停Logger sh ./bin/dolphinscheduler-daemon.sh start logger-server sh ./bin/dolphinscheduler-daemon.sh stop logger-server # 启停Alert sh ./bin/dolphinscheduler-daemon.sh start alert-server sh ./bin/dolphinscheduler-daemon.sh stop alert-server ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明月清风,良宵美酒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值