環境篇:DolphinScheduler-1.3.1安裝部署
1 配置jdk
JDK百度網盤:https://pan.baidu.com/s/1og3mfefJrwl1QGZGZDZ8Sw 提取碼:t6l1
#查看命令
rpm -qa | grep java
#刪除命令
rpm -e --nodeps xxx
- 將oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm上傳至每個節點安裝
rpm -ivh oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm
- 修改配置文件
vim /etc/profile
#添加
export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
- 刷新源
source /etc/profile
- 檢驗
java
javac
2 pip、kazoo 安裝
yum -y install epel-release
yum -y install python-pip
yum -y install pip
pip --version
pip install kazoo
#使用python
#import kazoo,不報錯即可
3 下載二進制tar.gz包
請下載最新版本的后端安裝包至服務器部署目錄,比如創建 /opt/dolphinscheduler 做為安裝部署目錄
https://dolphinscheduler.apache.org/zh-cn/docs/release/download.html
# 創建部署目錄,部署目錄請不要創建在/root、/home等高權限目錄
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
4 創建用戶
# 創建部署用戶並賦予密碼
userdel -r dolphinscheduler
useradd dolphinscheduler && echo dolphinscheduler | passwd --stdin dolphinscheduler
# 配置sudo免密
sed -i '$adolphinscheduler ALL=(ALL) NOPASSWD: NOPASSWD: ALL' /etc/sudoers
sed -i 's/Defaults requirett/#Defaults requirett/g' /etc/sudoers
# 修改目錄權限,使得部署用戶對dolphinscheduler-bin目錄有操作權限
chown -R dolphinscheduler:dolphinscheduler dolphinscheduler-bin
注意:
- 因為任務執行服務是以 sudo -u {linux-user} 切換不同linux用戶的方式來實現多租戶運行作業,所以部署用戶需要有 sudo 權限,而且是免密的。初學習者不理解的話,完全可以暫時忽略這一點
- 如果發現/etc/sudoers文件中有"Default requiretty"這行,也請注釋掉
- 如果用到資源上傳的話,還需要給該部署用戶分配操作本地文件系統或者HDFS或者MinIO的權限
5 對部署用戶配置免密
所有節點
su dolphinscheduler
#生成密鑰對(公鑰和私鑰)三次回車生成密鑰
ssh-keygen -t rsa
#查看公鑰
cat ~/.ssh/id_rsa.pub
#將密匙輸出到/root/.ssh/authorized_keys
cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
#注意:正常設置后,dolphinscheduler用戶在執行命令ssh localhost 是不需要再輸入密碼的(請進行測試)
- 以下是集群配置需要進行多機器免密,如果是單機請忽略
主節點
#追加密鑰到主節點(需要操作及密碼驗證,追加完后查看一下該文件)--在主節點上操作,拷取從節點密匙
ssh 從節點機器IP cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
cat ~/.ssh/authorized_keys
#從主節點復制密鑰到從節點
scp ~/.ssh/authorized_keys dolphinscheduler@從節點機器IP:~/.ssh/authorized_keys
所有節點互相進行ssh連接
ssh dolphinscheduler@172.xx.xx.xxx
ssh dolphinscheduler@172.xx.xx.xxx
7 部署mysql用戶
因為我們並沒有選擇默認數據庫PostgreSQL,故進入mysql數據庫
# 設置數據用戶 dolphinscheduler 的訪問密碼為 dolphinscheduler,並且不對訪問的 ip 做限制
# 測試環境將訪問設置為所有,如果是生產,可以限制只能子網段的ip才能訪問('192.168.1.%')
CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'dolphinscheduler'@'%' IDENTIFIED BY 'dolphinscheduler';
GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'dolphinscheduler'@'localhost' IDENTIFIED BY 'dolphinscheduler';
flush privileges;
8 創建表和導入基礎數據
- 修改datasource.properties中的下列屬性
vim conf/datasource.properties
#注意:注釋postgre連接,打開mysql連接
>>>>
#注意:注釋postgre連接,添加mysql連接
#spring.datasource.driver-class-name=org.postgresql.Driver
#spring.datasource.url=jdbc:postgresql://localhost:5432/dolphinscheduler
#注意下面:{user}值 和 {password}值 還有 IP地址 需要自行修改
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://xxx:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
spring.datasource.username=dolphinscheduler
spring.datasource.password=dolphinscheduler
還需要手動添加 mysql-connector-java 驅動jar包到lib目錄下,這里下載的是mysql-connector-java-5.1.47.jar
https://downloads.mysql.com/archives/c-j/
#查看jar包是否放入
ll lib | grep mysql
- 執行 script 目錄下的創建表及導入基礎數據腳本,這樣我們的數據庫里面有了小海豚的數據表了。
sh script/create-dolphinscheduler.sh
9 修改運行參數
9.1 dolphinscheduler_env.sh
- 修改 conf/env 目錄下的 dolphinscheduler_env.sh`環境變量
vim conf/env/dolphinscheduler_env.sh
>>>>
export HADOOP_HOME=/opt/cloudera/parcels/CDH/lib/hadoop
export HADOOP_CONF_DIR=/etc/hadoop/conf
export SPARK_HOME1=/opt/cloudera/parcels/CDH/lib/spark
#export SPARK_HOME2=/opt/soft/spark2
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 DATAX_HOME=/opt/soft/datax/bin/datax.py
#export PATH=$HADOOP_HOME/bin:$SPARK_HOME1/bin:$SPARK_HOME2/bin:$PYTHON_HOME:$JAVA_HOME/bin:$HIVE_HOME/bin:$PATH:$FLINK_HOME/bin:$DATAX_HOME:$PATH
export PATH=$HADOOP_HOME/bin:$SPARK_HOME1/bin:$SPARK_HOME2/bin:$PYTHON_HOME:$JAVA_HOME/bin:$HIVE_HOME/bin:$PATH
<<<
這里的環境屏蔽了FLINK和DATAX有需要的同學可以自行添加
9.2 修改一鍵部署配置文件
- conf/config/install_config.conf中的各參數,特別注意以下參數的配置
vim conf/config/install_config.conf
>>>
# 這里填 mysql or postgresql
dbtype="mysql"
# 數據庫連接地址
dbhost="localhost:3306"
# 數據庫名
dbname="dolphinscheduler"
# 數據庫用戶名,此處需要修改為上面設置的{user}具體值
username="dolphinscheduler"
# 數據庫密碼, 如果有特殊字符,請使用\轉義,需要修改為上面設置的{passowrd}具體值
passowrd="dolphinscheduler"
#Zookeeper地址,單機本機是localhost:2181,記得把2181端口帶上
zkQuorum="192.168.xx.xx:2181,192.168.xx.xx:2181,192.168.xx.xx:2181"
#將DS安裝到哪個目錄,如: /usr/local/src/dolphinscheduler,不同於現在的目錄
installPath="/usr/local/src/dolphinscheduler"
#使用哪個用戶部署,使用之前創建的用戶
deployUser="dolphinscheduler"
# 郵件配置,以qq郵箱為例
# 郵件協議
mailProtocol="SMTP"
# 郵件服務地址,這是是qq郵箱
mailServerHost="smtp.qq.com"
# 郵件服務端口
mailServerPort="587"
# mailSender和mailUser配置成一樣即可
# 發送者
mailSender="31xxxxx@qq.com"
# 發送用戶
mailUser="31xxxxx@qq.com"
# 郵箱密碼,這里是開啟協議后服務商提供的密碼
mailPassword="ewbzasdcbhea"
# TLS協議的郵箱設置為true,否則設置為false
starttlsEnable="true"
# 開啟SSL協議的郵箱配置為true,否則為false。注意: starttlsEnable和sslEnable不能同時為true
sslEnable="false"
# 郵件服務地址值,參考上面 mailServerHost
sslTrust="smtp.qq.com"
# 業務用到的比如sql等資源文件上傳到哪里,可以設置:HDFS,S3,NONE,單機如果想使用本地文件系統,請配置為HDFS,因為HDFS支持本地文件系統;如果不需要資源上傳功能請選擇NONE。強調一點:使用本地文件系統不需要部署hadoop
resourceStorageType="HDFS"
# 這里以保存到HDFS為例
#注:但是如果你想上傳到HDFS的話,NameNode啟用了HA,則需要將hadoop的配置文件core-site.xml和hdfs-site.xml放到conf目錄下,並配置namenode cluster名稱;如果NameNode不是HA,則修改為具體的ip或者主機名即可
# 本地文件系統:"file:///data/dolphinscheduler" 或 HDFS集群: hdfs://{具體的ip/主機名}:8020
defaultFS="hdfs://192.168.xx.xx:8020"
# 如resourcemanager HA啟用,則配置為ResourceManager節點的主備ip或者hostname,比如"192.168.xx.xx,192.168.xx.xx";如果是單ResourceManager請配置yarnHaIps=""即可
yarnHaIps=""
# 如果ResourceManager是HA或者沒有使用到Yarn保持默認值"yarnIp1"即可;如果是單ResourceManager,請配置真實的ResourceManager主機名或者ip
singleYarnIp="192.168.xx.xx"
# 資源上傳根路徑,支持HDFS和S3,由於hdfs支持本地文件系統,需要確保本地文件夾存在且有讀寫權限
resourceUploadPath="/data/dolphinscheduler"
# 具備權限創建resourceUploadPath的用戶
hdfsRootUser="hdfs"
#在哪些機器上部署DS服務,本機選localhost(如下配置為單機配置,需要集群配置,直接參考默認值即可)
ips="localhost"
#ssh端口,默認22
sshPort="22"
#master服務部署在哪台機器上
masters="localhost"
#worker服務部署在哪台機器上,並指定此worker屬於哪一個worker組,下面示例的default即為組名
workers="localhost:default"
#報警服務部署在哪台機器上
alertServer="localhost"
#后端api服務部署在在哪台機器上
apiServers="localhost"
<<<
9.3 配置資源中心功能
- 上傳資源文件和udf函數,所有上傳的文件和資源都會被存儲到hdfs上,所以需要配置以下配置
vim conf/common.properties
>>>
#有權在HDFS根路徑下創建目錄的用戶
hdfs.root.user=hdfs
#數據存儲文件夾指定,資源文件將存儲到此hadoop hdfs路徑,自配置,請確保該目錄存在於hdfs上並具有讀/寫權限
data.store2hdfs.basepath=/data/dolphinscheduler
#資源上傳啟動類型:HDFS,S3,NONE
res.upload.startup.type=HDFS
#是否啟動kerberos
hadoop.security.authentication.startup.state=false
#java.security.krb5.conf路徑
java.security.krb5.conf.path=/opt/krb5.conf
#LoginUserFromKeytab用戶
login.user.keytab.username=hdfs-mycluster@ESZ.COM
#LoginUserFromKeytab路徑
login.user.keytab.path=/opt/hdfs.headless.keytab
# 如果namenode ha需要復制core-site.xml和hdfs-site.xml,到conf目錄,支持s3,例如:s3a://dolphinscheduler
fs.defaultFS=hdfs://mycluster:8020
#resourcemanager ha注意這需要ip,如果是單ip,則為空
yarn.resourcemanager.ha.rm.ids=192.168.xx.xx,192.168.xx.xx
#如果它是單個resourcemanager,您只需要配置一個主機名。如果它是resourcemanager HA,則默認配置是正確的
yarn.application.status.address=http://xxxx:8088/ws/v1/cluster/apps/%s
<<<
sudo mkdir /data/dolphinscheduler
sudo chown -R dolphinscheduler:dolphinscheduler /data/dolphinscheduler
yarn.resourcemanager.ha.rm.ids與yarn.application.status.address只需配置其中一個地址,另一個地址配置為空。
需要從Hadoop集群的conf目錄下復制core-site.xml、hdfs-site.xml到dolphinscheduler項目的conf目錄下,重啟api-server服務。
9.4 一鍵部署
- 切換到部署用戶,執行一鍵部署腳本
sh install.sh
注意: 第一次部署的話,在運行中第3步3,stop server出現5次以下信息,此信息可以忽略 sh: bin/dolphinscheduler-daemon.sh: No such file or directory
腳本完成后,會啟動以下5個服務,使用 jps 命令查看服務是否啟動
如果以上服務都正常啟動,說明自動部署成功
部署成功后,可以進行日志查看,日志統一存放於logs文件夾內
logs/
├── dolphinscheduler-alert-server.log
├── dolphinscheduler-master-server.log
├── dolphinscheduler-worker-server.log
├── dolphinscheduler-api-server.log
├── dolphinscheduler-logger-server.log
10 登錄系統
-
訪問前端頁面地址,接口ip(自行修改) http://192.168.xx.xx:12345/dolphinscheduler
-
賬號:admin
-
密碼:dolphinscheduler123
11 Hello DolphinScheduler
11.1 Hello 租戶用戶
進入小海豚,我們會被直接拉入安全中心頁面,難道不應該是炫酷的首頁么?其實這是告訴我們這個頁面很重要,為什么呢?
因為我們需要做我們的租戶用戶管理,我們先建立,慢慢解釋。
- 創建dolphinscheduler租戶,這里的租戶需要和我們的linux用戶關聯,也就是說liunx必須有。
- 然后是創建用戶(下圖例子為創建開發賬號dev2020),這里我們的admin用戶不做修改,只作為管理賬號使用。
從圖中我們看見租戶的選擇。其實意思也顯而易見了,比如我們根據業務環境來區分用戶,那么這個用戶,在提交我們小海豚上編輯的流程時,小海豚會去liunx上執行,這時使用的就是我們的租戶(也就是liunx用戶)。
注意:租戶編碼:租戶編碼是Linux上的用戶,唯一,不能重復
11.2 Hello 警告組
警告組的意思是,在我們出現錯誤或者執行完成的時候會給那些人發送消息,把這些人放在一起,方便組播,因為公司都是分部門,分小組的嘛。
這里我們添加警告組,將開發人dev2020添加進去
11.3 Hello Worker分組
因為這里部署的單台worker,所以不能進行編輯,解釋一下,我們部署多台worker的時候,肯定會有想手工指定執行機器的需求,那么這個時候我們的worker就體現了價值,他將我們的多台worker進行分組,這樣我們就能手工指定任務的執行節點。
點擊“創建Worker分組”按鈕,創建Worker分組。worker分組內有多個ip地址(不能寫別名),以英文逗號分隔。
11.4 Hello 列隊
- 隊列是在執行spark、mapreduce等程序,需要用到“隊列”參數時使用的。
11.5 Hello 令牌
由於后端接口有登錄檢查,令牌管理提供了一種可以通過調用接口的方式對系統進行各種操作。
管理員進入安全中心->令牌管理頁面,點擊“創建令牌”按鈕,選擇失效時間與用戶,點擊"生成令牌"按鈕,點擊"提交"按鈕,則選擇用戶的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();
}
}
11.6 Hello 權限
授予權限包括項目權限,資源權限,數據源權限,UDF函數權限。
管理員可以對普通用戶進行非其創建的項目、資源、數據源和UDF函數進行授權。因為項目、資源、數據源和UDF函數授權方式都是一樣的,所以以項目授權為例介紹。
注意:對於用戶自己創建的項目,該用戶擁有所有的權限。則項目列表和已選項目列表中不會顯示。
- 管理員進入安全中心->用戶管理頁面,點擊需授權用戶的“授權”按鈕,如下圖所示:
- 選擇項目,進行項目授權。
- 資源、數據源、UDF函數授權同項目授權。
11.7 Hello 首頁
首頁包含用戶所有項目的任務狀態統計、流程狀態統計、工作流定義統計。
11.8 Hello 監控
- master監控
- worker監控
- Zookeeper監控
- DB監控
- 統計管理
- 待執行命令數:統計t_ds_command表的數據
- 執行失敗的命令數:統計t_ds_error_command表的數據
- 待運行任務數:統計Zookeeper中task_queue的數據
- 待殺死任務數:統計Zookeeper中task_kill的數據
11.9 Hello 資源中心
11.9.1 文件管理
是對各種資源文件的管理,包括創建基本的txt/log/sh/conf/py/java等文件、上傳jar包等各種類型文件,可進行編輯、重命名、下載、刪除等操作。
- 創建文件
文件格式支持以下幾種類型:txt、log、sh、conf、cfg、py、java、sql、xml、hql、properties
- 查看文件
還可以對文件進行上傳和下載哦!
- 刪除
文件列表->點擊"刪除"按鈕,刪除指定文件
11.9.2 UDF管理
- 資源管理
資源管理和文件管理功能類似,不同之處是資源管理是上傳的UDF函數,文件管理上傳的是用戶程序,腳本及配置文件 操作功能:重命名、下載、刪除。
- 上傳udf資源
和上傳文件相同。
-
函數管理
-
創建udf函數
點擊“創建UDF函數”,輸入udf函數參數,選擇udf資源,點擊“提交”,創建udf函數。
目前只支持HIVE的臨時UDF函數
- UDF函數名稱:輸入UDF函數時的名稱
- 包名類名:輸入UDF函數的全路徑
- UDF資源:設置創建的UDF對應的資源文件
11.10 Hello 數據源中心
數據源中心支持MySQL、POSTGRESQL、HIVE/IMPALA、SPARK、CLICKHOUSE、ORACLE、SQLSERVER等數據源
11.10.1 創建/編輯Mysq數據源
- 點擊“數據源中心->創建數據源”,根據需求創建不同類型的數據源。
- 數據源:選擇MYSQL
- 數據源名稱:輸入數據源的名稱
- 描述:輸入數據源的描述
- IP主機名:輸入連接MySQL的IP
- 端口:輸入連接MySQL的端口
- 用戶名:設置連接MySQL的用戶名
- 密碼:設置連接MySQL的密碼
- 數據庫名:輸入連接MySQL的數據庫名稱
- Jdbc連接參數:用於MySQL連接的參數設置,以JSON形式填寫
11.10.2 創建/編輯Hive數據源
- 數據源:選擇HIVE
- 數據源名稱:輸入數據源的名稱
- 描述:輸入數據源的描述
- IP/主機名:輸入連接HIVE的IP
- 端口:輸入連接HIVE的端口
- 用戶名:設置連接HIVE的用戶名
- 密碼:設置連接HIVE的密碼
- 數據庫名:輸入連接HIVE的數據庫名稱
- Jdbc連接參數:用於HIVE連接的參數設置,以JSON形式填寫
11.10.3 創建/編輯POSTGRESQL數據源
- 數據源:選擇POSTGRESQL
- 數據源名稱:輸入數據源的名稱
- 描述:輸入數據源的描述
- IP/主機名:輸入連接POSTGRESQL的IP
- 端口:輸入連接POSTGRESQL的端口
- 用戶名:設置連接POSTGRESQL的用戶名
- 密碼:設置連接POSTGRESQL的密碼
- 數據庫名:輸入連接POSTGRESQL的數據庫名稱
- Jdbc連接參數:用於POSTGRESQL連接的參數設置,以JSON形式填寫
11.10.4 創建/編輯Spark數據源
- 數據源:選擇Spark
- 數據源名稱:輸入數據源的名稱
- 描述:輸入數據源的描述
- IP/主機名:輸入連接Spark的IP
- 端口:輸入連接Spark的端口
- 用戶名:設置連接Spark的用戶名
- 密碼:設置連接Spark的密碼
- 數據庫名:輸入連接Spark的數據庫名稱
- Jdbc連接參數:用於Spark連接的參數設置,以JSON形式填寫
注意:如果開啟了kerberos,則需要填寫 Principal
11.11 Hello 項目管理
要編輯我們的任務流,首先要有項目,使用我們的開發賬號dev2020登錄
- 點擊"項目管理"進入項目管理頁面,點擊“創建項目”按鈕,輸入項目名稱,項目描述,點擊“提交”,創建新的項目。
- 項目首頁
在項目管理頁面點擊項目名稱鏈接,進入項目首頁,如下圖所示,項目首頁包含該項目的任務狀態統計、流程狀態統計、工作流定義統計。
- 任務狀態統計:在指定時間范圍內,統計任務實例中狀態為提交成功、正在運行、准備暫停、暫停、准備停止、停止、失敗、成功、需要容錯、kill、等待線程的個數
- 流程狀態統計:在指定時間范圍內,統計工作流實例中狀態為提交成功、正在運行、准備暫停、暫停、准備停止、停止、失敗、成功、需要容錯、kill、等待線程的個數
- 工作流定義統計:統計用戶創建的工作流定義及管理員授予該用戶的工作流定義
11.11.1 創建工作流定義
點擊項目管理->工作流->工作流定義,進入工作流定義頁面,點擊“創建工作流”按鈕,進入工作流DAG編輯頁面,如下圖所示:
- 工具欄中拖拽
到畫板中,新增一個Shell任務,如下圖所示:
- 添加shell任務的參數設置:
- 填寫“節點名稱”,“描述”,“腳本”字段;
- “運行標志”勾選“正常”,若勾選“禁止執行”,運行工作流不會執行該任務;
- 選擇“任務優先級”:當worker線程數不足時,級別高的任務在執行隊列中會優先執行,相同優先級的任務按照先進先出的順序執行;
- 超時告警(非必選):勾選超時告警、超時失敗,填寫“超時時長”,當任務執行時間超過超時時長,會發送告警郵件並且任務超時失敗;
- 資源(非必選)。資源文件是資源中心->文件管理頁面創建或上傳的文件,如文件名為
test.sh
,腳本中調用資源命令為sh test.sh
; - 自定義參數(非必填),參考https://dolphinscheduler.apache.org/zh-cn/docs/1.3.1/user_doc/system-manual.html#UserDefinedParameters
- 點擊"確認添加"按鈕,保存任務設置。
- 增加任務執行的先后順序: 點擊右上角圖標
連接任務;如下圖所示,任務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。
11.11.2 工作流定義操作功能
點擊項目管理->工作流->工作流定義,進入工作流定義頁面,如下圖所示:
- 工作流定義列表的操作功能如下:
- 編輯: 只能編輯"下線"的工作流定義。工作流DAG編輯同創建工作流定義。
- 上線: 工作流狀態為"下線"時,上線工作流,只有"上線"狀態的工作流能運行,但不能編輯。
- 下線: 工作流狀態為"上線"時,下線工作流,下線狀態的工作流可以編輯,但不能運行。
- 運行: 只有上線的工作流能運行。
- 定時: 只有上線的工作流能設置定時,系統自動定時調度工作流運行。創建定時后的狀態為"下線",需在定時管理頁面上線定時才生效。
- 定時管理: 定時管理頁面可編輯、上線/下線、刪除定時。
- 刪除: 刪除工作流定義。
- 下載: 下載工作流定義到本地。
- 樹形圖: 以樹形結構展示任務節點的類型及任務狀態,如下圖所示:
11.11.3 運行工作流
點擊項目管理->工作流->工作流定義,進入工作流定義頁面,如下圖所示,點擊"上線"按鈕
,上線工作流。
點擊”運行“按鈕,彈出啟動參數設置彈框,如下圖所示,設置啟動參數,點擊彈框中的"運行"按鈕,工作流開始運行,工作流實例頁面生成一條工作流實例。
- 運行參數說明
* 失敗策略:當某一個任務節點執行失敗時,其他並行的任務節點需要執行的策略。”繼續“表示:某一任務失敗后,其他任務節點正常執行;”結束“表示:終止所有正在執行的任務,並終止整個流程。
* 通知策略:當流程結束,根據流程狀態發送流程執行信息通知郵件,包含任何狀態都不發,成功發,失敗發,成功或失敗都發。
* 流程優先級:流程運行的優先級,分五個等級:最高(HIGHEST),高(HIGH),中(MEDIUM),低(LOW),最低(LOWEST)。當master線程數不足時,級別高的流程在執行隊列中會優先執行,相同優先級的流程按照先進先出的順序執行。
* worker分組:該流程只能在指定的worker機器組里執行。默認是Default,可以在任一worker上執行。
* 通知組:選擇通知策略||超時報警||發生容錯時,會發送流程信息或郵件到通知組里的所有成員。
* 收件人:選擇通知策略||超時報警||發生容錯時,會發送流程信息或告警郵件到收件人列表。
* 抄送人:選擇通知策略||超時報警||發生容錯時,會抄送流程信息或告警郵件到抄送人列表。
* 補數:包括串行補數、並行補數2種模式。串行補數:指定時間范圍內,從開始日期至結束日期依次執行補數,只生成一條流程實例;並行補數:指定時間范圍內,多天同時進行補數,生成N條流程實例。
- 補數: 執行指定日期的工作流定義,可以選擇補數時間范圍(目前只支持針對連續的天進行補數),比如需要補5月1號到5月10號的數據,如下圖所示:
串行模式:補數從5月1號到5月10號依次執行,流程實例頁面生成一條流程實例;
並行模式:同時執行5月1號到5月10號的任務,流程實例頁面生成十條流程實例。
11.11.4 工作流定時
創建定時:點擊項目管理->工作流->工作流定義,進入工作流定義頁面,上線工作流,點擊"定時"按鈕,彈出定時參數設置彈框,如下圖所示:
- 選擇起止時間。在起止時間范圍內,定時運行工作流;不在起止時間范圍內,不再產生定時工作流實例。
- 添加一個每天凌晨5點執行一次的定時,如下圖所示:
- 失敗策略、通知策略、流程優先級、Worker分組、通知組、收件人、抄送人同https://dolphinscheduler.apache.org/zh-cn/docs/1.3.1/user_doc/system-manual.html#runParamers。
- 點擊"創建"按鈕,創建定時成功,此時定時狀態為"下線",定時需上線才生效。
- 定時上線:點擊"定時管理"按鈕
,進入定時管理頁面,點擊"上線"按鈕,定時狀態變為"上線",如下圖所示,工作流定時生效。
11.11.5 導入工作流
點擊項目管理->工作流->工作流定義,進入工作流定義頁面,點擊"導入工作流"按鈕,導入本地工作流文件,工作流定義列表顯示導入的工作流,狀態為下線。
11.11.6 查看工作流實例
- 點擊項目管理->工作流->工作流實例,進入工作流實例頁面,如下圖所示:
- 點擊工作流名稱,進入DAG查看頁面,查看任務執行狀態,如下圖所示。
11.11.7 查看任務日志
- 進入工作流實例頁面,點擊工作流名稱,進入DAG查看頁面,雙擊任務節點,如下圖所示:
- 點擊"查看日志",彈出日志彈框,如下圖所示,任務實例頁面也可查看任務日志,參考https://dolphinscheduler.apache.org/zh-cn/docs/1.3.1/user_doc/system-manual.html#taskLog。
11.11.8 查看任務歷史記錄
- 點擊項目管理->工作流->工作流實例,進入工作流實例頁面,點擊工作流名稱,進入工作流DAG頁面;
- 雙擊任務節點,如下圖所示,點擊"查看歷史",跳轉到任務實例頁面,並展示該工作流實例運行的任務實例列表
11.11.9 查看運行參數
- 點擊項目管理->工作流->工作流實例,進入工作流實例頁面,點擊工作流名稱,進入工作流DAG頁面;
- 點擊左上角圖標
,查看工作流實例的啟動參數;點擊圖標
),查看工作流實例的全局參數和局部參數,如下圖所示:
11.11.10 工作流實例操作功能
- 點擊項目管理->工作流->工作流實例,進入工作流實例頁面,如下圖所示:
- 編輯: 只能編輯已終止的流程。點擊"編輯"按鈕或工作流實例名稱進入DAG編輯頁面,編輯后點擊"保存"按鈕,彈出保存DAG彈框,如下圖所示,在彈框中勾選"是否更新到工作流定義",保存后則更新工作流定義;若不勾選,則不更新工作流定義。
- 重跑: 重新執行已經終止的流程。
- 恢復失敗: 針對失敗的流程,可以執行恢復失敗操作,從失敗的節點開始執行。
- 停止: 對正在運行的流程進行停止操作,后台會先
kill
worker進程,再執行kill -9
操作 - 暫停: 對正在運行的流程進行暫停操作,系統狀態變為等待執行,會等待正在執行的任務結束,暫停下一個要執行的任務。
- 恢復暫停: 對暫停的流程恢復,直接從暫停的節點開始運行
- 刪除: 刪除工作流實例及工作流實例下的任務實例
- 甘特圖: Gantt圖縱軸是某個工作流實例下的任務實例的拓撲排序,橫軸是任務實例的運行時間,如圖示:
11.11.11 任務實例
- 點擊項目管理->工作流->任務實例,進入任務實例頁面,如下圖所示,點擊工作流實例名稱,可跳轉到工作流實例DAG圖查看任務狀態。
- 查看日志:點擊操作列中的“查看日志”按鈕,可以查看任務執行的日志情況。
11.12 Hello 任務節點類型和參數設置
11.12.1 Shell節點
shell節點,在worker執行的時候,會生成一個臨時shell腳本,使用租戶同名的linux用戶執行這個腳本。
-
點擊項目管理-項目名稱-工作流定義,點擊"創建工作流"按鈕,進入DAG編輯頁面。
-
工具欄中拖動
到畫板中,如下圖所示:
-
節點名稱:一個工作流定義中的節點名稱是唯一的。
-
運行標志:標識這個節點是否能正常調度,如果不需要執行,可以打開禁止執行開關。
-
描述信息:描述該節點的功能。
-
任務優先級:worker線程數不足時,根據優先級從高到低依次執行,優先級一樣時根據先進先出原則執行。
-
Worker分組:任務分配給worker組的機器機執行,選擇Default,會隨機選擇一台worker機執行。
-
失敗重試次數:任務失敗重新提交的次數,支持下拉和手填。
-
失敗重試間隔:任務失敗重新提交任務的時間間隔,支持下拉和手填。
-
超時告警:勾選超時告警、超時失敗,當任務超過"超時時長"后,會發送告警郵件並且任務執行失敗.
-
腳本:用戶開發的SHELL程序。
-
資源:是指腳本中需要調用的資源文件列表,資源中心-文件管理上傳或創建的文件。
-
自定義參數:是SHELL局部的用戶自定義參數,會替換腳本中以${變量}的內容。
11.12.2 子流程節點
- 子流程節點,就是把外部的某個工作流定義當做一個任務節點去執行。
拖動工具欄中的
任務節點到畫板中,如下圖所示:
- 節點名稱:一個工作流定義中的節點名稱是唯一的
- 運行標志:標識這個節點是否能正常調度
- 描述信息:描述該節點的功能
- 超時告警:勾選超時告警、超時失敗,當任務超過"超時時長"后,會發送告警郵件並且任務執行失敗.
- 子節點:是選擇子流程的工作流定義,右上角進入該子節點可以跳轉到所選子流程的工作流定義
11.12.3 依賴(DEPENDENT)節點
- 依賴節點,就是依賴檢查節點。比如A流程依賴昨天的B流程執行成功,依賴節點會去檢查B流程在昨天是否有執行成功的實例。
拖動工具欄中的任務節點
到畫板中,如下圖所示:
依賴節點提供了邏輯判斷功能,比如檢查昨天的B流程是否成功,或者C流程是否執行成功。
例如,A流程為周報任務,B、C流程為天任務,A任務需要B、C任務在上周的每一天都執行成功,如圖示:
假如,周報A同時還需要自身在上周二執行成功:
11.12.4 存儲過程節點
- 根據選擇的數據源,執行存儲過程。
拖動工具欄中的
任務節點到畫板中,如下圖所示:
- 數據源:存儲過程的數據源類型支持MySQL和POSTGRESQL兩種,選擇對應的數據源
- 方法:是存儲過程的方法名稱
- 自定義參數:存儲過程的自定義參數類型支持IN、OUT兩種,數據類型支持VARCHAR、INTEGER、LONG、FLOAT、DOUBLE、DATE、TIME、TIMESTAMP、BOOLEAN九種數據類型
11.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語句之后執行。
11.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,其他都是一樣
11.12.7 MapReduce(MR)節點
- 使用MR節點,可以直接執行MR程序。對於mr節點,worker會使用
hadoop jar
方式提交任務
拖動工具欄中的
任務節點到畫板中,如下圖所示:
- JAVA程序
- 主函數的class:是MR程序的入口Main Class的全路徑
- 程序類型:選擇JAVA語言
- 主jar包:是MR的jar包
- 命令行參數:是設置MR程序的輸入參數,支持自定義參數變量的替換
- 其他參數:支持 –D、-files、-libjars、-archives格式
- 資源: 如果其他參數中引用了資源文件,需要在資源中選擇指定
- 自定義參數:是MR局部的用戶自定義參數,會替換腳本中以${變量}的內容
- 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局部的用戶自定義參數,會替換腳本中以${變量}的內容
11.12.8 Python節點
- 使用python節點,可以直接執行python腳本,對於python節點,worker會使用
python **
方式提交任務。
拖動工具欄中的
任務節點到畫板中,如下圖所示:
- 腳本:用戶開發的Python程序
- 資源:是指腳本中需要調用的資源文件列表
- 自定義參數:是Python局部的用戶自定義參數,會替換腳本中以${變量}的內容
11.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,其他都是一樣
11.12.10 http節點
- 拖動工具欄中的任務節點
到畫板中,如下圖所示:
- 節點名稱:一個工作流定義中的節點名稱是唯一的。
- 運行標志:標識這個節點是否能正常調度,如果不需要執行,可以打開禁止執行開關。
- 描述信息:描述該節點的功能。
- 任務優先級:worker線程數不足時,根據優先級從高到低依次執行,優先級一樣時根據先進先出原則執行。
- Worker分組:任務分配給worker組的機器機執行,選擇Default,會隨機選擇一台worker機執行。
- 失敗重試次數:任務失敗重新提交的次數,支持下拉和手填。
- 失敗重試間隔:任務失敗重新提交任務的時間間隔,支持下拉和手填。
- 超時告警:勾選超時告警、超時失敗,當任務超過"超時時長"后,會發送告警郵件並且任務執行失敗.
- 請求地址:http請求URL。
- 請求類型:支持GET、POSt、HEAD、PUT、DELETE。
- 請求參數:支持Parameter、Body、Headers。
- 校驗條件:支持默認響應碼、自定義響應碼、內容包含、內容不包含。
- 校驗內容:當校驗條件選擇自定義響應碼、內容包含、內容不包含時,需填寫校驗內容。
- 自定義參數:是http局部的用戶自定義參數,會替換腳本中以${變量}的內容。
11.12.11 DATAX節點
- 拖動工具欄中的
任務節點到畫板中
- 自定義模板:打開自定義模板開關時,可以自定義datax節點的json配置文件內容(適用於控件配置不滿足需求時)
- 數據源:選擇抽取數據的數據源
- sql語句:目標庫抽取數據的sql語句,節點執行時自動解析sql查詢列名,映射為目標表同步列名,源表和目標表列名不一致時,可以通過列別名(as)轉換
- 目標庫:選擇數據同步的目標庫
- 目標表:數據同步的目標表名
- 前置sql:前置sql在sql語句之前執行(目標庫執行)。
- 后置sql:后置sql在sql語句之后執行(目標庫執行)。
- json:datax同步的json配置文件
- 自定義參數:SQL任務類型,而存儲過程是自定義參數順序的給方法設置值自定義參數類型和數據類型同存儲過程任務類型一樣。區別在於SQL任務類型自定義參數會替換sql語句中${變量}。
11.13 Hello 參數
11.13.1 系統參數
變量 | 含義 |
---|---|
${system.biz.date} | 日常調度實例定時的定時時間前一天,格式為 yyyyMMdd,補數據時,該日期 +1 |
${system.biz.curdate} | 日常調度實例定時的定時時間,格式為 yyyyMMdd,補數據時,該日期 +1 |
${system.datetime} | 日常調度實例定時的定時時間,格式為 yyyyMMddHHmmss,補數據時,該日期 +1 |
11.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]
11.13.3 用戶自定義參數
- 用戶自定義參數分為全局參數和局部參數。全局參數是保存工作流定義和工作流實例的時候傳遞的全局參數,全局參數可以在整個流程中的任何一個任務節點的局部參數引用。 例如:
- global_bizdate為全局參數,引用的是系統參數。
- 任務中local_param_bizdate通過${global_bizdate}來引用全局參數,對於腳本可以通過${local_param_bizdate}來引全局變量global_bizdate的值,或通過JDBC直接將local_param_bizdate的值set進去
14 元數據解釋
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_udfs | UDF資源 |
t_ds_user | 用戶 |
t_ds_version | ##ds版本信息 |
15 架構設計
- 系統架構圖
- 啟動流程活動圖
- 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提供監聽服務。Worker
該服務包含:
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部分。
16 參考網站
https://dolphinscheduler.apache.org/zh-cn/docs/1.3.1/user_doc/hardware-environment.html