

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、ApacheDolphinScheduler介紹和設(shè)計原理1 概述(前處在孵化階段)是個分布式、去中化、易擴(kuò)展的可視化DAG作流任務(wù)調(diào)度系統(tǒng),其致于解決數(shù)據(jù)處理流程中錯綜復(fù)雜的依賴關(guān)系,使調(diào)度系統(tǒng)在數(shù)據(jù)處理流程中開箱即。DolphinScheduler是今年(2019年)中國公司開源的個調(diào)度系統(tǒng),在今年,易觀開源的分布式任務(wù)調(diào)度引擎DolphinScheduler(原EasyScheduler),根據(jù)Apache基會郵件列表顯,在包含11個約束性投票(binding votes)和2個約束性投票(non-binding votes)的投票全部持贊同意見,棄權(quán)票和反對票,投票順利通過,這樣便以全
2、票通過的優(yōu)秀表現(xiàn)正式成為了Apache孵化器項(xiàng)!1.1背景在2017年,易觀在運(yùn)營6.8Pb、6.02億活、每天近萬個調(diào)度任務(wù)的數(shù)據(jù)平臺時,受到ETL復(fù)雜的依賴關(guān)系、平臺易性、可維護(hù)性及次開發(fā)等掣肘,易觀的技術(shù)團(tuán)隊渴望找到個具有以下功能的數(shù)據(jù)調(diào)度具:易于使,開發(fā)員可以通過常簡單的拖拽操作構(gòu)建ETL過程。不僅對于ETL開發(fā)員,法編寫代碼的也可以使此具進(jìn)ETL操作,例如系統(tǒng)管理員和分析師;解決“復(fù)雜任務(wù)依賴”問題,并且可以實(shí)時監(jiān)視ETL運(yùn)狀態(tài);持多租戶;持許多任務(wù)類型:Shell,MR,Spark,SQL(mysql,postgresql,hive,sparksql),Python,Sub_Pro
3、cess,Procedure等;持HA和線性可擴(kuò)展性。易觀技術(shù)團(tuán)隊意識到現(xiàn)有開源項(xiàng)沒有能夠達(dá)到他們要求的,因此決定開發(fā)這個具。他們在2017年底設(shè)計了DolphinScheduler的主要架構(gòu);2018年5完成第個內(nèi)部使版本,后來迭代了個內(nèi)部版本后,系統(tǒng)逐漸穩(wěn)定下來。這介紹下DolphinScheduler易觀技術(shù)團(tuán)隊,他們是來百度、阿、百分點(diǎn)、Ptmind、熱云等團(tuán)隊的“數(shù)據(jù)極客”,秉持易觀“讓數(shù)據(jù)能平民化”的初,積極擁抱開源,曾貢獻(xiàn)過Presto Hbase Connector, 等令開發(fā)者稱贊的項(xiàng)。這次他們在公司的持下,積極地將開發(fā)的調(diào)度具推動開源,旨在回饋開源的同時,助打造個更為強(qiáng)的開
4、源態(tài)。如果躍躍欲試的想去貢獻(xiàn)代碼的,貢獻(xiàn)流程可以參考這篇博客:。團(tuán)隊在2019年3初,范圍(10多家公司)開放了DS的種戶試,得到了常正能量的反饋,在4初的正式對外開放源碼后,很快就獲得了許多開發(fā)員的關(guān)注興趣,前github上的star現(xiàn)在已超過1700個,參與開發(fā)和使的公司包括嘀嗒出、雪球、鳳凰融、滴互助、華潤萬家等,更詳細(xì)的可以查看:。1.2特點(diǎn)DolphinScheduler提供了許多易于使的功能,可加快數(shù)據(jù)ETL作開發(fā)流程的效率。其主要特點(diǎn)如下:通過拖拽以DAG 圖的式將 Task 按照任務(wù)的依賴關(guān)系關(guān)聯(lián)起來,可實(shí)時可視化監(jiān)控任務(wù)的運(yùn)狀態(tài);持豐富的任務(wù)類型;持作流定時調(diào)度、依賴調(diào)度、動
5、調(diào)度、動暫停/停/恢復(fù),同時持失敗重試/告警、從指定節(jié)點(diǎn)恢復(fù)失敗、Kill任務(wù)等操作;持作流全局參數(shù)及節(jié)點(diǎn)定義參數(shù)設(shè)置;持集群HA,通過 Zookeeper實(shí)現(xiàn) Master 集群和 Worker 集群去中化;持作流運(yùn)歷史樹形/特圖展、持任務(wù)狀態(tài)統(tǒng)計、流程狀態(tài)統(tǒng)計;持補(bǔ)數(shù),并或串回填數(shù)據(jù)。2 系統(tǒng)架構(gòu)2.1名詞解釋流程定義:通過拖拽任務(wù)節(jié)點(diǎn)并建任務(wù)節(jié)點(diǎn)的關(guān)聯(lián)所形成的可視化DAG流程實(shí)例:流程實(shí)例是流程定義的實(shí)例化,可以通過動啟動或定時調(diào)度成,流程定義每運(yùn)次,產(chǎn)個流程實(shí)例任務(wù)實(shí)例:任務(wù)實(shí)例是流程定義中任務(wù)節(jié)點(diǎn)的實(shí)例化,標(biāo)識著具體的任務(wù)執(zhí)狀態(tài)任務(wù)類型: 前持有SHELL、SQL、SUB_PROCE
6、SS(流程)、PROCEDURE、MR、SPARK、PYTHON、DEPENDENT(依賴),同時計劃持動態(tài)插件擴(kuò)展,注意:其中 SUB_PROCESS 也是個單獨(dú)的流程定義,是可以單獨(dú)啟動執(zhí)的調(diào)度式: 系統(tǒng)持基于cron表達(dá)式的定時調(diào)度和動調(diào)度。命令類型持:啟動作流、從當(dāng)前節(jié)點(diǎn)開始執(zhí)、恢復(fù)被容錯的作流、恢復(fù)暫停流程、從失敗節(jié)點(diǎn)開始執(zhí)、補(bǔ)數(shù)、定時、重跑、暫停、停、恢復(fù)等待線程。其中 恢復(fù)被容錯的作流 和 恢復(fù)等待線程 兩種命令類型是由調(diào)度內(nèi)部控制使,外部法調(diào)定時調(diào)度:系統(tǒng)采 quartz 分布式調(diào)度器,并同時持cron表達(dá)式可視化的成依賴:系統(tǒng)不單單持 DAG 簡單的前驅(qū)和后繼節(jié)點(diǎn)之間的依賴,
7、同時還提供任務(wù)依賴節(jié)點(diǎn),持流程間的定義任務(wù)依賴優(yōu)先級 :持流程實(shí)例和任務(wù)實(shí)例的優(yōu)先級,如果流程實(shí)例和任務(wù)實(shí)例的優(yōu)先級不設(shè)置,則默認(rèn)是先進(jìn)先出郵件告警:持 SQL任務(wù) 查詢結(jié)果郵件發(fā)送,流程實(shí)例運(yùn)結(jié)果郵件告警及容錯告警通知失敗策略:對于并運(yùn)的任務(wù),如果有任務(wù)失敗,提供兩種失敗策略處理式,繼續(xù)是指不管并運(yùn)任務(wù)的狀態(tài),直到流程失敗結(jié)束。結(jié)束是指旦發(fā)現(xiàn)失敗任務(wù),則同時Kill掉正在運(yùn)的并任務(wù),流程失敗結(jié)束補(bǔ)數(shù):補(bǔ)歷史數(shù)據(jù),持區(qū)間并和串兩種補(bǔ)數(shù)式2.2架構(gòu)關(guān)于更詳細(xì)的系統(tǒng)架構(gòu)設(shè)計可以查看官提供的劉春(xiaochun.liu)篇博客 。3 部署3.1后端部署后端有2種部署式,分別為動化部署和編譯源碼部署
8、。下主要介紹下載編譯后的進(jìn)制包鍵動化部署的式完成DolphinScheduler后端部署。Mysql(5.5+) : 必裝JDK (1.8+) : 必裝ZooKeeper(3.4.6+) :必裝Hadoop(2.6+) :選裝, 如果需要使到資源上傳功能,MapReduce任務(wù)提交則需要配置Hadoop(上傳的資源件前保存在Hdfs上)Hive(1.2.1) : 選裝,hive任務(wù)提交需要安裝Spark(1.x,2.x) : 選裝,Spark任務(wù)提交需要安裝PostgreSQL(8.2.15+) : 選裝,PostgreSQL PostgreSQL存儲過程需要安裝編譯時如果是編譯源碼:畢裝:畢
9、裝,最好 3.6 版本注意:EasyScheduler本不依賴Hadoop、Hive、Spark、PostgreSQL,僅是會調(diào)他們的Client,于對應(yīng)任務(wù)的運(yùn)。在所有需要部署調(diào)度的機(jī)器上創(chuàng)建部署戶(本次以node2、node3節(jié)點(diǎn)為例),因?yàn)閣orker服務(wù)是以 sudo -u linux-user 式來執(zhí)作業(yè),所以部署戶需要有 sudo 權(quán)限,且是免密的。# 1 創(chuàng)建戶# 3 sudo權(quán)限。編輯系統(tǒng)sudoers 件# root權(quán)限# chmod 640 /etc/sudoers# 100root下添加如下# 并且需要注釋掉Default requiretty 。如果有則注釋,沒有沒有跳
10、過su eschedulersudo mkdir /opt/DolphinScheduler# 2 DolphinSchedulerescheduler戶sudo chown -R escheduler:escheduler /opt/DolphinScheduler# 3 escheduler-backendcd /opt/DolphinSchedulerwget /apache/incubator-dolphinscheduler/releases/download/1.1.0/escheduler-1.1.0-backend.tar.gz# 4 解壓# 5 錄介紹binconfinsta
11、ll.sh # 鍵部署腳本lib# jarjarjar# 集群啟動、停和服務(wù)監(jiān)控啟停腳本# sql件5 directories, 1 file# node2node3。提輸密碼時,輸escheduler 戶的密碼ssh-copy-id -i /.ssh/id_rsa.pub eschedulernode2ssh-copy-id -i /.ssh/id_rsa.pub eschedulernode3# node2node3。提輸密碼時,輸escheduler 戶的密碼ssh-copy-id -i /.ssh/id_rsa.pub eschedulernode2ssh-copy-id -i /.s
12、sh/id_rsa.pub eschedulernode3執(zhí)以下命令創(chuàng)建數(shù)據(jù)庫和賬號CREATE DATABASE escheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;- escheduler的訪問密碼為eschedulerip做限制- ip198.168.33.%)GRANT ALL PRIVILEGES ON escheduler.* TO escheduler% IDENTIFIED BY escheduler;flush privileges;創(chuàng)建表和導(dǎo)基礎(chǔ)數(shù)據(jù) 修改vim /opt/Dolphin
13、Scheduler/escheduler/conf/dao/data_perties中的下列屬性# 概在第4 MySQLurlspring.datasource.url=jdbc:mysql:/node1:3306/escheduler?characterEncoding=UTF-8# 戶名。spring.datasource.username=escheduler# IDENTIFIED BY后設(shè)置的密碼spring.datasource.password=escheduler執(zhí)創(chuàng)建表和導(dǎo)基礎(chǔ)數(shù)據(jù)腳本# /opt/DolphinScheduler/escheduler-backend 錄下,
14、然后執(zhí)數(shù)據(jù)初始化腳本# 最后看到 create escheduler success 表數(shù)據(jù)庫初始化成功sh ./script/create_escheduler.sh# 1 conf/env/錄下的 .escheduler_env.sh 環(huán)境變量export HADOOP_HOME=/opt/hadoop-3.1.2export HADOOP_CONF_DIR=/opt/hadoop-3.1.2/etc/hadoopexport SPARK_HOME1=/opt/spark-2.3.4-bin-hadoop2.7export JAVA_HOME=/usr/local/zulu8/#expor
15、t PATH=$HADOOP_HOME/bin:$SPARK_HOME1/bin:$SPARK_HOME2/bin:$PYTHON_HOME:$JAVA_HOME/bin:$HIVE_HOME/bin:$PATHexport PATH=$HADOOP_HOME/bin:$SPARK_HOME1/bin:$JAVA_HOME/bin:$HIVE_HOME/bin:$PATH#export HADOOP_HOME=/opt/cloudera/parcels/CDH/lib/hadoop#export HADOOP_CONF_DIR=/etc/hadoop/conf.cloudera.yarn#ex
16、port SPARK_HOME1=/opt/cloudera/parcels/CDH/lib/spark#export SPARK_HOME2=/opt/soft/spark2#export JAVA_HOME=/usr/local/zulu8/#export HIVE_HOME=/opt/cloudera/parcels/CDH/lib/hive#export PATH=$HADOOP_HOME/bin:$SPARK_HOME1/bin:$SPARK_HOME2/bin:$PYTHON_HOME:$JAVA_HOME/bin:$HIVE_HOME/bin:$PATH#export PATH=
17、$HADOOP_HOME/bin:$SPARK_HOME1/bin:$JAVA_HOME/bin:$HIVE_HOME/bin:$PATH修改 install.sh中的各參數(shù),替換成業(yè)務(wù)所需的值,這只列出了重要的修改項(xiàng),其它默認(rèn)不改即可。# mysql配置# mysql ,端mysqlHost=:3306# mysql 數(shù)據(jù)庫名稱mysqlDb=escheduler# mysql 戶名mysqlUserName=escheduler# mysql 密碼# conf/config/install_config.conf配置# 部署戶# sudohdfshdfs,根錄需要創(chuàng)建deployUser=
18、escheduler# zk集群zkQuorum=:2181,:2181,:2181# hosts# workerhostname列表workers=,# api serverhostname列表apiServers=# SMTP郵件協(xié)議mailProtocol=SMTP# 發(fā)送。# 路徑xlsFilePath=/home/escheduler/xls#是否啟動監(jiān)控啟動腳本# HDFS,S3,NONEresUploadStartupType=HDFS# resourcemanager HAresourcemanager,yarnHaIps=yarnHaIps=# 如果是單 resourcema
19、nager,resourcemanager HA,則默認(rèn)配置就好singleYarnIp=# common 配置# 程序路徑programPath=/opt/DolphinScheduler/escheduler-backend#下載路徑downloadPath=/tmp/escheduler/download# api 服務(wù)端apiServerPort=12345如果使hdfs相關(guān)功能,需要拷貝hdfs-site.xml和core-site.xml到conf錄下cp $HADOOP_HOME/etc/hadoop/hdfs-site.xml conf/cp $HADOOP_HOME/etc/
20、hadoop/core-site.xml conf/易云郵箱服務(wù)客戶端戶名和密碼獲取,開啟客戶端授權(quán)碼,并獲取。如果 DolphinScheduler 已經(jīng)安裝,則可以通過設(shè)置部署的后端服務(wù)下的conf/perties件mail.server.host=# SSL協(xié)議端 465/994協(xié)議端 25mail.server.port=465mail.sender=*mail.passwd=yore*enterprise.wechat.corp.id=xxxxxxxxxxenterprise.wechat.secret=xxxxxxxxxxenterprise.wechat.agent.id=xxx
21、xxxxxxxenterprise.wechat.users=xxxxx,xxxxxenterprise.wechat.token.url=/cgi-bin/gettoken?corpid=$corpId&corpsecret=$secretenterprise.wechat.push.url=/cgi-bin/message/send?access_token=$tokenenterprise.wechat.team.send.msg=toparty:$toParty,agentid:$agentId,msgtype:text,text:content:$msg,safe:0enterpri
22、se.wechat.user.send.msg=touser:$toUser,agentid:$agentId,msgtype:markdown,markdown:content:$msgsh install.sh# 2 查看志.outescheduler-alert-server.pid.outescheduler-logger-server.pid.outescheduler-master-server.pid.outescheduler-worker-server.pidtaskInstanceId.log# 3.1 node2# master 服務(wù)# alert 服務(wù)31695 Log
23、gerServer# logger 服務(wù)# 3.2 node326718 LoggerServer錯誤1:如果查看/opt/DolphinScheduler/escheduler-backend/logs/escheduler-api-server-*.out志報如下錯誤nohup: failed to run command /bin/java: No such file or directory解決將JAVA_HOME/bin下的java軟連接到/bin下。(每個dolphinscheduler節(jié)點(diǎn)都執(zhí))3.1.8 服務(wù)進(jìn)程的說明由前我們可以看到,后端服務(wù)正常啟動后,共有 5 個進(jìn)程:Wo
24、rkerServer、ApiApplicationServer、MasterServer、AlertServer、LoggerServer 。另外還有個 UI,具體說明如下:服務(wù)說明主要負(fù)責(zé)任務(wù)的提交、執(zhí)和任務(wù)狀態(tài)的更新。LoggerServer于Rest Api通過 RPC 查看志提供Rest Api服務(wù),供UI進(jìn)調(diào)提供告警服務(wù)AlertServerUI服務(wù)前端頁展說明/opt/DolphinScheduler/escheduler-backend/script/stop_all.sh3.2前端部署前端有3種部署式,分別為動化部署,動部署和編譯源碼部署。這主要使動化腳本式部署DolphinS
25、cheduler前端服務(wù)。# 1 下載 UI escheduler-uitar -zxf escheduler-1.1.0-ui.tar.gz -C escheduler-uicd escheduler-ui執(zhí)動化部署腳本。腳本會提些參數(shù),根據(jù)提完成安裝。linuxnginx8888 :8888api serverip,192.168.xx.xx :api server,12345 :12345=1.CentOS6安裝2.CentOS7安裝3.Ubuntu安裝4.退出=(1|2|3|4)2Complete!使動化部署腳本會檢查系統(tǒng)環(huán)境是否安裝了Nginx,如果沒有安裝則會通過絡(luò)動下載Nginx
26、包安裝,通過引導(dǎo)設(shè)置后的Nginx配置件為/etc/nginx/conf.d/escheduler.conf。但產(chǎn)環(huán)境般法法訪問外,此時可以通過動離線安裝Nginx,然后進(jìn)些配置即可。# 例如下載Cento7 CPU指令為x86版本的下在動再Nginx中添加個DolphinSchedule 服務(wù)配置。因?yàn)樵?etc/nginx/nginx.conf(Nginx默認(rèn)加載的配置件)中有include/etc/nginx/conf.d/*.conf ,所以我們可以在/etc/nginx/conf.d/下創(chuàng)建個 conf后綴的配置件,配置件的件名隨意,例如叫escheduler.conf。這需要特別注
27、意的是在/etc/nginx/nginx.conf 配置件中前有個配置user nginx 如果啟動Nginx的戶不是nginx,定要修改為啟動Nginx的戶,否則代理的服務(wù)會報 403 的錯誤。這我們在/etc/nginx/conf.d/escheduler.conf配置如下內(nèi)容,重點(diǎn)在 server 中配置 listen(DolphinSchedule Web UI的端)、*root *(解壓的escheduler-ui 中的 dist 路徑 )、proxy_pass (DolphinSchedule后臺接的地址)等信息。最后重啟Nginx執(zhí)命令systemctl restart ngin
28、x。location /escheduler proxy_pass :12345; # ()proxy_set_header Host $host;proxy_connect_timeout 4s;proxy_read_timeout 30s;proxy_send_timeout 12s;#error_page 404/404.html;# redirect server error pages to the static page /50 x.html#error_page 500 502 503 504 /50 x.html;location = /50 x.html root /usr/
29、share/nginx/html;傳件限制編輯配置件vim /etc/nginx/nginx.confclient_max_body_size 1024m4快速開始創(chuàng)建個隊列。隊列管理 - 創(chuàng)建隊列 - 輸名稱和隊列值 - 提交。創(chuàng)建租戶。租戶管理 - 創(chuàng)建租戶 - 輸租戶編碼、租戶名稱和隊列值 - 提交。創(chuàng)建警告組。警告組管理 - 創(chuàng)建警告組 - 輸組名稱、組類型(郵件、短信)- 提交。使普通戶登錄(戶名和密碼都是demo)。點(diǎn)擊右上戶名“退出”,重新使普通戶登錄。登陸成功的頁如下。創(chuàng)建個項(xiàng)。點(diǎn)擊頁頭部的項(xiàng)管理,進(jìn)項(xiàng)頁,再點(diǎn)擊創(chuàng)建項(xiàng),創(chuàng)建個DolphinScheduler任務(wù)調(diào)度項(xiàng),在彈出的
30、框中輸項(xiàng)名稱和描述,例如這創(chuàng)建個hello_dolphinScheduler名稱的項(xiàng),最后點(diǎn)擊提交。項(xiàng)創(chuàng)建完畢后,在項(xiàng)管理頁點(diǎn)擊我們創(chuàng)建的項(xiàng),進(jìn)該項(xiàng)的管理頁。點(diǎn)擊作流定義 - 創(chuàng)建作流 - 在左側(cè)具欄可以選擇(SHELL、USB_PROCESS、PROCEDURE、SQL、SPARK、MapReduce、PYTHON、DEPENDENT)。拖拽SHELL節(jié)點(diǎn)到畫布,新增個Shell任務(wù),填寫 節(jié)點(diǎn)名稱、描述、腳本 字段;選擇 任務(wù)優(yōu)先級 ,級別的任務(wù)在執(zhí)隊列中會優(yōu)先執(zhí),相同優(yōu)先級的任務(wù)按照先進(jìn)先出的順序執(zhí);超時告警, 填寫 超時時長 ,當(dāng)任務(wù)執(zhí)時間超過超時時長可以告警并且超時失敗。(注意:這的
31、節(jié)點(diǎn)不是機(jī)器的節(jié)點(diǎn),應(yīng)該是作流的節(jié)點(diǎn))確認(rèn)修改完畢后,點(diǎn)擊保存,此時設(shè)置DAG圖名稱,選擇組租戶,最后添加。未上線狀態(tài)的作流定義可以編輯,但是不可以運(yùn),所以要執(zhí)作流,需要先上線作流點(diǎn)擊”運(yùn)“,執(zhí)作流。運(yùn)參數(shù)說明:失敗策略:當(dāng)某個任務(wù)節(jié)點(diǎn)執(zhí)失敗時,其他并的任務(wù)節(jié)點(diǎn)需要執(zhí)的策略?!崩^續(xù)“表:其他任務(wù)節(jié)點(diǎn)正常執(zhí),”結(jié)束“表:終所有正在執(zhí)的任務(wù),并終整個流程。通知策略:當(dāng)流程結(jié)束,根據(jù)流程狀態(tài)發(fā)送流程執(zhí)信息通知郵件。流程優(yōu)先級:流程運(yùn)的優(yōu)先級,分五個等級:最(HIGHEST),(HIGH),中(MEDIUM),低(LOW),最低(LOWEST)。級別的流程在執(zhí)隊列中會優(yōu)先執(zhí),相同優(yōu)先級的流程按照先進(jìn)先
32、出的順序執(zhí)。worker分組: 這個流程只能在指定的機(jī)器組執(zhí)。默認(rèn)是Default,可以在任worker上執(zhí)。通知組: 當(dāng)流程結(jié)束,或者發(fā)容錯時,會發(fā)送流程信息郵件到通知組所有成員。收件:輸郵箱后按回車鍵保存。當(dāng)流程結(jié)束、發(fā)容錯時,會發(fā)送告警郵件到收件列表。抄送:輸郵箱后按回車鍵保存。當(dāng)流程結(jié)束、發(fā)容錯時,會抄送告警郵件到抄送列表。點(diǎn)擊任務(wù)實(shí)例可以查看每個任務(wù)的列表信息,點(diǎn)擊操作欄,可以看到任務(wù)執(zhí)的志信息。5 Worker分組和數(shù)據(jù)源添加worker分組,提供了種讓任務(wù)在指定的worker上運(yùn)的機(jī)制。管理員創(chuàng)建worker分組,在任務(wù)節(jié)點(diǎn)和運(yùn)參數(shù)中設(shè)置中可以指定該任務(wù)運(yùn)的worker分組,如果
33、指定的分組被刪除或者沒有指定分組,則該任務(wù)會在任worker上運(yùn)。worker分組內(nèi)多個ip地址(不能寫別名),以英逗號分隔。管理員戶(admin)登陸Web頁,點(diǎn)擊 安全中 - Worker分組管理,如下圖所。創(chuàng)建Worker分組。填寫組名稱和IP,IP可以是多個,英逗號分割即可。例如下圖,我們將Worker的IP分為了兩組。6添加數(shù)據(jù)源腳本(般是SQL腳本)執(zhí)時可能會到些數(shù)據(jù)源,例如MySQL、PostgreSQL、Hive、Impala、Spark、ClickHouse、Oracle、SQL Server,通過添加數(shù)據(jù)源在DolphinScheduler頁編寫Job時直接選擇,不再指定驅(qū)
34、動、連接、戶名和密碼等信息,可以快速創(chuàng)建個SQL腳本的作流Job,同時這個數(shù)據(jù)源時戶隔離的,每個戶添加的數(shù)據(jù)源相互獨(dú)(admin戶除外,管理員戶可以看到所有戶添加的數(shù)據(jù)源)。下我們以Impala為例,選擇頁頭部的 數(shù)據(jù)源中 - 添加數(shù)據(jù)源,會彈出下圖 編輯數(shù)據(jù)源 彈窗,主要填寫如下項(xiàng)。因?yàn)镮mpala沒有設(shè)置密碼,戶為必填可以任意添加個,在jdbc連接參數(shù)中必須添加auth:noSasl數(shù),否則會直等待確認(rèn)認(rèn)證。其它數(shù)據(jù)源類似,例如我們添加如下個數(shù)據(jù)源,后會到ClickHouse(詳見我的另篇博客 )。7實(shí)例在項(xiàng)管理下,點(diǎn)擊作流定義,在具欄處選擇最后的DEPENDENT定義個帶依賴的作流Job
35、,拖動到編輯板,設(shè)置task的節(jié)點(diǎn)名為cdh2-task1,在 Worker分組 中選擇執(zhí)的Worker節(jié)點(diǎn)為cdh2,編輯完這個Task后選擇 確認(rèn)添加。選擇執(zhí)的Worker分組名,這選擇前設(shè)置的cdh2組,確認(rèn)添加,如下圖所。同樣的式設(shè)置第個依賴Task,將其Worker分組設(shè)置到cdh3節(jié)點(diǎn),并添加依賴為 且。接下來設(shè)置兩個Shell執(zhí)腳本,cdh2-task11上執(zhí)task11,主要是在cdh2上執(zhí)個hostname命令,打印執(zhí)節(jié)點(diǎn)的HostName。同樣的式,在依賴節(jié)點(diǎn)cdh3-task21上設(shè)置在cdh3執(zhí),也是執(zhí)hostname命令。最后再在依賴節(jié)點(diǎn)cdh3-task21上添加個
36、SQL腳本,查詢我們的瓣電影數(shù)據(jù),具體操作如下在具欄拖拽添加個SQL腳本Task節(jié)點(diǎn);節(jié)點(diǎn)名稱可以叫:ck-task01,并添加描述信息;Worker分組:cdh3;數(shù)據(jù)源:CLICKHOUSE clickhouse-cdh3;sql類型選擇查詢。表格;郵件信息:填寫主題。收件郵箱、抄送郵箱;sql語句:SELECT m.id,m.movie_name,m.rating_num,m.rating_people,q.rank,q.quote FROM movie mLEFT JOIN quote qON q.id=m.idORDER BY m.rating_num DESC,m.rating_p
37、eople DESC LIMIT 10;1234各個task編寫完畢后,選擇右上的 選擇線條連接,作流編寫完畢后如下圖,最后點(diǎn)擊保存,輸DAG圖名稱,并選擇租戶,選擇添加保存。回到作流定義,可以看到新添加的當(dāng)前戶的所有作流列表,點(diǎn)擊右側(cè)的操作欄的 上線,然后點(diǎn)擊 運(yùn) 執(zhí)我們的作流。當(dāng)然這也可以添加 定時 調(diào)度。點(diǎn)擊運(yùn)后,可以在 作流實(shí)例 頁看到當(dāng)前運(yùn)的Job的狀態(tài)信息。每個作可能會有多個Task構(gòu)成,查看Task的執(zhí)信息可以在 任務(wù)實(shí)例 頁查看,操作欄可以查看這個task的執(zhí)志信息。如果執(zhí)成功后,可以選擇作流的特圖,在時間軸上查看執(zhí)狀況。也可以查看作流的執(zhí)的樹形圖信息,如下圖。運(yùn)成功后填寫的收
38、件箱會接收到執(zhí)結(jié)果的封郵件,這封郵件中包含了腳本執(zhí)的結(jié)果。8與 Azkaban的對ClassItemDolphinSchedulerAzkaban是,單個 Web 和調(diào)度程序組合節(jié)點(diǎn)過載處理務(wù)隊列,不會造成機(jī)器卡死DAG監(jiān)控界易性否,通過定義DSL繪制DAG打包上傳集群化部署,復(fù)雜功能持暫停、恢復(fù)操作否,只能先將作流殺死再重新運(yùn)停和恢復(fù)否多租戶的映射關(guān)系,這對于數(shù)據(jù)作業(yè)上的調(diào)度是常重要的持傳統(tǒng)的shell任務(wù),同時持?jǐn)?shù)據(jù)平臺任務(wù)調(diào)度MR、Spark、SQL(MySQL、shell、gobblin、hadoopJava、Java、Hive、Pig、Spark、hdfsToTeradata、ter
39、adataToHdfs持?jǐn)?shù)據(jù)作業(yè)Spark、Hive、MR的調(diào)度,同時由于持多租戶,于數(shù)據(jù)業(yè)務(wù)更加 由于不持多租戶,在數(shù)據(jù)平臺業(yè)務(wù)使契合度契合上不夠靈活是否持是是是否持 是,調(diào)度器使分布式調(diào)度,整體的調(diào)度能會隨著集群的規(guī)模線性增長,Master和集群擴(kuò)展 Worker持動態(tài)上下線是,但是復(fù)雜,Executor平擴(kuò)展9節(jié)Apache DolphinScheduler是個分布式、去中化、易擴(kuò)展的可視化DAG作流任務(wù)調(diào)度系統(tǒng),從上的安裝可以看到這個調(diào)度系統(tǒng)集成了ZooKeeper,很好的實(shí)現(xiàn)了去中化,每個的服務(wù)可以起多個,從znode上可以看到masters和workers的些元信息都注冊在了上,交
40、由ZK去選舉,當(dāng)然它也是個分布式的。如果某個服務(wù)掛了,ZooKeeper會在剩下的其它節(jié)點(diǎn)進(jìn)選舉,例如當(dāng)某些節(jié)點(diǎn)的Worker服務(wù)掛了,我們不做任何處理,DolphinScheduler上依然可以正常提交和執(zhí)作,在它的監(jiān)控中的頁可以看到,系統(tǒng)動選舉出了個新的Work節(jié)點(diǎn)。# znode上的信息zk: localhost:2181(CONNECTED) 1 ls /eschedulertasks_queue, dead-servers, masters, lock, workers, tasks_kill123尤其可以多Worker進(jìn)分組以及添加數(shù)據(jù)源的功能,可以指定Wroker節(jié)點(diǎn),直接指定改
41、戶下的數(shù)據(jù),執(zhí)SQL腳本,同時頁增加的監(jiān)控中、任務(wù)狀態(tài)統(tǒng)計、流程狀態(tài)統(tǒng)計、流程定義統(tǒng)計等也能很好的幫助我們管理和查看任務(wù)執(zhí)的信息和集群的狀態(tài)。系統(tǒng)架構(gòu)設(shè)計在對調(diào)度系統(tǒng)架構(gòu)說明之前,我們先來認(rèn)識下調(diào)度系統(tǒng)常的名詞1.DAG: 全稱Directed Acyclic Graph,簡稱DAG。作流中的Task任務(wù)以有向環(huán)圖的形式組裝起來,從度為零的節(jié)點(diǎn)進(jìn)拓?fù)浔闅v,直到后繼節(jié)點(diǎn)為。舉例如下圖:dag例流程定義:通過拖拽任務(wù)節(jié)點(diǎn)并建任務(wù)節(jié)點(diǎn)的關(guān)聯(lián)所形成的可視化DAG流程實(shí)例:流程實(shí)例是流程定義的實(shí)例化,可以通過動啟動或定時調(diào)度成,流程定義每運(yùn)次,產(chǎn)個流程實(shí)例任務(wù)實(shí)例:任務(wù)實(shí)例是流程定義中任務(wù)節(jié)點(diǎn)的實(shí)例化,
42、標(biāo)識著具體的任務(wù)執(zhí)狀態(tài)任務(wù)類型: 前持有SHELL、SQL、SUB_PROCESS(流程)、PROCEDURE、MR、SPARK、PYTHON、DEPENDENT(依賴),同時計劃持動態(tài)插件擴(kuò)展,注意:其中 SUB_PROCESS 也是個單獨(dú)的流程定義,是可以單獨(dú)啟動執(zhí)的調(diào)度式: 系統(tǒng)持基于cron表達(dá)式的定時調(diào)度和動調(diào)度。命令類型持:啟動作流、從當(dāng)前節(jié)點(diǎn)開始執(zhí)、恢復(fù)被容錯的作流、恢復(fù)暫停流程、從失敗節(jié)點(diǎn)開始執(zhí)、補(bǔ)數(shù)、定時、重跑、暫停、停、恢復(fù)等待線程。其中 恢復(fù)被容錯的作流 和 恢復(fù)等待線程 兩種命令類型是由調(diào)度內(nèi)部控制使,外部法調(diào)定時調(diào)度:系統(tǒng)采 quartz 分布式調(diào)度器,并同時持cro
43、n表達(dá)式可視化的成依賴:系統(tǒng)不單單持 DAG 簡單的前驅(qū)和后繼節(jié)點(diǎn)之間的依賴,同時還提供任務(wù)依賴節(jié)點(diǎn),持流程間的定義任務(wù)依賴優(yōu)先級 :持流程實(shí)例和任務(wù)實(shí)例的優(yōu)先級,如果流程實(shí)例和任務(wù)實(shí)例的優(yōu)先級不設(shè)置,則默認(rèn)是先進(jìn)先出郵件告警:持 SQL任務(wù) 查詢結(jié)果郵件發(fā)送,流程實(shí)例運(yùn)結(jié)果郵件告警及容錯告警通知失敗策略:對于并運(yùn)的任務(wù),如果有任務(wù)失敗,提供兩種失敗策略處理式,繼續(xù)是指不管并運(yùn)任務(wù)的狀態(tài),直到流程失敗結(jié)束。結(jié)束是指旦發(fā)現(xiàn)失敗任務(wù),則同時Kill掉正在運(yùn)的并任務(wù),流程失敗結(jié)束補(bǔ)數(shù):補(bǔ)歷史數(shù)據(jù),持區(qū)間并和串兩種補(bǔ)數(shù)式2.2.1 系統(tǒng)架構(gòu)圖系統(tǒng)架構(gòu)圖2.2 架構(gòu)說明MasterServerMaste
44、rServer采分布式中設(shè)計理念,MasterServer主要負(fù)責(zé) DAG 任務(wù)切分、任務(wù)提交監(jiān)控,并同時監(jiān)聽其它MasterServer和WorkerServer的健康狀態(tài)。 MasterServer服務(wù)啟動時向Zookeeper注冊臨時節(jié)點(diǎn),通過監(jiān)聽Zookeeper臨時節(jié)點(diǎn)變化來進(jìn)容錯處理。該服務(wù)內(nèi)主要包含:Distributed Quartz分布式調(diào)度組件,主要負(fù)責(zé)定時任務(wù)的啟停操作,當(dāng)quartz調(diào)起任務(wù)后,Master內(nèi)部會有線程池具體負(fù)責(zé)處理任務(wù)的后續(xù)操作MasterSchedulerThread是個掃描線程,定時掃描數(shù)據(jù)庫中的 command 表,根據(jù)不同的命令類型進(jìn)不同的業(yè)務(wù)
45、操作MasterExecThread主要是負(fù)責(zé)DAG任務(wù)切分、任務(wù)提交監(jiān)控、各種不同命令類型的邏輯處理MasterTaskExecThread主要負(fù)責(zé)任務(wù)的持久化WorkerServerWorkerServer也采分布式中設(shè)計理念,WorkerServer主要負(fù)責(zé)任務(wù)的執(zhí)和提供志服務(wù)。WorkerServer服務(wù)啟動時向Zookeeper注冊臨時節(jié)點(diǎn),并維持跳。該服務(wù)包含:FetchTaskThread主要負(fù)責(zé)不斷從Task Queue中領(lǐng)取任務(wù),并根據(jù)不同任務(wù)類型調(diào)TaskScheduleThread對應(yīng)執(zhí)器。LoggerServer是個RPC服務(wù),提供志分查看、刷新和下載等功能ZooKee
46、perZooKeeper服務(wù),系統(tǒng)中的MasterServer和WorkerServer節(jié)點(diǎn)都通過ZooKeeper來進(jìn)集群管理和容錯。另外系統(tǒng)還基于ZooKeeper進(jìn)事件監(jiān)聽和分布式鎖。 我們也曾經(jīng)基于Redis實(shí)現(xiàn)過隊列,不過我們希望EasyScheduler依賴到的組件盡量地少,所以最后還是去掉了Redis實(shí)現(xiàn)。Task Queue提供任務(wù)隊列的操作,前隊列也是基于Zookeeper來實(shí)現(xiàn)。由于隊列中存的信息較少,不必?fù)?dān)隊列數(shù)據(jù)過多的情況,實(shí)際上我們壓測過百萬級數(shù)據(jù)存隊列,對系統(tǒng)穩(wěn)定性和性能沒影響。Alert提供告警相關(guān)接,接主要包括告警兩種類型的告警數(shù)據(jù)的存儲、查詢和通知功能。其中通
47、知功能有郵件通知和*SNMP(暫未實(shí)現(xiàn))*兩種。APIAPI接層,主要負(fù)責(zé)處理前端UI層的請求。該服務(wù)統(tǒng)提供RESTfulapi向外部提供請求服務(wù)。 接包括作流的創(chuàng)建、定義、查詢、修改、發(fā)布、下線、啟動、停、暫停、恢復(fù)、從該節(jié)點(diǎn)開始執(zhí)等等。UI系統(tǒng)的前端頁,提供系統(tǒng)的各種可視化操作界,詳見*部分。2.3 架構(gòu)設(shè)計思想、去中化vs中化中化思想中化的設(shè)計理念較簡單,分布式集群中的節(jié)點(diǎn)按照分,體上分為兩種:Master的主要負(fù)責(zé)任務(wù)分發(fā)并監(jiān)督Slave的健康狀態(tài),可以動態(tài)的將任務(wù)均衡到Slave上,以致Slave節(jié)點(diǎn)不于“忙死”或”閑死”的狀態(tài)。Worker的主要負(fù)責(zé)任務(wù)的執(zhí)作并維護(hù)和Master的
48、跳,以便Master可以分配任務(wù)給Slave。中化思想設(shè)計存在的問題:旦Master出現(xiàn)了問題,則群龍,整個集群就會崩潰。為了解決這個問題,多數(shù)Master/Slave架構(gòu)模式都采了主備Master的設(shè)計案,可以是熱備或者冷備,也可以是動切換或動切換,且越來越多的新系統(tǒng)都開始具備動選舉切換Master的能,以提升系統(tǒng)的可性。另外個問題是如果Scheduler在Master上,雖然可以持個DAG中不同的任務(wù)運(yùn)在不同的機(jī)器上,但是會產(chǎn)Master的過負(fù)載。如果Scheduler在Slave上,則個DAG中所有的任務(wù)都只能在某臺機(jī)器上進(jìn)作業(yè)提交,則并任務(wù)較多的時候,Slave的壓可能會較。去中化在去
49、中化設(shè)計,通常沒有Master/Slave的概念,所有的都是樣的,地位是平等的,全球互聯(lián)就是個典型的去中化的分布式系統(tǒng),聯(lián)的任意節(jié)點(diǎn)設(shè)備down機(jī),都只會影響很范圍的功能。去中化設(shè)計的核設(shè)計在于整個分布式系統(tǒng)中不存在個區(qū)別于其他節(jié)點(diǎn)的”管理者”,因此不存在單點(diǎn)故障問題。但由于不存在”管理者”節(jié)點(diǎn)所以每個節(jié)點(diǎn)都需要跟其他節(jié)點(diǎn)通信才得到必須要的機(jī)器信息,分布式系統(tǒng)通信的不可靠,則增加了上述功能的實(shí)現(xiàn)難度。實(shí)際上,真正去中化的分布式系統(tǒng)并不多見。反動態(tài)中化分布式系統(tǒng)正在不斷涌出。在這種架構(gòu)下,集群中的管理者是被動態(tài)選擇出來的,不是預(yù)置的,并且集群在發(fā)故障的時候,集群的節(jié)點(diǎn)會發(fā)的舉會議來選舉新的管理者
50、去主持作。最典型的案例就是ZooKeeper及Go語實(shí)現(xiàn)的Etcd。EasyScheduler的去中化是Master/Worker注冊到Zookeeper中,實(shí)現(xiàn)Master集群和Worker集群中,并使Zookeeper分布式鎖來選舉其中的臺Master或Worker為“管理者”來執(zhí)任務(wù)。、分布式鎖實(shí)踐EasyScheduler使ZooKeeper分布式鎖來實(shí)現(xiàn)同時刻只有臺Master執(zhí)Scheduler,或者只有臺Worker執(zhí)任務(wù)的提交。1. 獲取分布式鎖的核流程算法如下1. EasyScheduler中Scheduler線程分布式鎖實(shí)現(xiàn)流程圖:2.三、線程不循環(huán)等待問題如果個DAG中沒
51、有流程,則如果Command中的數(shù)據(jù)條數(shù)于線程池設(shè)置的閾值,則直接流程等待或失敗。如果個的DAG中嵌套了很多流程,如下圖則會產(chǎn)“死等”狀態(tài):上圖中MainFlowThread等待SubFlowThread1結(jié)束,SubFlowThread1等待SubFlowThread2結(jié)束, SubFlowThread2等待SubFlowThread3結(jié)束,SubFlowThread3等待線程池有新線程,則整個DAG流程不能結(jié)束,從其中的線程也不能釋放。這樣就形成的流程循環(huán)等待的狀態(tài)。此時除啟動新的Master來增加線程來打破這樣的”僵局”,否則調(diào)度集群將不能再使。對于啟動新Master來打破僵局,似乎有點(diǎn)
52、差強(qiáng)意,于是我們提出了以下三種案來降低這種風(fēng)險:1. 計算所有Master的線程總和,然后對每個DAG需要計算其需要的線程數(shù),也就是在DAG流程執(zhí)之前做預(yù)計算。因?yàn)槭嵌郙aster線程池,所以總線程數(shù)不太可能實(shí)時獲取。2. 對單Master線程池進(jìn)判斷,如果線程池已經(jīng)滿了,則讓線程直接失敗。3. 增加種資源不的Command類型,如果線程池不,則將主流程掛起。這樣線程池就有了新的線程,可以讓資源不掛起的流程重新喚醒執(zhí)。注意:Master Scheduler線程在獲取Command的時候是FIFO的式執(zhí)的。于是我們選擇了第三種式來解決線程不的問題。四、容錯設(shè)計容錯分為服務(wù)宕機(jī)容錯和任務(wù)重試,服務(wù)宕機(jī)容錯分為Master容錯和Worker容錯兩種情況1.宕機(jī)容錯服務(wù)容錯設(shè)計依賴于ZooKeeper的Watcher機(jī)制,實(shí)現(xiàn)原理如圖:其中Master監(jiān)控其他Master和Worker的錄,如果監(jiān)聽到remove事件,則會根據(jù)具體的業(yè)務(wù)邏輯進(jìn)流程實(shí)例容錯或者任務(wù)實(shí)例容錯。Master容錯流程圖:ZooKeeper Master容錯完成之后則重新由EasyScheduler中Scheduler線程調(diào)度,遍歷 DAG 找到”正在運(yùn)”和“提交成功”的任務(wù),對”正在運(yùn)”的任務(wù)監(jiān)控其任務(wù)實(shí)例的狀態(tài),對”提交成功”的任務(wù)需
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山西老區(qū)職業(yè)技術(shù)學(xué)院《西方文化經(jīng)典導(dǎo)讀》2023-2024學(xué)年第一學(xué)期期末試卷
- 電子科技大學(xué)《設(shè)計思維訓(xùn)練》2023-2024學(xué)年第一學(xué)期期末試卷
- 南京工業(yè)大學(xué)《工科大學(xué)化學(xué)-無機(jī)與結(jié)構(gòu)化學(xué)基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 贛東學(xué)院《矩陣論》2023-2024學(xué)年第二學(xué)期期末試卷
- 石家莊醫(yī)學(xué)高等??茖W(xué)?!杜R床生物化學(xué)檢驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 玉柴職業(yè)技術(shù)學(xué)院《健康評估技能》2023-2024學(xué)年第二學(xué)期期末試卷
- 云南林業(yè)職業(yè)技術(shù)學(xué)院《混凝土基本構(gòu)件實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 貴州應(yīng)用技術(shù)職業(yè)學(xué)院《藏族文學(xué)史》2023-2024學(xué)年第二學(xué)期期末試卷
- 美容行業(yè)國際標(biāo)準(zhǔn)考核試題及答案
- Unit5 Lesson 5 Save the tigers!(教學(xué)設(shè)計)-2024-2025學(xué)年冀教版(2024)初中英語七年級上冊
- 直擊重點(diǎn)的2024年ESG考試試題與答案
- DB45T 1056-2014 土地整治工程 第3部分:驗(yàn)收技術(shù)規(guī)程
- 特種設(shè)備重大事故隱患判定準(zhǔn)則
- 信息技術(shù)行業(yè)安全保障措施及系統(tǒng)穩(wěn)定性維護(hù)
- 電力安全一把手講安全課
- (2025)駕照C1證考試科目一必考題庫及參考答案(包過版)
- 2025年泰興經(jīng)濟(jì)開發(fā)區(qū)國有企業(yè)招聘筆試參考題庫含答案解析
- 2025年人民法院信息技術(shù)服務(wù)中心招聘應(yīng)屆高校畢業(yè)生高頻重點(diǎn)提升(共500題)附帶答案詳解
- 無線通信射頻收發(fā)系統(tǒng)設(shè)計研究
- 造紙廠管理規(guī)章制度
- 護(hù)理授權(quán)管理制度內(nèi)容
評論
0/150
提交評論