Apache DolphinScheduler 是一個分散式易擴充套件的視覺化 DAG 工作流任務排程系統。致力於解決資料處理流程中錯綜複雜的依賴關係,使排程系統在資料處理流程中開箱即用
。
主要特性
- 易於部署,提供四種部署方式,包括Standalone、Cluster、Docker和Kubernetes
- 易於使用,可以透過四種方式建立和管理工作流,包括Web UI、Python SDK和Open API
- 高可靠高可用,多主多從的去中心化架構,原生支援橫向擴充套件
- 高效能,效能比其他編排平臺快N倍,每天可支援千萬級任務
- Cloud Native,DolphinScheduler支援編排多雲/資料中心工作流,支援自定義任務型別
- 對工作流和工作流例項(包括任務)進行版本控制
- 工作流和任務的多種狀態控制,支援隨時暫停/停止/恢復它們
- 多租戶支援
- 其他如補數支援(Web UI 原生),包括專案和資料來源的許可權控制
單節點部署
安裝包下載
- JDK:下載JDK (1.8+),安裝並配置
JAVA_HOME
環境變數,並將其下的bin
目錄追加到PATH
環境變數中。如果你的環境中已存在,可以跳過這步。 - 二進位制包:在下載頁面下載 DolphinScheduler 二進位制包
解壓並啟動 DolphinScheduler
二進位制壓縮包中有 Standalone
啟動的指令碼,解壓後即可快速啟動。
切換到有sudo
許可權的使用者,執行指令碼:
# 解壓並執行 Standalone Server
tar -xvzf apache-dolphinscheduler-*-bin.tar.gz
cd apache-dolphinscheduler-*-bin
bash ./bin/dolphinscheduler-daemon.sh start standalone-server
登入 DolphinScheduler
瀏覽器訪問地址 http://localhost:12345/dolphinscheduler/ui 即可登入系統UI。
預設的使用者名稱和密碼是 admin/dolphinscheduler123
啟停服務
指令碼 ./bin/dolphinscheduler-daemon.sh
除了可以快捷啟動 standalone 外,還能停止服務執行,全部命令如下
# 啟動 Standalone Server 服務
bash ./bin/dolphinscheduler-daemon.sh start standalone-server
# 停止 Standalone Server 服務
bash ./bin/dolphinscheduler-daemon.sh stop standalone-server
配置資料庫
Standalone server 使用 H2 資料庫作為其後設資料儲存資料,這是為了上手簡單,使用者在啟動伺服器之前不需要啟動資料庫。
但是如果使用者想將後設資料庫儲存在 MySQL 或 PostgreSQL 等其他資料庫中,他們必須更改一些配置。
請參考 資料來源配置 Standalone 切換後設資料庫
建立並初始化資料庫
偽叢集部署
安裝包下載
偽分散式部署 Apache DolphinScheduler 需要有外部軟體的支援
- JDK:下載JDK (1.8+),安裝並配置
JAVA_HOME
環境變數,並將其下的bin
目錄追加到PATH
環境變數中。如果你的環境中已存在,可以跳過這步。 - 二進位制包:在下載頁面下載 DolphinScheduler 二進位制包
- 資料庫:PostgreSQL (8.2.15+) 或者 MySQL (5.7+),兩者任選其一即可,如 MySQL 則需要 JDBC Driver 8.0.16
- 註冊中心:ZooKeeper (3.4.6+),下載地址
- 程序樹分析
- macOS安裝
pstree
- Fedora/Red/Hat/CentOS/Ubuntu/Debian安裝
psmisc
- macOS安裝
*注意:* DolphinScheduler 本身不依賴 Hadoop、Hive、Spark,但如果你執行的任務需要依賴他們,就需要有對應的環境支援
配置使用者免密及許可權
建立部署使用者,並且一定要配置 sudo
免密。以建立 dolphinscheduler 使用者為例
# 建立使用者需使用 root 登入
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
# 修改目錄許可權,使得部署使用者對二進位制包解壓後的 apache-dolphinscheduler-*-bin 目錄有操作許可權
chown -R dolphinscheduler:dolphinscheduler apache-dolphinscheduler-*-bin
啟動zookeeper
進入 zookeeper 的安裝目錄,將 zoo_sample.cfg
配置檔案複製到 conf/zoo.cfg
,並將 conf/zoo.cfg
中 dataDir 中的值改成 dataDir=./tmp/zookeeper
# 啟動 zookeeper
./bin/zkServer.sh start
修改 install_env.sh
檔案
檔案 install_env.sh
描述了哪些機器將被安裝 DolphinScheduler 以及每臺機器對應安裝哪些服務。
您可以在路徑 bin/env/install_env.sh
中找到此檔案,可透過以下方式更改env變數,export <ENV_NAME>=,配置詳情如下。
# ---------------------------------------------------------
# INSTALL MACHINE
# ---------------------------------------------------------
# Due to the master, worker, and API server being deployed on a single node, the IP of the server is the machine IP or localhost
ips="localhost"
sshPort="22"
masters="localhost"
workers="localhost:default"
alertServer="localhost"
apiServers="localhost"
# DolphinScheduler installation path, it will auto-create if not exists
installPath=~/dolphinscheduler
# Deploy user, use the user you create in section **Configure machine SSH password-free login**
deployUser="dolphinscheduler"
修改 dolphinscheduler_env.sh
檔案
檔案 ./bin/env/dolphinscheduler_env.sh
描述了下列配置:
- DolphinScheduler 的資料庫配置,詳細配置方法見初始化資料庫
- 一些任務型別外部依賴路徑或庫檔案,如
JAVA_HOME
和SPARK_HOME
都是在這裡定義的 - 註冊中心
zookeeper
- 服務端相關配置,比如快取,時區設定等
如果不使用某些任務型別,可以忽略任務外部依賴項,但必須根據環境更改 JAVA_HOME
、註冊中心和資料庫相關配置。
# JAVA_HOME, will use it to start DolphinScheduler server
export JAVA_HOME=${JAVA_HOME:-/opt/soft/java}
# Database related configuration, set database type, username and password
export DATABASE=${DATABASE:-postgresql}
export SPRING_PROFILES_ACTIVE=${DATABASE}
export SPRING_DATASOURCE_URL="jdbc:postgresql://127.0.0.1:5432/dolphinscheduler"
export SPRING_DATASOURCE_USERNAME={user}
export SPRING_DATASOURCE_PASSWORD={password}
# DolphinScheduler server related configuration
export SPRING_CACHE_TYPE=${SPRING_CACHE_TYPE:-none}
export SPRING_JACKSON_TIME_ZONE=${SPRING_JACKSON_TIME_ZONE:-UTC}
export MASTER_FETCH_COMMAND_NUM=${MASTER_FETCH_COMMAND_NUM:-10}
# Registry center configuration, determines the type and link of the registry center
export REGISTRY_TYPE=${REGISTRY_TYPE:-zookeeper}
export REGISTRY_ZOOKEEPER_CONNECT_STRING=${REGISTRY_ZOOKEEPER_CONNECT_STRING:-localhost:2181}
# Tasks related configurations, need to change the configuration if you use the related tasks.
export HADOOP_HOME=${HADOOP_HOME:-/opt/soft/hadoop}
export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-/opt/soft/hadoop/etc/hadoop}
export SPARK_HOME1=${SPARK_HOME1:-/opt/soft/spark1}
export SPARK_HOME2=${SPARK_HOME2:-/opt/soft/spark2}
export PYTHON_HOME=${PYTHON_HOME:-/opt/soft/python}
export HIVE_HOME=${HIVE_HOME:-/opt/soft/hive}
export FLINK_HOME=${FLINK_HOME:-/opt/soft/flink}
export DATAX_HOME=${DATAX_HOME:-/opt/soft/datax}
export PATH=$HADOOP_HOME/bin:$SPARK_HOME1/bin:$SPARK_HOME2/bin:$PYTHON_HOME/bin:$JAVA_HOME/bin:$HIVE_HOME/bin:$FLINK_HOME/bin:$DATAX_HOME/bin:$PATH
初始化資料庫
DolphinScheduler 後設資料儲存在關係型資料庫中,目前支援 PostgreSQL 和 MySQL。
下面分別介紹如何使用 MySQL 和 PostgresQL 初始化資料庫。
如果使用 MySQL 需要手動下載 mysql-connector-java 驅動 (8.0.16) 並移動到 DolphinScheduler 的每個模組的 libs 目錄下,其中包括
api-server/libs
和alert-server/libs
和master-server/libs
和worker-server/libs
。
對於MySQL 5.6 / 5.7:
mysql -uroot -p
mysql> CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
# 修改 {user} 和 {password} 為你希望的使用者名稱和密碼
mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO '{user}'@'%' IDENTIFIED BY '{password}';
mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO '{user}'@'localhost' IDENTIFIED BY '{password}';
mysql> flush privileges;
對於MySQL 8:
mysql -uroot -p
mysql> CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
# 修改 {user} 和 {password} 為你希望的使用者名稱和密碼
mysql> CREATE USER '{user}'@'%' IDENTIFIED BY '{password}';
mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO '{user}'@'%';
mysql> CREATE USER '{user}'@'localhost' IDENTIFIED BY '{password}';
mysql> GRANT ALL PRIVILEGES ON dolphinscheduler.* TO '{user}'@'localhost';
mysql> FLUSH PRIVILEGES;
對於 PostgreSQL:
# 採用命令列工具登陸 PostgreSQL
psql
# 建立資料庫
postgres=# CREATE DATABASE dolphinscheduler;
# 修改 {user} 和 {password} 為你希望的使用者名稱和密碼
postgres=# CREATE USER {user} PASSWORD {password};
postgres=# ALTER DATABASE dolphinscheduler OWNER TO {user};
# 退出 PostgreSQL
postgres=#\q
# 在終端執行如下命令,向配置檔案新增登陸許可權,並過載 PostgreSQL 配置,替換 {ip} 為對應的 DS 叢集伺服器 IP 地址段
echo "host dolphinscheduler {user} {ip} md5" >> $PGDATA/pg_hba.conf
pg_ctl reload
然後修改./bin/env/dolphinscheduler_env.sh
,將username和password改成你在上一步中設定的使用者名稱{user}和密碼{password}
對於 MySQL:
# for mysql
export DATABASE=${DATABASE:-mysql}
export SPRING_PROFILES_ACTIVE=${DATABASE}
export SPRING_DATASOURCE_URL="jdbc:mysql://127.0.0.1:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8&useSSL=false"
export SPRING_DATASOURCE_USERNAME={user}
export SPRING_DATASOURCE_PASSWORD={password}
對於 PostgreSQL:
# for postgresql
export DATABASE=${DATABASE:-postgresql}
export SPRING_PROFILES_ACTIVE=${DATABASE}
export SPRING_DATASOURCE_URL="jdbc:postgresql://127.0.0.1:5432/dolphinscheduler"
export SPRING_DATASOURCE_USERNAME={user}
export SPRING_DATASOURCE_PASSWORD={password}
完成上述步驟後,您已經為 DolphinScheduler 建立一個新資料庫,現在你可以透過快速的 Shell 指令碼來初始化資料庫
bash tools/bin/upgrade-schema.sh
啟動 DolphinScheduler
使用上面建立的部署使用者執行以下命令完成部署,部署後的執行日誌將存放在 logs 資料夾內。
bash ./bin/install.sh
*注意:* 第一次部署的話,可能出現 5 次
sh: bin/dolphinscheduler-daemon.sh: No such file or directory
相關資訊,此為非重要資訊直接忽略即可
登入 DolphinScheduler
瀏覽器訪問地址 http://localhost:12345/dolphinscheduler/ui 即可登入系統UI。預設的使用者名稱和密碼是 admin/dolphinscheduler123
啟停服務
# 一鍵停止叢集所有服務
bash ./bin/stop-all.sh
# 一鍵開啟叢集所有服務
bash ./bin/start-all.sh
# 啟停 Master
bash ./bin/dolphinscheduler-daemon.sh stop master-server
bash ./bin/dolphinscheduler-daemon.sh start master-server
# 啟停 Worker
bash ./bin/dolphinscheduler-daemon.sh start worker-server
bash ./bin/dolphinscheduler-daemon.sh stop worker-server
# 啟停 Api
bash ./bin/dolphinscheduler-daemon.sh start api-server
bash ./bin/dolphinscheduler-daemon.sh stop api-server
# 啟停 Alert
bash ./bin/dolphinscheduler-daemon.sh start alert-server
bash ./bin/dolphinscheduler-daemon.sh stop alert-server
Docker 部署
使用 standalone-server 映象
使用 Standalone-server
映象啟動一個 DolphinScheduler standalone-server 容器應該是最快體驗 DolphinScheduler 的方法。
透過這個方式 你可以最快速的體驗到 DolphinScheduler 的大部分功能,瞭解主要和概念和內容。
DOLPHINSCHEDULER_VERSION=3.1.5
docker run --name dolphinscheduler-standalone-server -p 12345:12345 -p 25333:25333 -d apache/dolphinscheduler-standalone-server:"${DOLPHINSCHEDULER_VERSION}"
注意:請不要將 apache/dolphinscheduler-standalone-server 映象作為生產映象,應該僅僅作為快速體驗 DolphinScheduler 的功能的途徑。
除了因為他將全部服務執行在一個程序中外,還因為其使用記憶體資料庫 H2 儲存其後設資料,當服務停止時記憶體資料庫中的資料將會被清空。
另外 apache/dolphinscheduler-standalone-server 僅包含 DolphinScheduler 核心服務,部分任務元件(如 Spark 和 Flink 等), 告警元件(如 Telegram 和 Dingtalk 等)需要外部的元件或對應的配置後
使用 docker-compose 啟動服務
使用 docker-compose
啟動服務相比 standalone-server
的優點是 DolphinScheduler 的各個是獨立的容器和程序,相互影響降到最小,且能夠在服務重啟的時候保留後設資料(如需要掛載到本地路徑需要做指定)。
更健壯,能保證使用者體驗更加完整的 DolphinScheduler 服務。
這種方式需要先安裝 docker-compose,連結適用於 Mac,Linux,Windows。
安裝完成 docker-compose
後我們需要修改部分配置以便能更好體驗 DolphinScheduler 服務,我們需要配置不少於 4GB 的空閒記憶體:
- Mac:點選
Docker Desktop -> Preferences -> Resources -> Memory
調整記憶體大小 - Windows Docker Desktop:
- Hyper-V 模式:點選
Docker Desktop -> Settings -> Resources -> Memory
調整記憶體大小 - WSL 2 模式 模式:參考 WSL 2 utility VM 調整記憶體大小
- Hyper-V 模式:點選
配置完成後我們需要獲取 docker-compose.yaml
檔案,透過下載頁面下載對應版本原始碼包可能是最快的方法,原始碼包對應的值為 "Total Source Code"。
當下載完原始碼後就可以執行命令進行部署了。
DOLPHINSCHEDULER_VERSION=3.1.5
tar -zxf apache-dolphinscheduler-"${DOLPHINSCHEDULER_VERSION}"-src.tar.gz
# Mac Linux 使用者
cd apache-dolphinscheduler-"${DOLPHINSCHEDULER_VERSION}"-src/deploy/docker
# Windows 使用者, `cd apache-dolphinscheduler-"${DOLPHINSCHEDULER_VERSION}"-src\deploy\docker`
# 如果需要初始化或者升級資料庫結構,需要指定profile為schema
docker-compose --profile schema up -d
# 啟動dolphinscheduler所有服務,指定profile為all
docker-compose --profile all up -d
提醒:透過 docker-compose 啟動服務時,除了會啟動 DolphinScheduler 對應的服務外,還會啟動必要依賴服務,如資料庫 PostgreSQL(使用者
root
, 密碼root
, 資料庫dolphinscheduler
) 和 服務發現 ZooKeeper。
沿用已有的 PostgreSQL 和 ZooKeeper 服務
使用 docker-compose
啟動服務會新啟動資料庫,以及 ZooKeeper 服務。
如果你已經有在執行中的資料庫,或者 ZooKeeper 且不想啟動新的服務,可以使用這個方式分別啟動 DolphinScheduler 容器。
DOLPHINSCHEDULER_VERSION=3.1.5
# 初始化資料庫,其確保資料庫 <DATABASE> 已經存在
docker run -d --name dolphinscheduler-tools \
-e DATABASE="postgresql" \
-e SPRING_DATASOURCE_URL="jdbc:postgresql://localhost:5432/<DATABASE>" \
-e SPRING_DATASOURCE_USERNAME="<USER>" \
-e SPRING_DATASOURCE_PASSWORD="<PASSWORD>" \
--net host \
apache/dolphinscheduler-tools:"${DOLPHINSCHEDULER_VERSION}" tools/bin/upgrade-schema.sh
# 啟動 DolphinScheduler 對應的服務
docker run -d --name dolphinscheduler-master \
-e DATABASE="postgresql" \
-e SPRING_DATASOURCE_URL="jdbc:postgresql://localhost:5432/dolphinscheduler" \
-e SPRING_DATASOURCE_USERNAME="<USER>" \
-e SPRING_DATASOURCE_PASSWORD="<PASSWORD>" \
-e REGISTRY_ZOOKEEPER_CONNECT_STRING="localhost:2181" \
--net host \
-d apache/dolphinscheduler-master:"${DOLPHINSCHEDULER_VERSION}"
docker run -d --name dolphinscheduler-worker \
-e DATABASE="postgresql" \
-e SPRING_DATASOURCE_URL="jdbc:postgresql://localhost:5432/dolphinscheduler" \
-e SPRING_DATASOURCE_USERNAME="<USER>" \
-e SPRING_DATASOURCE_PASSWORD="<PASSWORD>" \
-e REGISTRY_ZOOKEEPER_CONNECT_STRING="localhost:2181" \
--net host \
-d apache/dolphinscheduler-worker:"${DOLPHINSCHEDULER_VERSION}"
docker run -d --name dolphinscheduler-api \
-e DATABASE="postgresql" \
-e SPRING_DATASOURCE_URL="jdbc:postgresql://localhost:5432/dolphinscheduler" \
-e SPRING_DATASOURCE_USERNAME="<USER>" \
-e SPRING_DATASOURCE_PASSWORD="<PASSWORD>" \
-e REGISTRY_ZOOKEEPER_CONNECT_STRING="localhost:2181" \
--net host \
-d apache/dolphinscheduler-api:"${DOLPHINSCHEDULER_VERSION}"
docker run -d --name dolphinscheduler-alert-server \
-e DATABASE="postgresql" \
-e SPRING_DATASOURCE_URL="jdbc:postgresql://localhost:5432/dolphinscheduler" \
-e SPRING_DATASOURCE_USERNAME="<USER>" \
-e SPRING_DATASOURCE_PASSWORD="<PASSWORD>" \
-e REGISTRY_ZOOKEEPER_CONNECT_STRING="localhost:2181" \
--net host \
-d apache/dolphinscheduler-alert-server:"${DOLPHINSCHEDULER_VERSION}"
注意:如果你本地還沒有對應的資料庫和 ZooKeeper 服務,但是想要嘗試這個啟動方式,可以先安裝並啟動 PostgreSQL(8.2.15+) 以及 ZooKeeper(3.8.0)
本文完!
本文由 白鯨開源 提供釋出支援!