第1章 DolphinScheduler簡介
1.1 DolphinScheduler概述
Apache DolphinScheduler是一個分佈式、易擴展的可視化DAG工作流任務調度平台。致力於解決數據處理流程中錯綜複雜的依賴關係,使調度系統在數據處理流程中開箱即用。
1.2 DolphinScheduler核心架構
DolphinScheduler的主要角色如下:
MasterServer採用分佈式無中心設計理念,MasterServer主要負責 DAG 任務切分、任務提交、任務監控,並同時監聽其它MasterServer和WorkerServer的健康狀態。
WorkerServer也採用分佈式無中心設計理念,WorkerServer主要負責任務的執行和提供日誌服務。
ZooKeeper服務,系統中的MasterServer和WorkerServer節點都通過ZooKeeper來進行集羣管理和容錯。
Alert服務,提供告警相關服務。
API接口層,主要負責處理前端UI層的請求。
UI,系統的前端頁面,提供系統的各種可視化操作界面。
第2章 DolphinScheduler部署説明
2.1 軟硬件環境要求
2.1.1 操作系統版本要求
|
操作系統 |
版本 |
|
Red Hat Enterprise Linux |
7.0 及以上 |
|
CentOS |
7.0 及以上 |
|
Oracle Enterprise Linux |
7.0 及以上 |
|
Ubuntu LTS |
16.04 及以上 |
2.1.2 服務器硬件要求
|
CPU |
內存 |
網絡 |
|
4核+ |
8 GB+ |
千兆網卡 |
2.2 部署模式
DolphinScheduler支持多種部署模式,包括單機模式(Standalone)、偽集羣模式(Pseudo-Cluster)、集羣模式(Cluster)等。
2.2.1 單機模式
單機模式(standalone)模式下,所有服務均集中於一個StandaloneServer進程中,並且其中內置了註冊中心Zookeeper和數據庫H2。只需配置JDK環境,就可一鍵啓動DolphinScheduler,快速體驗其功能。
2.2.2 偽集羣模式
偽集羣模式(Pseudo-Cluster)是在單台機器部署 DolphinScheduler 各項服務,該模式下master、worker、api server、logger server等服務都只在同一台機器上。Zookeeper和數據庫需單獨安裝並進行相應配置。
2.2.3 集羣模式
集羣模式(Cluster)與偽集羣模式的區別就是在多台機器部署 DolphinScheduler各項服務,並且可以配置多個Master及多個Worker。
第3章 DolphinScheduler集羣模式部署
3.1 集羣規劃
集羣模式下,可配置多個Master及多個Worker。通常可配置2~3個Master,若干個Worker。由於集羣資源有限,此處配置一個Master,三個Worker,集羣規劃如下。
|
hadoop102 |
master、worker |
|
hadoop103 |
worker |
|
hadoop104 |
worker |
3.2 前置準備工作
1)三台節點均需部署JDK(1.8+),並配置相關環境變量。
2)需部署數據庫,支持MySQL(5.7+)或者PostgreSQL(8.2.15+)。
3)需部署Zookeeper(3.4.6+)。
4)三台節點均需安裝進程管理工具包psmisc。
[wyr@hadoop102 ~]$ sudo yum install -y psmisc
[wyr@hadoop103 ~]$ sudo yum install -y psmisc
[wyr@hadoop104 ~]$ sudo yum install -y psmisc
3.3 解壓DolphinScheduler安裝包
1)上傳DolphinScheduler安裝包到hadoop102節點的/opt/software目錄
2)解壓安裝包到當前目錄
注:解壓目錄並非最終的安裝目錄
[wyr@hadoop102 software]$ tar -zxvf apache-dolphinscheduler-1.3.9-bin.tar.gz
3.4 初始化數據庫
DolphinScheduler 元數據存儲在關係型數據庫中,故需創建相應的數據庫和用户。
1)創建數據庫
mysql> CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
2)創建用户
mysql> CREATE USER 'dolphinscheduler'@'%' IDENTIFIED BY 'dolphinscheduler';
注:
若出現以下錯誤信息,表明新建用户的密碼過於簡單。
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
可提高密碼複雜度或者執行以下命令降低MySQL密碼強度級別。
mysql> set global validate_password_length=4;
mysql> set global validate_password_policy=0;
3)賦予用户相應權限
mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'dolphinscheduler'@'%';
mysql> flush privileges;
4)修改數據源配置文件
進入DolphinScheduler解壓目錄
[wyr@hadoop102 apache-dolphinscheduler-1.3.9-bin]$ cd /opt/software/apache-dolphinscheduler-1.3.9-bin/
修改conf目錄下的datasource.properties文件
[wyr@hadoop102 apache-dolphinscheduler-1.3.9-bin]$ vim conf/datasource.properties
修改內容如下
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://hadoop102:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=dolphinscheduler
spring.datasource.password=dolphinscheduler
5)拷貝MySQL驅動到DolphinScheduler的解壓目錄下的lib中
[wyr@hadoop102 apache-dolphinscheduler-1.3.9-bin]$ cp /opt/software/mysql-connector-java-5.1.27-bin.jar lib/
6)執行數據庫初始化腳本
數據庫初始化腳本位於DolphinScheduler解壓目錄下的script目錄中,即/opt/software/ds/apache-dolphinscheduler-1.3.9-bin/script/。
[wyr@hadoop102 apache-dolphinscheduler-1.3.9-bin]$ script/create-dolphinscheduler.sh
3.5 配置一鍵部署腳本
修改解壓目錄下的conf/config目錄下的install_config.conf文件
[wyr@hadoop102 apache-dolphinscheduler-1.3.9-bin]$ vim conf/config/install_config.conf
修改內容如下
# postgresql or mysql
dbtype="mysql"
# db config
# db address and port
dbhost="hadoop102:3306"
# db username
username="dolphinscheduler"
# database name
dbname="dolphinscheduler"
# db passwprd
# NOTICE: if there are special characters, please use the \ to escape, for example, `[` escape to `\[`
password="dolphinscheduler"
# zk cluster
zkQuorum="hadoop102:2181,hadoop103:2181,hadoop104:2181"
# Note: the target installation path for dolphinscheduler, please not config as the same as the current path (pwd)
installPath="/opt/module/dolphinscheduler"
# 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="wyr"
# resource storage type: HDFS, S3, NONE
resourceStorageType="HDFS"
# resource store on HDFS/S3 path, resource file will store to this hadoop hdfs path, self configuration, please make sure the directory exists on hdfs and have read write permissions. "/dolphinscheduler" is recommended
resourceUploadPath="/dolphinscheduler"
# if resourceStorageType 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://hadoop102:8020"
# resourcemanager port, the default value is 8088 if not specified
resourceManagerHttpAddressPort="8088"
# if resourcemanager HA is enabled, please set the HA IPs; if resourcemanager is single, keep this value empty
yarnHaIps=
# if resourcemanager HA is enabled or not use resourcemanager, please keep the default value; If resourcemanager is single, you only need to replace ds1 to actual resourcemanager hostname
singleYarnIp="hadoop103"
# who have permissions to create directory under HDFS/S3 root path
# Note: if kerberos is enabled, please config hdfsRootUser=
hdfsRootUser="wyr"
# api server port
apiServerPort="12345"
# install hosts
# Note: install the scheduled hostname list. If it is pseudo-distributed, just write a pseudo-distributed hostname
ips="hadoop102,hadoop103,hadoop104"
# ssh port, default 22
# Note: if ssh port is not default, modify here
sshPort="22"
# run master machine
# Note: list of hosts hostname for deploying master
masters="hadoop102"
# run worker machine
# note: need to write the worker group name of each worker, the default value is "default"
workers="hadoop102:default,hadoop103:default,hadoop104:default"
# run alert machine
# note: list of machine hostnames for deploying alert server
alertServer="hadoop102"
# run api machine
# note: list of machine hostnames for deploying api server
apiServers="hadoop102"
3.6 一鍵部署DolphinScheduler
1)啓動Zookeeper集羣
[wyr@hadoop102 apache-dolphinscheduler-1.3.9-bin]$ zk.sh start
2)一鍵部署並啓動DolphinScheduler
[wyr@hadoop102 apache-dolphinscheduler-1.3.9-bin]$ ./install.sh
3)查看DolphinScheduler進程
--------- hadoop102 ----------
29139 ApiApplicationServer
28963 WorkerServer
3332 QuorumPeerMain
2100 DataNode
28902 MasterServer
29081 AlertServer
1978 NameNode
29018 LoggerServer
2493 NodeManager
29551 Jps
--------- hadoop103 ----------
29568 Jps
29315 WorkerServer
2149 NodeManager
1977 ResourceManager
2969 QuorumPeerMain
29372 LoggerServer
1903 DataNode
--------- hadoop104 ----------
1905 SecondaryNameNode
27074 WorkerServer
2050 NodeManager
2630 QuorumPeerMain
1817 DataNode
27354 Jps
27133 LoggerServer
4)訪問DolphinScheduler UI
DolphinScheduler UI地址為http://hadoop102:12345/dolphinscheduler
初始用户的用户名為:admin,密碼為dolphinscheduler123
3.7 DolphinScheduler啓停命令
DolphinScheduler的啓停腳本均位於其安裝目錄的bin目錄下。
1)一鍵啓停所有服務
./bin/start-all.sh
./bin/stop-all.sh
注意同Hadoop的啓停腳本進行區分。
2)啓停 Master
./bin/dolphinscheduler-daemon.sh start master-server
./bin/dolphinscheduler-daemon.sh stop master-server
3)啓停 Worker
./bin/dolphinscheduler-daemon.sh start worker-server
./bin/dolphinscheduler-daemon.sh stop worker-server
4)啓停 Api
./bin/dolphinscheduler-daemon.sh start api-server
./bin/dolphinscheduler-daemon.sh stop api-server
5)啓停 Logger
./bin/dolphinscheduler-daemon.sh start logger-server
./bin/dolphinscheduler-daemon.sh stop logger-server
6)啓停 Alert
./bin/dolphinscheduler-daemon.sh start alert-server
./bin/dolphinscheduler-daemon.sh stop alert-server
第4章 DolphinScheduler入門
4.1 安全中心配置
安全中心主要有租户管理、用户管理、告警組管理、Worker分組管理、隊列管理、令牌管理等功能。安全中心只有管理員賬户才有操作權限。
4.1.1 隊列管理
此處的隊列對應的是Yarn調度器的資源隊列。故隊列概念只對跑在Yarn上的任務類型有效。此處創建出的隊列,可供後續任務進行選擇。需要注意的是,在DolphinScheduler中創建隊列,並不會影響到Yarn調度器的隊列配置。
此處可不創建隊列。
4.1.2 租户管理
租户對應的是Linux系統用户,是Worker執行任務使用的用户。如果Worker所在節點沒有這個用户,Worker會在執行任務時創建這個用户。
此處創建一個wyr租户,如下圖。
注:
租户編碼:對應Worker執行任務所使用的用户名。
租户名稱:用於在DolphinScheduler中顯示。
隊列:該租户提交Yarn任務時的默認隊列。
4.1.3 用户管理
用户對應的是DolphinScheduler的用户,用於登錄DolphinScheduler。用户分管理員用户和普通用户。默認情況下,管理員只有授權和用户管理等權限,而普通用户只有創建項目,定義工作流、執行工作流等權限。
此處創建一個普通用户wyr,如下圖。
注:
用户名:DolphinScheduler登錄賬户
租户:該用户關聯的租户
隊列:默認為租户所關聯的隊列。
郵件、手機號:主要用於告警通知。
4.1.4 告警組管理
告警組可包含多名用户,用於指定告警發送對象。
1)創建告警組
2)增加用户
4.1.5 Worker分組管理
在任務執行時,可以將任務分配給指定Worker組,最終由該組中的Worker節點執行該任務。默認情況下,所有Worker均位於default組。
此處可不做配置。
4.16 令牌管理
令牌用於通過接口訪問DolphinScheduler各項服務時的用户驗證。普通用户通過UI頁面訪問各項服務時,無需使用令牌。若需將DolphinScheduler與第三方服務進行集成,則需調用其接口,此時需使用令牌。
4.2 項目管理
4.2.1 切換用户
默認不使用管理員用户操作項目和工作流等,故需先切換到普通用户wyr。
1)admin用户退出
2)使用wyr用户登錄
4.2.2 創建項目
4.2.3 查看項目
4.3 工作流基礎配置
下圖為工作流配置頁面,共包含三個模快,分別為工作流定義、工作流實例和任務實例。
工作流定義:用於定義工作流,包括工作流各節點任務詳情及各節點依賴關係等。
工作流實例:工作流每執行一次就會生成一個工作流示例。此處可查看正在運行的工作流以及已經完成的工作流。
任務實例:工作流中的一個節點任務,每執行一次就會生成一個任務實例。此處可用於查看正在執行的節點任務以及已經完成的節點任務。
4.3.1 工作流定義
工作流要求:工作流需包含三個Shell類型的任務節點,分別是A,B,C。三個任務的依賴關係如下圖所示:
1)創建工作流
2)配置任務節點
(1)節點A
(2)節點B
(3)節點C
3)配置任務節點的依賴關係
4)保存工作流定義
4.3.2 提交執行工作流
1)上線工作流
工作流須上線之後才能執行。處於上線狀態的工作流定義不可修改,如需修改,須先下線。
2)單次運行工作流
3)定時執行工作流
(1)點擊定時
(2)配置定時規則
此處示例為每分鐘執行一次
(3)定時管理
(4)定時上線
4.3.2 查看工作流實例
1)查看所有工作流實例
2)查看工作流執行狀態
4.3.3 查看任務實例
1)查看所有任務實例
2)查看任務實例日誌
第5章 DolphinScheduler進階
5.1 工作流傳參
DolphinScheduler支持對任務節點進行靈活的傳參,任務節點可通過${參數名}引用參數值。
5.1.1 局部參數
局部參數是指只針對單個任務節點有效的參數。
1)修改helloworld工作流Node-A節點如下
2)保存工作流並運行,查看Node-A輸出日誌。
5.1.2 全局參數
全局參數是指針對整個工作流的所有任務節點都有效的參數。
1)修改helloworld工作流每個任務節點如下
(1)節點A配置
(2)節點B配置
(3)節點C配置
2)保存工作流,並設置全局參數
3)執行工作流,查看三個任務節點輸出日誌。
5.1.3 系統內置參數
DolphinScheduler提供了一些時間相關的系統參數,方便定時調度使用。
1)系統參數
|
參數 |
説明 |
|
${system.biz.date} |
定時時間前一天,格式為 yyyyMMdd |
|
${system.biz.curdate} |
定時時間,格式為 yyyyMMdd |
|
${system.datetime} |
定時時間,格式為 yyyyMMddHHmmss |
2)時間自定義參數
可通過時間自定義參數,設置任意格式、任意時間的日期。
(1)自定義日期格式
$[yyyyMMdd], $[HHmmss], $[yyyy-MM-dd]
(2)自定義時間
|
參數 |
説明 |
|
$[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] |
前 N 分鐘 |
3)配置示例
若執行的腳本需要一個格式為yyyy-MM-dd的前一天日期的參數,進行如下配置即可。
5.2 引用依賴資源
有些任務需要引用一些額外的資源,例如MR、Spark等任務需引用jar包,Shell任務需要引用其他腳本等。DolphinScheduler提供了資源中心來對這些資源進行統一管理。
下面以Shell任務為例,演示如何引用資源中心的其他腳本。
1)在資源中心創建腳本
2)配置Shell任務引用腳本
修改工作流,引用上述腳本
3)保存工作流並執行,查看對應節點輸出日誌。
5.3 告警通知
5.3.1 準備電子郵箱賬户
如需使用DolphinScheduler的郵件告警通知功能,需要準備一個電子郵箱賬號,並啓用SMTP服務。
1)點擊郵箱賬號設置
2)開啓SMTP服務
3)授權碼是郵箱賬號在第三方客户端登錄的憑證,須謹記。
5.3.2 配置AlertServer
1)修改AlertServer配置文件/opt/module/dolphinscheduler/conf/alert.properties
[wyr@hadoop102 ~]$ vim /opt/module/dolphinscheduler/conf/alert.properties
2)配置以下參數
(1)不使用加密協議
#alert type is EMAIL/SMS
alert.type=EMAIL
# mail server configuration
mail.protocol=SMTP
mail.server.host=smtp.qq.com
mail.server.port=25
mail.sender=*********@qq.com
mail.user=*********@qq.com
mail.passwd=*************
# TLS
mail.smtp.starttls.enable=false
# SSL
mail.smtp.ssl.enable=false
mail.smtp.ssl.trust=smtp.exmail.qq.com
(2)使用STARTTLS加密協議
#alert type is EMAIL/SMS
alert.type=EMAIL
# mail server configuration
mail.protocol=SMTP
mail.server.host=smtp.qq.com
mail.server.port=587
mail.sender=*********@qq.com
mail.user=*********@qq.com
mail.passwd=*************
# TLS
mail.smtp.starttls.enable=true
# SSL
mail.smtp.ssl.enable=false
mail.smtp.ssl.trust=smtp.qq.com
(3)使用SSL加密協議
#alert type is EMAIL/SMS
alert.type=EMAIL
# mail server configuration
mail.protocol=SMTP
mail.server.host=smtp.qq.com
mail.server.port=465
mail.sender=*********@qq.com
mail.user=*********@qq.com
mail.passwd=*************
# TLS
mail.smtp.starttls.enable=false
# SSL
mail.smtp.ssl.enable=true
mail.smtp.ssl.trust=smtp.qq.com
5.3.3 測試
1)運行工作流
2)選擇通知策略
3)選擇通知人
通知人可通過郵箱執行,也可通過通知組指定。
5.4 工作流失敗重跑
若工作流執行到一半失敗了,需要重新啓動工作流。重新啓動時可選擇從起點開始執行,也可選擇從斷點開始執行。
1)模擬失敗場景
(1)修改Node-A配置如下
(2)修改資源中心的test.sh文件如下
2)運行工作流
3)查看工作流實例
4)工作失敗重跑
(1)從起點開始
(2)從斷點開始