1. DolphinScheduler的安裝
1.1 安裝環境
1. hadoop2.9.2java
2. CentOS7.5node
3. JDK1.8python
4. Mysql5.7mysql
5. Zookeeper-3.4.14linux
1.2 安裝說明
1. 這裏直接使用root用戶進行安裝,若是是使用普通用戶安裝,須要開啓sudo免密和集羣各節點之間實現ssh免密.web
2. 配置/etc/hosts文件,作好主機名與ip之間的映射.面試
3. 安裝ds的各臺機器之間須要作ssh免密登錄(安裝ds的用戶之間的免密)spring
4. ds的安裝節點與hdfs和yarn所在節點沒有關係,只須要保證ds的worker所在節點有hadoop的安裝目錄並配置環境變量便可,由於要做爲客戶端提交命令.sql
5. 使用阿里雲與本地虛擬機安裝時配置有一點點區別,後面安裝時配置有備註.shell
1.3 節點規劃
主機名稱 |
master-server |
worker-server |
api-server |
logger-server |
alertserver |
linux121 |
√ |
√ |
× |
√ |
× |
linux122 |
√ |
√ |
√ |
√ |
√ |
linux123 |
× |
√ |
× |
√ |
× |
1.4 具體安裝步驟
1. 下載最新版的二進制安裝包
wget https://www.apache.org/dyn/closer.cgi/incubator/dolphinscheduler/1.3.2/apache-dolphinscheduler-incubating-1.3.2-dolphinscheduler-bin.tar.gz |
2. 解壓,重命名
[root@linux122 software]# tar -zvxf apache-dolphinscheduler-incubating-1.3.2-dolphinscheduler-bin.tar.gz [root@linux122 software]# mv apache-dolphinscheduler-incubating-1.3.2-dolphinscheduler-bin dolphinscheduler-bin |
3. 將MySQL的驅動包放到dolphinscheduler-bin/lib目錄下(使用超連接的方式)
[root@linux122 software]# ln -s /opt/servers/hive-2.3.7/lib/mysql-connector-java-5.1.46.jar /opt/software/dolphinscheduler-bin/lib/mysql-connector-java.jar |
4. 在MySQL中建立dolphinscheduler數據庫
mysql> create database dolphinscheduler; |
5. 修改dolphinscheduler-bin/conf/datasource.properties配置文件,將數據庫改成mysql(默認是postgresql)
[root@linux122 dolphinscheduler-bin]# vim conf/datasource.properties #mysql spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://linux123:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true spring.datasource.username=root spring.datasource.password=12345678 |
6. 執行ds自帶的腳本
[root@linux122 dolphinscheduler-bin]# sh script/create-dolphinscheduler.sh |
7. 修改ds運行時的參數(即conf/env/dolphinscheduler_env.sh文件)
[root@linux122 dolphinscheduler-bin]# vim conf/env/dolphinscheduler_env.sh #根據自身實際狀況設置,暫時用不到的組件能夠先註釋掉或不設置 export HADOOP_HOME=/opt/servers/hadoop-2.9.2/ export HADOOP_CONF_DIR=/opt/servers/hadoop-2.9.2/etc/hadoop #export SPARK_HOME2=/opt/servers/spark-2.4.1 #export PYTHON_HOME=/opt/soft/python export JAVA_HOME=/opt/servers/jdk1.8.0_231/ export HIVE_HOME=/opt/servers/hive-2.3.7/ #export FLINK_HOME=/opt/servers/flink-1.10 #export DATAX_HOME=/opt/servers/datax/bin/datax.py export PATH=$HADOOP_HOME/bin:$JAVA_HOME/bin:$HIVE_HOME/bin:$PATH |
8. 在準備安裝ds的全部節點上執行下面的命令(將java命令超連接到本身安裝的jdk下)
[root@linux122 dolphinscheduler-bin]# rm -rf /usr/bin/java [root@linux121 dolphinscheduler-1.3.2]# ln -s /opt/servers/jdk1.8.0_231/bin/java /usr/bin/java [root@linux122 dolphinscheduler-1.3.2]# ln -s /opt/servers/jdk1.8.0_231/bin/java /usr/bin/java [root@linux123 dolphinscheduler-1.3.2]# ln -s /opt/servers/jdk1.8.0_231/bin/java /usr/bin/java |
說明:若是/usr/bin/java已經存在,先刪除掉,從新創建超連接.
9. 修改一鍵部署的相關配置文件(具體內容根據本身的實際規劃進行修改)
[root@linux122 dolphinscheduler-bin]# vim conf/config/install_config.conf # postgresql or mysql (這裏咱們把元數據放在mysql)
dbtype="mysql"
# db config
# db address and port (mysql所在機器的ip和端口)
dbhost="linux123:3306"
# db username(鏈接mysql的用戶名)
username="root"
# database name(存放ds元數據的數據庫名,與上面建立的保持一致)
dbname="dolphinscheduler"
# db passwprd(鏈接mysql的密碼)
# NOTICE: if there are special characters, please use the \ to escape, for example, `[` escape to `\[`
password="12345678"
# zk cluster. (Zookeeper所在的節點)
zkQuorum="linux121:2181,linux122:2181,linux123:2181"
# Note: the target installation path for dolphinscheduler, please not config as the same as the current path (pwd)
#指定ds的安裝目錄 (能夠在每臺節點提早建立該目錄並保證安裝ds的用戶有讀寫權限)
installPath="/opt/servers/dolphinscheduler-1.3.2"
# deployment user(部署用戶須要有sudo和操做hdfs的權限)
# Note: the deployment user needs to have sudo privileges and permissions to operate hdfs. If hdfs is enabled, the root directory needs to be created by itself
deployUser="root"
# alert config(這裏告警以qq郵箱爲例,實測可用)
# mail server host
mailServerHost="smtp.qq.com"
# mail server port
# note: Different protocols and encryption methods correspond to different ports, when SSL/TLS is enabled, make sure the port is correct.
#若是是公司內網機器或虛擬機,默認的25端口號是可使用的(且能夠不加ssl認證的).若是使用的是阿里雲,若是不加ssl認證25端口是用不了的,能夠修改端口號爲460等 ,且後面須要加ssl認證
mailServerPort="25"
# sender
mailSender="xxxx@qq.com"
# user
mailUser="xxxx@qq.com"
# sender password(這裏是受權碼,不是郵箱登錄)
# note: The mail.passwd is email service authorization code, not the email login password.
mailPassword="phkgigdykiunxxxx"
# TLS mail protocol support
starttlsEnable="true"
# SSL mail protocol support
# only one of TLS and SSL can be in the true state.
#阿里雲環境必須啓用ssl認證,若是是內網,虛擬機能夠設置爲false .
sslEnable="false"
#note: sslTrust is the same as mailServerHost
sslTrust="smtp.qq.com"
# resource storage type:HDFS,S3,NONE(資源存儲通常選用HDFS,注意必定是大寫)
resourceStorageType="HDFS"
# if resourceStorageType is HDFS,defaultFS write namenode address,HA you need to put core-site.xml and hdfs-site.xml in the conf directory.
# if S3,write S3 address,HA,for example :s3a://dolphinscheduler,
# Note,s3 be sure to create the root directory /dolphinscheduler
# 這裏是單節點的namenode.若是是HA的必須還要將上面說的core-site.xml和hdfs-site.xml文件放在對應目錄下(單節點的也能夠放)
defaultFS="hdfs://linux121:9000"
# if resourceStorageType is S3, the following three configuration is required, otherwise please ignore
s3Endpoint="http://192.168.xx.xx:9010"
s3AccessKey="xxxxxxxxxx"
s3SecretKey="xxxxxxxxxx"
# if resourcemanager HA enable, please type the HA ips ; if resourcemanager is single, make this value empty
#這裏的resourcemanager是單節點的,註釋掉.若是是HA要寫對應的主機名,多臺節點逗號分隔
#yarnHaIps="192.168.xx.xx,192.168.xx.xx"
# if resourcemanager HA enable or not use resourcemanager, please skip this value setting; If resourcemanager is single, you only need to replace yarnIp1 to actual resourcemanager hostname. #單節點的rm,寫rm所在的主機名
singleYarnIp="linux123"
# resource store on HDFS/S3 path, resource file will store to this hadoop hdfs path, self configuration, please make sure the directory exists on hdfs and have read write permissions。/dolphinscheduler is recommended
#將你的shell腳本,或jar包等執行的資源放在hdfs指定的目錄下.該目錄會在hdfs上自動建立
resourceUploadPath="/dolphinscheduler"
# who have permissions to create directory under HDFS/S3 root path
# Note: if kerberos is enabled, please config hdfsRootUser=
#這是在hdfs建立目錄的用戶(注意權限問題),能夠經過ps -ef | grep datanode查看擁有建立目錄的權限的用戶
hdfsRootUser="root"
# kerberos config
# whether kerberos starts, if kerberos starts, following four items need to config, otherwise please ignore
kerberosStartUp="false"
# kdc krb5 config file path
krb5ConfPath="$installPath/conf/krb5.conf"
# keytab username
keytabUserName="hdfs-mycluster@ESZ.COM"
# username keytab path
keytabPath="$installPath/conf/hdfs.headless.keytab"
# api server port(默認就好)
apiServerPort="12345"
# install hosts(安裝ds的全部主機)
# Note: install the scheduled hostname list. If it is pseudo-distributed, just write a pseudo-distributed hostname
ips="linux121,linux122,linux123"
# ssh port, default 22
# Note: if ssh port is not default, modify here
sshPort="22"
# run master machine(指定master-server所在的節點)
# Note: list of hosts hostname for deploying master
masters="linux121,linux122"
# run worker machine(指定work所在的節點,後面的default是給機器打標籤,針對不一樣的機器能夠打不一樣的標籤,這裏就打同一個標籤)
# note: need to write the worker group name of each worker, the default value is "default"
workers="linux121:default,linux122:default,linux123:default"
# run alert machine(alert-server所在的節點,指定一個節點就行)
# note: list of machine hostnames for deploying alert server
alertServer="linux122"
# run api machine(指定api-server所在節點,一個節點就行)
# note: list of machine hostnames for deploying api server
apiServers="linux122"
|
說明: 機器打標籤能夠按照機器不一樣的性能打不一樣的標籤,好比機器性能高的打high的標籤,將重要任務就能夠放在性能高的機器執行.性能低的low標籤,通常任務就指定在性能低的機器執行.
10. 將core-site.xml和hdfs-site.xml文件拷貝到conf目錄下(以超連接的方式)
[root@linux122 dolphinscheduler-bin]# ln -s /opt/servers/hadoop-2.9.2/etc/hadoop/core-site.xml ./conf/core-site.xml [root@linux122 dolphinscheduler-bin]# ln -s /opt/servers/hadoop-2.9.2/etc/hadoop/hdfs-site.xml ./conf/hdfs-site.xml |
11. 修改各個服務日誌的存放目錄(這裏所有修改成存放在/logs/ds目錄下)
[root@linux122 conf]# vim logback-master.xml [root@linux122 conf]# vim logback-worker.xml [root@linux122 conf]# vim logback-api.xml [root@linux122 conf]# vim logback-alert.xml <property name="log.base" value="/logs/ds"/>(第22行) |
12. 切換到部署ds的用戶(這裏是root),執行一鍵部署腳本
[root@linux122 dolphinscheduler-bin]# sh install.sh |
說明: 須要部署過程當中沒有任何報錯信息.
13. 部署完成後,服務會自動啓動.查看ds各節點的進程狀況
[root@linux121 dolphinscheduler-1.3.2]# jps 16116 LoggerServer 16056 WorkerServer 15995 MasterServer
[root@linux122 dolphinscheduler-1.3.2]# jps 12535 ApiApplicationServer 12282 MasterServer 12474 AlertServer 12413 LoggerServer 12351 WorkerServer
[root@linux123 logs]# jps 13549 WorkerServer 13613 LoggerServer |
14. 登錄WebUI界面(api-server所在的ip地址)
http://linux122:12345/dolphinscheduler
登錄名: admin
登錄密碼: dolphinscheduler123
1.5 ds的啓動和中止命令(首先須要給腳本文件可執行權限)
#根據配置文件中指定的角色羣起/羣停進程
[root@linux122 dolphinscheduler-1.3.2]# bin/start-all.sh
[root@linux122 dolphinscheduler-1.3.2]# bin/stop-all.sh
#單獨起/停某個進程
[root@linux122 dolphinscheduler-1.3.2]# bin/dolphinscheduler-daemon.sh start master-server
[root@linux122 dolphinscheduler-1.3.2]# bin/dolphinscheduler-daemon.sh stop master-server
[root@linux122 dolphinscheduler-1.3.2]# bin/dolphinscheduler-daemon.sh start worker-server
[root@linux122 dolphinscheduler-1.3.2]# bin/dolphinscheduler-daemon.sh stop worker-server
[root@linux122 dolphinscheduler-1.3.2]# bin/dolphinscheduler-daemon.sh start api-server
[root@linux122 dolphinscheduler-1.3.2]# bin/dolphinscheduler-daemon.sh stop api-server |
2.DolphinScheduler的基本使用(有中文版操做界面)
2.1 安全中心(安全中心的設置須要使用admin用戶來操做)
2.1.1 指定yarn調度器中存在的隊列
2.1.2 worker分組
若是ds的worker節點數量不少,能夠將不一樣的機器劃分爲不一樣的組,以便後期不一樣優先級的任務調度在不一樣的組,能夠配置多個.(這裏在安裝時只配了一個default組)
2.1.3 告警組管理
增長告警組:
爲不一樣的告警組添加用戶(須要先在用戶管理界面使用admin帳戶添加該用戶):
說明:這樣操做以後該告警組就與這個用戶的郵箱進行綁定了,只要後面像該告警組發郵件,就會發給告警組裏面的全部用戶.
2.1.4 租戶管理
這裏租戶至關於就是linux上的用戶,當關聯這個租戶時就是指定了以linux上的哪一個用戶來提交任務,若是這個用戶在linux上存在則直接切換到該用戶,若是不存在則建立該用戶.
2.1.5 用戶管理
2.2 ds建立項目
這裏以xiaobai這個用戶在作演示,通常實際生產中admin用戶也只負責管理,也不會操做具體項目.且這裏xiaobai關聯的是root這個租戶.
2.2.1 建立一個項目
2.2.2 爲項目建立具體工做和task並運行
工做流,任務相關說明:
建立一個工做流程:
2.2.3 查看運行的結果及相關信息
2.2.4 查看工做流中具體的task實例
說明:若是上面有選擇告警的話查看郵箱就可看到郵件了
2.2.5 針對失敗的工做流的處理
2.3 鏈接外部數據源
2.3.1 鏈接hive的數據源
2.3.2 測試使用hive的數據源進行sql查詢
建立一個項目用來測試Hive的sql查詢:
說明: 最下面貼執行的sql語句時最後不要加分號.且只能執行一整段sql語句.
2.4 執行包含hql的shell腳本
2.4.1 在資源中心建立文件夾
首先建立一個文件夾,能夠用來管理同一模塊下的許多腳本,jar包以及用到的其它文件.
2.4.2 在文件夾下建立或上傳腳本
2.4.3 建立文件
1. 將shell腳本的內容所有粘貼到文件內容中(文件名稱不用帶.sh的後綴)
說明: 執行hql命令有2種方式,一種是cli的方式,另外一種是beeline的方式.生產上基本都是使用beeline的方式.
能夠看到在該目錄下獲得了一個新的文件
2.4.4 建立並執行工做流
1. 根據步驟2.2中的說明建立項目(並定義工做流)
2. 調用建立好的資源文件來建立task,且是使用shell的方式
3. 點擊左下角確認添加
4. 點擊右上角的保存
5. 設置工做流DAG圖的相關信息
6. 將建立好的工做流上線
7. 選擇立刻運行或定時調度
8. 每一次運行就會獲得一個工做流實例
9. 每一個工做流實例中有1個或多個task實例
2.5 子節點(sub_process)
子節點只能選擇同一個項目下的工做流,即實現同一個項目下工做流之間的依賴.能夠在一個工做流中引入其它工做流做爲子節點.當運行當前工做流時,會先運行子節點,子節點運行成功後才繼續執行後面的工做流.
2.6 依賴節點(denpency)
依賴節點能夠實現項目之間的依賴.B項目依賴A項目,那麼只有A項目執行成功後纔會繼續執行B項目.
2.7 重試機制
調度判斷一個shell腳本執行成功仍是失敗的標識: exit 0表示成功(執行完成後默認爲exit 0),exit 1表示失敗(有時能夠手動將正常的腳本最後顯性執行exit 1,則會被標記爲失敗).能夠在定義task時開啓重試.
2.8 補數機制
在補數的時候會根據調度日期日後推遲一天,因此若是須要補10月1號到10月8號的數據,須要選擇的調度日期是9月30號到10月7號進行補數.固然這個能夠經過在傳遞全局參數時經過給全局變量的值爲$[yyyy-MM-dd-1],選擇的調度日期就是補數的日期了.
2.8.1 實際場景中的應用(針對的是一個工做流中全部task的補數)
在執行shell腳本時經過${date}來獲取外界傳入的日期.
點擊右上角保存,將該變量設置爲全局變量,value值設置爲$[yyyy-MM-dd-1]或不給值.這樣在調度該腳本時那麼腳本里面獲取的日期就是當前時間的前一天.可是若是須要使用後的補數機制時必須給value的值,這裏建議給$[yyyy-MM-dd-1],那麼在選擇調度日期時就是補數的日期.
經過設置value的值爲$[yyyy-MM-dd-1],那麼腳本傳入的日期就是選擇的調度日期(不存在加1天的狀況).
補數的工做流:
2.9 中止,暫停,重跑的機制
l 重跑: 從新執行已經終止的流程。
l 恢復失敗: 針對失敗的流程,能夠執行恢復失敗操做,從失敗的節點開始執行。
l 中止: 對正在運行的流程進行中止操做,後臺會先killworker進程,再執行kill -9操做
l 暫停: 對正在運行的流程進行暫停操做,系統狀態變爲等待執行,會等待正在執行的任務結束,暫停下一個要執行的任務。
l 恢復暫停: 對暫停的流程恢復,直接從暫停的節點開始運行
l 刪除: 刪除工做流實例及工做流實例下的任務實例
2.10 定時任務調度(針對工做流)
1. 進入定時配置界面
2. 配置調度相關參數
3. 上線任務調度(須要修改調度任務時要先下線,再修改,再上線)
4. 從工做流中進入已經設定好的調度任務
注意:
當咱們下線工做流時,定時任務調度會跟着下線.而再次上線工做流時,裏面定時任務調度不會跟着上線,須要咱們手動上線.
2.11 失敗策略機制
在運行以前設置失敗策略:
當一個工做流中,若是有一個或幾個task執行失敗,能夠有繼續和結束兩種處理策略.
繼續策略:當其中一個或幾個節點失敗時,只有依賴它的節點會所有中止執行.而與它沒有依賴關係,並行的節點仍將繼續執行.
結束策略:當工做流中有1個節點失敗時,整個工做流的全部後續的其它節點都會中止執行.
3.ds的企業微信告警
3.1 修改配置文件
在alert-server所在的機器上修改conf/alert.properties配置文件
3.2 配置文件參數說明以及獲取方式
1. 開啓企業微信報警
# 設置企業微信告警功能是否開啓:開啓爲 true,不然爲 false。
enterprise.wechat.enable=true |
2. 設置corp.id配置參數
# 設置 corpid,每一個企業都擁有惟一的corpid,獲取此信息可在管理後臺「個人企業」-「企業信息」下查看「企業 ID」(須要有管理員權限)
enterprise.wechat.corp.id=xxxxx |
3. 將圖片中所示的secret和agentid填入配置文件中
# 設置secret,secret是企業應用裏面用於保障數據安全的「鑰匙」,每個應用都有一個獨立的訪問密鑰。
enterprise.wechat.secret=xxxx |
# 設置 agentid,每一個應用都有惟一的 agentid。在管理後臺->「應用與小程序」->「應用」,點進某個應用,便可看到 agentid。
enterprise.wechat.agent.id="xxxx" |
4. 在配置文件中增長userid,表示哪些用戶能夠看到這個應用的推送消息(這些用戶必須在上面圖中所示該應用的可見範圍中)
# 設置 userid,多個用逗號分隔。每一個成員都有惟一的 userid,即所謂「賬號」。在管理後臺->「通信錄」->點進某個成員的詳情頁,能夠看到。
enterprise.wechat.users=zhangsan,lisi,wangwu |
5. 其它配置項無需改動
# 獲取 access_token 的地址,無需修改 enterprise.wechat.token.url=https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$corpId&corpsecret=$secret # 發送應用消息地址,無需修改 enterprise.wechat.push.url=https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$token # 無需修改 enterprise.wechat.team.send.msg={\"toparty\":\"$toParty\",\"agentid\":\"$agentId\",\"msgtype\":\"text\",\"text\":{\"con tent\":\"$msg\"},\"safe\":\"0\"} # 無需修改 enterprise.wechat.user.send.msg={\"touser\":\"$toUser\",\"agentid\":\"$agentId\",\"msgtype\":\"markdown\",\"markdown\": {\"content\":\"$msg\"}} |
6. 重啓配置文件所在機器的alert-server服務,而後進行測試
[root@linux122 dolphinscheduler-1.3.2]# bin/dolphinscheduler-daemon.sh stop alert-server [root@linux122 dolphinscheduler-1.3.2]# bin/dolphinscheduler-daemon.sh start alert-server |
4.常見問題說明
1. 默認狀況下,admin用戶是沒有關聯任何租戶的,若是是使用admin來上傳文件,建立工做流這些,須要先關聯已有的租戶.但通常生產中admin不會關聯租戶,由於不須要建立具體的項目.
2. 使用admin帳戶對普通用戶進行項目,資源文件等進行受權
3. 修改工做流或工做流裏面的task須要先將工做流下線
說明:每次修改完以後記得保存.
4. 對於失敗的任務進行重跑的方法
說明: 選擇恢復失敗時已成功的節點再也不執行.
5. 工做流下線後再上線時,設置的定時任務並無跟着上線,須要手動上線定時任務.
6. 任務優先級,在線程數不足的時候會根據任務優先級來進行處理.
7. 超時告警,若是在指定的時間內task沒有執行完成就會告警,且將該task置爲失敗
8. 在腳本里面引用參數: ${name}
9. 針對整個工做流的超時告警:
10. 要從新編輯工做流定義時,須要先將工做流下線
11. 引用資源中心文件的語法,寫相對路徑sh test/test_shell.sh
12. 能夠不一樣的條件篩選工做流實例和任務實例
13. 對於同一個工做流裏面的多個task,根據狀況也會分配到不一樣的節點上執行.
14. 重試2次就表明第一次執行失敗後最多還會重試2次,總共執行最多3次.
15. 執行腳本的後面寫${date_exec}後,若是參數不定義value則腳本里面的時間仍是當前日期減1,不傳入任何參數就是個空,至關於沒有傳入時間,腳本就會獲取當前時間的前一天了.
16. 子工做流的使用,當B工做流依賴於A這個子工做流時,咱們執行B工做流便可,它會先執行A工做流,只有A工做流執行成功,纔會繼續執行B工做流.注意:不要先把A工做流本身執行一遍,而後再去執行B工做流,這樣的話A工做流會被執行2次,會致使錯誤的結果.
17. 用shell腳本封裝的hql裏面必定不能用--來寫註釋,不少可能碰到任務一直處於運行狀態,一直卡在那裏.
18. 依賴的使用,依賴能夠跨項目,依賴某個項目,某個工做流甚至到某個節點.
19. 上傳文件到資源中心時不能批量上傳文件.只能一個個上傳.不過當文件確實太多時能夠將文件先上傳到hdfs對應的目錄,而後修改mysql中的表來實現批量上傳.
20. 當定義task,一次加載資源中心太多文件的話,會報工做流建立失敗,這時要麼減小資源中心的文件,要麼經過修改mysql中表字段的值來解決.
21. yarn隊列是跟着用戶指定的隊列走的(不是租戶關聯的)
鳴謝:感謝可愛羣友大象哥提供資料
pdf目錄:
你要悄悄學會HBase,而後驚豔全部人(1.7萬字建議收藏)
一文帶你深刻了解kafka並提供52道企業常見面試題(1.8W字建議收藏)
本文分享自微信公衆號 - 大數據私房菜(datagogogo)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。