Apache DolphinScheduler(海豚調度系統)介紹與環境部署
一、概述
Apache DolphinScheduler(簡稱DolphinScheduler)是一種開源的、分布式的、易于使用的大數據工作流調度系統。它旨在為大數據處理提供一個可靠、高效和可擴展的調度解決方案。
DolphinScheduler具有以下特點和功能:
- 分布式架構:DolphinScheduler采用了分布式架構,可以在大規模集群上運行,實現高并發的任務調度和執行。
- 多種任務類型:支持多種類型的任務,包括Shell任務、Spark任務、Hadoop任務、SQL任務等,可以滿足各種大數據處理需求。
- 可視化工作流編輯器:提供了直觀易用的工作流編輯器,可以通過圖形界面進行工作流的創建、編輯和調度管理,無需編寫復雜的代碼。
- 豐富的調度策略:支持靈活的調度策略,可以根據任務依賴關系、優先級、資源需求等進行調度和管理。
- 任務監控和告警:提供了實時的任務監控和告警功能,可以及時了解任務的執行情況和異常情況,并采取相應的措施進行處理。
- 安全和權限管理:支持用戶認證和授權,可以對任務和資源進行細粒度的權限管理,保證系統的安全性和數據的隱私性。
- 擴展性和集成性:DolphinScheduler提供了豐富的擴展接口和插件機制,可以方便地集成到現有的大數據生態系統中,并支持自定義插件開發。
總之,Apache DolphinScheduler是一個功能強大的大數據工作流調度系統,可以幫助用戶實現高效、可靠的大數據處理任務調度和管理。它是開源社區的項目,用戶可以根據自己的需求進行定制和擴展,并參與社區共同貢獻和發展。
- 官網:https://dolphinscheduler.apache.org/zh-cn
- GitHub:https://github.com/apache/dolphinscheduler
二、Apache DolphinScheduler 與 Azkaban 對比
Apache DolphinScheduler 和 Azkaban 都是開源的大數據工作流調度系統,用于管理和調度大數據處理任務。它們具有一些相似的特點,但也有一些區別。
相似之處:
- 工作流調度:兩者都提供了工作流調度功能,可以定義任務之間的依賴關系,按照指定的調度策略和優先級來執行任務。
- 可視化編輯器:兩者都提供了可視化的工作流編輯器,可以通過圖形界面創建、編輯和管理工作流,減少了對復雜的腳本編寫的依賴。
- 多任務類型支持:兩者都支持多種類型的任務,如Shell任務、Hadoop任務、Spark任務等,可以滿足各種大數據處理需求。
- 調度監控和告警:兩者都提供了任務的監控和告警功能,可以實時查看任務的執行狀態,并及時通知用戶執行結果或異常情況。
區別之處:
- 架構設計:DolphinScheduler 采用分布式架構,可以在大規模集群上運行,支持高并發的任務調度和執行。而 Azkaban 采用集中式架構,適用于中小規模的集群。
- 擴展性和集成性:DolphinScheduler 提供了豐富的擴展接口和插件機制,可以方便地與其他大數據生態系統進行集成,并支持自定義插件開發。Azkaban 在擴展性和集成性方面相對較弱。
- 權限管理:DolphinScheduler 支持用戶認證和授權,可以對任務和資源進行細粒度的權限管理。Azkaban 也支持權限管理,但在細粒度控制方面較弱。
- 社區發展和支持:DolphinScheduler是一個新興的開源項目,社區活躍度逐漸增加,但相對于Azkaban來說,社區支持和文檔資源相對較少。
選擇使用 Apache DolphinScheduler 還是 Azkaban 取決于具體的需求和情況。如果您需要一個高可擴展性和靈活性的調度系統,并且希望與其他大數據生態系統進行深度集成,DolphinScheduler 可能是一個不錯的選擇。如果您的集群規模較小,并且對權限管理的要求不是很高,同時希望使用一個經過長期發展和廣泛使用的調度系統,Azkaban 可能更適合您的需求。
三、DolphinScheduler 架構設計
啟動流程活動圖
架構說明
- MasterServer:MasterServer 采用分布式無中心設計理念,MasterServer 主要負責 DAG 任務切分、任務提交監控,并同時監聽其它 MasterServer 和 WorkerServer 的健康狀態。 MasterServer 服務啟動時向 Zookeeper 注冊臨時節點,通過監聽Zookeeper臨時節點變化來進行容錯處理。 MasterServer基于netty提供監聽服務。該服務內主要包含:
DistributedQuartz分布式調度組件,主要負責定時任務的啟停操作,當quartz調起任務后,Master內部會有線程池具體負責處理任務的后續操作;
MasterSchedulerService是一個掃描線程,定時掃描數據庫中的t_ds_command表,根據不同的命令類型進行不同的業務操作;
WorkflowExecuteRunnable主要是負責DAG任務切分、任務提交監控、各種不同事件類型的邏輯處理;
TaskExecuteRunnable主要負責任務的處理和持久化,并生成任務事件提交到工作流的事件隊列;
EventExecuteService主要負責工作流實例的事件隊列的輪詢;
StateWheelExecuteThread主要負責工作流和任務超時、任務重試、任務依賴的輪詢,并生成對應的工作流或任務事件提交到工作流的事件隊列;
FailoverExecuteThread主要負責Master容錯和Worker容錯的相關邏輯;
- WorkerServer:WorkerServer也采用分布式無中心設計理念,WorkerServer主要負責任務的執行和提供日志服務。 WorkerServer服務啟動時向Zookeeper注冊臨時節點,并維持心跳。 WorkerServer基于netty提供監聽服務。該服務包含:
WorkerManagerThread主要負責任務隊列的提交,不斷從任務隊列中領取任務,提交到線程池處理;
TaskExecuteThread主要負責任務執行的流程,根據不同的任務類型進行任務的實際處理;
RetryReportTaskStatusThread主要負責定時輪詢向Master匯報任務的狀態,直到Master回復狀態的ack,避免任務狀態丟失;
ZooKeeper:ZooKeeper服務,系統中的MasterServer和WorkerServer節點都通過ZooKeeper來進行集群管理和容錯。另外系統還基于ZooKeeper進行事件監聽和分布式鎖。 我們也曾經基于Redis實現過隊列,不過我們希望DolphinScheduler依賴到的組件盡量地少,所以最后還是去掉了Redis實現。
AlertServer:提供告警服務,通過告警插件的方式實現豐富的告警手段。
ApiServer:API接口層,主要負責處理前端UI層的請求。該服務統一提供RESTful api向外部提供請求服務。
UI:系統的前端頁面,提供系統的各種可視化操作界面。
這里只是摘錄了官方文檔部分內容,更多內容可以參考官方文檔:https://dolphinscheduler.apache.org/zh-cn/docs/3.1.7/architecture/design
四、環境部署
1)環境信息
IP | 主機名 | 角色 |
192.168.182.110 | local-168-182-110 | master-server、api-server、alert-server、ZK、MySQL |
192.168.182.111 | local-168-182-111 | master-server、worker-server |
192.168.182.112 | local-168-182-112 | worker-server |
2)安裝 JDK
官網下載:https://www.oracle.com/java/technologies/downloads/
百度云下載
鏈接:https://pan.baidu.com/s/1-rgW-Z-syv24vU15bmMg1w提取碼:8888
# 編輯/etc/profile,文末插入以下內容:
# set java
export JAVA_HOME=/opt/apache/jdk1.8.0_212
export PATH=$JAVA_HOME/bin:$PATH
3)安裝 MySQL 數據庫
這里選擇docker快速部署的方式:通過 docker-compose 快速部署 MySQL保姆級教程
1、部署 docker
# 安裝yum-config-manager配置工具
yum -y install yum-utils
# 建議使用阿里云yum源:(推薦)
#yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安裝docker-ce版本
yum install -y docker-ce
# 啟動并開機啟動
systemctl enable --now docker
docker --version
2、部署 docker-compose
curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
3、安裝 git
yum -y install git
3、開始部署
git clone https://gitee.com/hadoop-bigdata/docker-compose-mysql.git
cd docker-compose-mysql
# create network
docker network create hadoop-network
# 部署
docker-compose -f docker-compose.yaml up -d
# 查看
docker-compose -f docker-compose.yaml ps
# 登錄mysql
mysql -uroot -p
# 輸入密碼:123456
# 創建數據庫
create database dolphinscheduler character set utf8 ;
CREATE USER 'dolphinscheduler'@'%'IDENTIFIED BY 'dolphinscheduler@123';
GRANT ALL PRIVILEGES ON dolphinscheduler.* TO 'dolphinscheduler'@'%';
FLUSH PRIVILEGES;
4)安裝注冊中心 Zookeeper
這里選擇docker快速部署的方式:【中間件】通過 docker-compose 快速部署 Zookeeper 保姆級教程
git clone https://gitee.com/hadoop-bigdata/docker-compose-zookeeper.git
cd docker-compose-zookeeper
# 部署
docker-compose -f docker-compose.yaml up -d
# 查看
docker-compose -f docker-compose.yaml ps
5)下載 dolphinscheduler 安裝包
wget https://dlcdn.apache.org/dolphinscheduler/3.1.7/apache-dolphinscheduler-3.1.7-bin.tar.gz --no-check-certificate
# 解壓
tar -xvzf apache-dolphinscheduler-*-bin.tar.gz
注意: DolphinScheduler 本身不依賴 Hadoop、Hive、Spark,但如果你運行的任務需要依賴他們,就需要有對應的環境支持。
6)修改配置
1、修改 install_env.sh 文件
文件 install_env.sh 描述了哪些機器將被安裝 DolphinScheduler 以及每臺機器對應安裝哪些服務。
bin/env/install_env.sh
配置
# ---------------------------------------------------------
# INSTALL MACHINE
# ---------------------------------------------------------
# 需要配置master、worker、API server,所在服務器的IP均為機器IP或者localhost
# 如果是配置hostname的話,需要保證機器間可以通過hostname相互鏈接
# 如下圖所示,部署 DolphinScheduler 機器的 hostname 為 ds1,ds2,ds3,ds4,ds5,其中 ds1,ds2 安裝 master 服務,ds3,ds4,ds5安裝 worker 服務,alert server安裝在ds4中,api server 安裝在ds5中
# ips="ds1,ds2,ds3,ds4,ds5"
ips="192.168.182.110,192.168.182.111,192.168.182.112"
# masters="ds1,ds2"
masters="192.168.182.110,192.168.182.111"
# workers="ds3:default,ds4:default,ds5:default"
workers="192.168.182.111:default,192.168.182.112:default"
# alertServer="ds4"
alertServer="192.168.182.110"
# apiServers="ds5"
apiServers="192.168.182.110"
2、修改 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}
export JAVA_HOME=/opt/apache/jdk1.8.0_212
# Database related configuration, set database type, username and password
# export DATABASE=${DATABASE:-postgresql}
export DATABASE=${DATABASE:-mysql}
export SPRING_PROFILES_ACTIVE=${DATABASE}
# export SPRING_DATASOURCE_URL="jdbc:postgresql://127.0.0.1:5432/dolphinscheduler"
export SPRING_DATASOURCE_URL="jdbc:mysql://192.168.182.110:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8&useSSL=false"
# export SPRING_DATASOURCE_USERNAME={user}
export SPRING_DATASOURCE_USERNAME=dolphinscheduler
# export SPRING_DATASOURCE_PASSWORD={password}
export SPRING_DATASOURCE_PASSWORD=dolphinscheduler@123
# 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}
export REGISTRY_ZOOKEEPER_CONNECT_STRING="192.168.182.110:31181,192.168.182.110:32181,192.168.182.110:33181"
# 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
3、下載MySQL驅動包
wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.16/mysql-connector-java-8.0.16.jar
mv mysql-connector-java-8.0.16.jar tools/libs/
cp tools/libs/mysql-connector-java-8.0.16.jar master-server/libs/
cp tools/libs/mysql-connector-java-8.0.16.jar worker-server/libs/
cp tools/libs/mysql-connector-java-8.0.16.jar alert-server/libs/
cp tools/libs/mysql-connector-java-8.0.16.jar api-server/libs/
【注意】除了將 mysql-connector-java-8.0.16.jar 驅動放到以上的libs文件夾后,還需要將mysql-connector-java-8.0.16.jar 驅動放到tools目錄下的libs目錄一份。
7)將配置copy其它節點
scp -r /opt/apache/dolphinscheduler local-168-182-111:/opt/apache/
scp -r /opt/apache/dolphinscheduler local-168-182-112:/opt/apache/
8)初始化數據庫
bash tools/bin/upgrade-schema.sh
9)啟動服務
因為機器資源有限,這里調整一下jvm內存
# master-server/bin/start.sh
# api-server/bin/start.sh
# alert-server/bin/start.sh
# ./worker-server/bin/start.sh
根據規劃,分別在不同機器上啟動對應的服務
IP | 主機名 | 角色 |
192.168.182.110 | local-168-182-110 | master-server、api-server、alert-server、ZK、MySQL |
192.168.182.111 | local-168-182-111 | master-server、worker-server |
192.168.182.112 | local-168-182-112 | worker-server |
# 啟停 Master
bash ./bin/dolphinscheduler-daemon.sh start master-server
# 查看日志
tail -f master-server/logs/dolphinscheduler-master.log
# bash ./bin/dolphinscheduler-daemon.sh stop master-server
# 啟停 Api
bash ./bin/dolphinscheduler-daemon.sh start api-server
# 查看日志
tail -f api-server/logs/dolphinscheduler-api.log
# bash ./bin/dolphinscheduler-daemon.sh stop api-server
# 啟停 Alert
bash ./bin/dolphinscheduler-daemon.sh start alert-server
# 查看日志
tail -f alert-server/logs/dolphinscheduler-alert.log
# bash ./bin/dolphinscheduler-daemon.sh stop alert-server
# 啟停 Worker
bash ./bin/dolphinscheduler-daemon.sh start worker-server
# 查看日志
tail -f worker-server/logs/dolphinscheduler-worker.log
# bash ./bin/dolphinscheduler-daemon.sh stop worker-server
10)web 地址訪問
# http://<your_ip>:12345/dolphinscheduler/ui/login
http://192.168.182.110:12345/dolphinscheduler/ui/login
默認賬戶密碼:admin/dolphinscheduler123