大資料排程元件之Apache DolphinScheduler

海豚调度發表於2024-11-20

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

*注意:* 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_HOMESPARK_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/libsalert-server/libsmaster-server/libsworker-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 調整記憶體大小

配置完成後我們需要獲取 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)

本文完!

本文由 白鯨開源 提供釋出支援!

相關文章