因業務發展需要,現有數據平臺要承擔的任務越來越多,迫切需要上線一個易用的調度系統,考慮到要將現有的定時任務從crontab快速遷移到新調度系統,且要易於部署管理,方便擴展,支持HA等要求,近期調研了多款調度系統如airflow以及azkaban,最後發現了一款國產開源的調度系統非常適合我們的需求(最重要還有天生支持中文,不用花時間調神馬時區問題,漢化問題,字符編碼問題等等一堆糟心問題,哈哈),DolphinScheduler的前身是EasyScheduler,
安裝包下載地址:https://dolphinscheduler.apache.org/en-us/docs/user_doc/download.html
1.部署後端
-
1.1後端安裝,支持自動安裝,源碼編譯安裝,這裏使用自動安裝
-
準備,創建新用戶big-data,修改用戶權限,賦予sudo權限
$ chmod 640 /etc/sudoers && vim /etc/sudoers #在root ALL=(ALL) ALL行下添加: big-data ALL=(ALL) NOPASSWD: NOPASSWD: ALL
-
給big-data配置ssh免密(從node1開始,每個節點執行)
node1: ssh-keygen -t rsa 登錄各節點執行ssh-keygen -t rsa 一路回車到結束,在~/.ssh/下面會生成一個公鑰文件id_rsa.pub cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 將公鑰追加到authorized_keys $ chmod 600 ~/.ssh/authorized_keys 修改權限 將 ~/.ssh/authorized_keys從當前節點分發到其他各個節點。如: scp ~/.ssh/authorized_keys big-data@hdfs1:~/.ssh/
-
創建元數據庫:
CREATE DATABASE escheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; GRANT ALL PRIVILEGES ON escheduler.* TO 'escheduler'@'%' IDENTIFIED BY 'escheduler'; flush privileges;
-
創建安裝目錄:
$ sudo mkdir /opt/dolphinScheduler #修改部署目錄權限 $ chown big-data:big-data /opt/dolphinScheduler $ cd /opt/dolphinScheduler
-
上傳安裝包:
mkdir escheduler
#存放後端包解壓文件
mkdir front
#存放前端包解壓文件
-
修改配置文件:vim /opt/dolphinScheduler/escheduler/conf/application-dao.properties,創建表和導入基礎數據
註釋掉postgre配置,修改mysql配置:spring.datasource.url,username以及password
-
執行創建表和導入數據腳本:
sh backend/script/create-dolphinscheduler.sh
執行過程如遇到如下報錯:
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
將mysql驅動拷貝到lib目錄下即可:
-
修改運行參數
vi conf/env/.dolphinscheduler_env.sh
-
修改 install.sh中的各參數,替換成自身業務所需的值
# for example postgresql or mysql ... dbtype="mysql" # db address and port dbhost="slave199:3306" # db name dbname="escheduler" # db username username="escheduler" # db passwprd passowrd="escheduler" #各節點部署後端服務目錄,和當前解壓安裝包目錄不一樣 installPath="/opt/dolphinScheduler/backend" # 部署使用的user,需要有免密sudo權限以及ssh權限 deployUser="big-data" # zk cluster zkQuorum="master197:2181,slave198:2181,slave199:2181" # 需要部署dolphinscheduler的節點 ips="master197,slave198,slave199" #master節點,可配置多個 masters="slave198" #worker節點 workers="master197,slave198,slave199" #alert服務節點 alertServer="slave198" #api服務節點 apiServers="slave198" # alert config # mail protocol mailProtocol="SMTP" # mail server host mailServerHost="smtp.exmail.qq.com" # mail server port mailServerPort="465" # sender mailSender="[email protected]" # user mailUser="xxx" # sender password mailPassword="passwd" # 資源中心上傳選擇存儲方式:HDFS,S3,NONE resUploadStartupType="HDFS" # 如果resUploadStartupType爲HDFS,defaultFS寫namenode地址,支持HA,需要將core-site.xml和hdfs-site.xml放到conf目錄下 # 如果是S3,則寫S3地址,比如說:s3a://escheduler,注意,一定要創建根目錄/escheduler defaultFS="hdfs://slave198:8020" # resourcemanager HA configuration, if it is a single resourcemanager, here is yarnHaIps="" yarnHaIps="master197,slave199" #如果是單 resourcemanager,只需要配置一個主機名稱,如果是resourcemanager HA,則默認配置就好 singleYarnIp="master197" #部署scheduler用戶的hdfs根路徑 hdfsPath="/big-data" #hdfs集羣的root用戶 hdfsRootUser="hdfs" # common config # Program root path programPath="/tmp/dolphinscheduler" # download path downloadPath="/tmp/dolphinscheduler/download" # task execute path execPath="/tmp/dolphinscheduler/exec" # SHELL environmental variable path shellEnvPath="$installPath/conf/env/.dolphinscheduler_env.sh" # suffix of the resource file resSuffixs="txt,log,sh,conf,cfg,py,java,sql,hql,xml"
-
將hadoop的配置文件hdfs-site.xml,以及core-site.xml拷貝到conf下:
cp /etc/hadoop/conf/hdfs-site.xml conf/ cp /etc/hadoop/conf/core-site.xml conf/
-
執行一鍵安裝部署腳本:
sh install.sh
-
dolphinscheduler後端服務啓停腳本:
#啓動 /opt/dolphinScheduler/backend/script/start-all.sh #停止 /opt/dolphinScheduler/backend/script/stop-all.sh
-
服務成功後,會看到如下相關進程
[big-data@slave198 logs]$ jps 28817 WorkerServer 28995 ApiApplicationServer 28756 MasterServer 28936 AlertServer 28875 LoggerServer
-
-
1.2報錯解決
/opt/dolphinScheduler/backend/logs/*.out日誌文件中發現有如下錯誤:nohup: failed to run command ‘/bin/java’: No such file or directory
將JAVA_HOME/bin下的java軟連接到/bin下,(所有節點)
ln -s $JAVA_HOME/bin/java /bin/java
2.部署前端
- 2.1下載安裝包並解壓
cd /opt/dolphinScheduler mkdir front tar -zxvf apache-dolphinscheduler-incubating-1.2.0-dolphinscheduler-front-bin.tar.gz -C front ```
- 2.2執行自動化安裝部署腳本
sudo sh ./install-dolphinscheduler-ui.sh
使用自動化部署腳本會檢查系統環境是否安裝了Nginx,如果沒有安裝則會通過網絡自動下載Nginx包安裝,通過引導設置後的Nginx配置文件爲 /etc/nginx/conf.d/dolphinscheduler.conf 。
- 2.3報錯解決
安裝nginx過程執行firewall-cmd報錯:ModuleNotFoundError: No module named 'gi' vim /usr/bin/firewall-cmd 將#!/usr/bin/python -Es 改爲 #!/usr/bin/python2 -Es vim /usr/sbin/firewalld, 將#!/usr/bin/python -Es 改爲 #!/usr/bin/python2 -Es #然後重啓nginx服務即可! systemctl restart nginx #查看nginx服務狀態 systemctl status nginx #停止nginx服務 systemctl stop nginx #如果遇到nginx服務啓動失敗: #nginx: [error] open() "/run/nginx.pid" failed (2: No such file or directory) #執行: sudo nginx -c /etc/nginx/nginx.conf nginx -s reload #如果報錯: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) #找到佔用80端口的進程,然後kill掉即可! netstat -ntlp | grep 80 kill pid
3.開始使用dolphinScheduler
- 3.1訪問:http://slave198:8888/
使用dolphinscheduler的默認用戶密碼登錄:admin/dolphinscheduler123
- 3.2創建一個隊列:隊列管理>>創建隊列,輸入名稱和隊列值,然後提交保存
- 3.3創建租戶:租戶管理>>創建租戶,輸入租戶編碼,名稱,選擇隊列名稱,然後提交(注意這裏的租戶可以是linux系統已經存在的用戶)
- 3.4創建普通用戶:用戶管理>>創建用戶,輸入用戶名稱、密碼、租戶名和郵箱,手機號選填 然後提交
- 3.5創建告警組:告警組管理>>創建告警組,輸入組名稱,類型
- 3.6切換到test用戶登錄,然後創建一個項目:項目管理>>
- 3.7給項目創建工作流:點擊新建項目進入項目首頁,點擊工作流定義>>創建工作流>>點擊shell圖標(選擇項有:SHELL、SUB_PROCESS、PROCEDURE、SQL、SPARK、FLINK、MR、PYTHON、DEPENDENT、HTTP),拖拽到畫布,新增一個Shell任務,輸入節點名稱、描述、腳本;選擇運行標誌,任務優先級 (級別高的任務在執行隊列中會優先執行,相同優先級的任務按照先進先出的順序執行),超時告警,選擇超市策略(當任務執行時間超過超時時長可以告警並且超時失敗),填寫超時時長 ,然後點擊確認添加
- 3.8保存dag:工作流定義完成後,點擊保存,輸入dag名稱,描述,選擇租戶,最後添加
- 3.9執行工作流:剛保存的dag處於下線狀態,可以編輯但不能執行,需要上線,才能執行,點擊操作欄下的上線圖標按鈕上線,然後點擊運行,需要設置運行參數,參數說明如下:
失敗策略:當某一個任務節點執行失敗時,其他並行的任務節點需要執行的策略。”繼續“表示:其他任務節點正常執行,”結束“表示:終止所有正在執行的任務,並終止整個流程。 通知策略:當流程結束,根據流程狀態發送流程執行信息通知郵件。 流程優先級:流程運行的優先級,分五個等級:最高(HIGHEST),高(HIGH),中(MEDIUM),低(LOW),最低(LOWEST)。級別高的流程在執行隊列中會優先執行,相同優先級的流程按照先進先出的順序執行。 worker分組: 這個流程只能在指定的機器組裏執行。默認是Default,可以在任一worker上執行。 通知組: 當流程結束,或者發生容錯時,會發送流程信息郵件到通知組裏所有成員。 收件人:輸入郵箱後按回車鍵保存。當流程結束、發生容錯時,會發送告警郵件到收件人列表。 抄送人:輸入郵箱後按回車鍵保存。當流程結束、發生容錯時,會抄送告警郵件到抄送人列表。
- 3.10查看執行結果:點擊任務實例可以查看每個任務的列表信息,點擊操作欄,查看日誌信息。
- 3.11定時執行工作流:點擊工作流定義,找到需要定時執行的任務,點擊操作欄下定時圖標按鈕,選擇起止時間,定時週期,失敗策略,通知策略等,然後點創建,之後可以看到定時狀態位下線,點擊定時管理跳到定時管理頁,點擊上線,上線定時任務,定時任務的執行狀態可以在操作欄下樹形圖中快速瀏覽到
4.使用worker分組執行任務
worker分組,提供了一種讓任務在指定的worker上運行的機制。管理員創建worker分組,在任務節點和運行參數中設置中可以指定該任務運行的worker分組,如果指定的分組被刪除或者沒有指定分組,則該任務會在任一worker上運行。
worker分組內多個ip地址(不能寫別名),以英文逗號分隔。
- 4.1切換到admin用戶登錄,點擊安全中心>>worker分組管理>>創建worker分組,輸入組名稱和ip,多個ip之間用英文,分割。提交後可通過操作欄下編輯按鈕進行修改。
5.添加數據源
一般SQL腳本執行時會用到多種數據源,例如MySQL、PostgreSQL、Hive、Impala、Spark、ClickHouse、Oracle、SQL Server,
通過添加數據源在DolphinScheduler頁面編寫Job時直接選擇,不用再指定驅動、連接、用戶名和密碼等信息,
可以快速創建一個SQL腳本的工作流Job,同時這個數據源時用戶隔離的,每個用戶添加的數據源相互獨立(admin用戶除外,管理員用戶可以看到所有用戶添加的數據源)
- 5.1配置mysql數據源,點擊數據源中心 >> 創建數據源,輸入名稱、主機名、端口、用戶名密碼、以及庫名,然後點擊測試連接,成功後點擊提交即可.