1. 程式人生 > 實用技巧 >DolphinScheduler搭建與採坑日記

DolphinScheduler搭建與採坑日記

用於搭建ds1.3.2版本

一:需要提前安裝的框架及版本

·PostgreSQL (8.2.15+) or MySQL (5.7系列) : 兩者任選其一即可
·JDK (1.8+) : 必裝,請安裝好後在/etc/profile下配置 JAVA_HOME 及 PATH 變數
·ZooKeeper (3.4.6+) :必裝
·Hadoop (2.6+) or MinIO :選裝,如果需要用到資源上傳功能,可以選擇上傳到Hadoop or MinIO上

二:下載tar包

https://mirror.bit.edu.cn/apache/incubator/dolphinscheduler/1.3.2/apache-dolphinscheduler-incubating-1.3.2-dolphinscheduler-bin.tar.gz

建立部署目錄,部署目錄請不要建立在/root、/home等高許可權目錄

部署目錄個人覺得最佳直接放在根目錄

mkdir -p /opt/dolphinscheduler;
cd /opt/dolphinscheduler;

解壓縮

tar -zxvf apache-dolphinscheduler-incubating-1.2.0-dolphinscheduler-backend-bin.tar.gz -C /opt/dolphinscheduler;
mv apache-dolphinscheduler-incubating-1.2.0-dolphinscheduler-backend-bin dolphinscheduler-backend

三:建立部署使用者和hosts對映

在所有部署排程的機器上建立部署使用者,並且一定要配置sudo免密。假如我們計劃在ds1,ds2,ds3,ds4這4臺機器上部署排程,首先需要在每臺機器上都建立部署使用者

建立使用者需使用root登入,設定部署使用者名稱,請自行修改,後面以dolphinscheduler為例

useradd dolphinscheduler;

設定使用者密碼,請自行修改,後面以dolphinscheduler123為例

echo "dolphinscheduler123" | passwd --stdin dolphinscheduler

配置sudo免密

echo 'dolphinscheduler ALL=(ALL) NOPASSWD: NOPASSWD: ALL' >> /etc/sudoers
sed -i 's/Defaults requirett/#Defaults requirett/g' /etc/sudoers

踩坑

配置完要去看看sudoers的許可權,如果後期在初始化的時候一直要輸入密碼,那肯定是這個sudoer檔案許可權的問題

四:配置hosts對映和ssh打通及修改目錄許可權

以第一臺機器(hostname為ds1)作為部署機,在ds1上配置所有待部署機器的hosts, 在ds1以root登入

vi /etc/hosts
192.168.xxx.xxx ds1
192.168.xxx.xxx ds2
192.168.xxx.xxx ds3
192.168.xxx.xxx ds4
注意:請刪掉或者註釋掉127.0.0.1這行

同步ds1上的/etc/hosts到所有部署機器

for ip in ds2 ds3; #請將此處ds2 ds3替換為自己要部署的機器的hostname
do
sudo scp -r /etc/hosts $ip:/etc/ #在執行中需要輸入root密碼
done
備註:當然 通過sshpass -p xxx sudo scp -r /etc/hosts $ip:/etc/就可以省去輸入密碼了

centos下sshpass的安裝:

先安裝epel

yum install -y epel-release

yum repolist

安裝完成epel之後,就可以按照sshpass了

yum install -y sshpass

在ds1上,切換到部署使用者並配置ssh本機免密登入

su dolphinscheduler;

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
​注意:正常設定後,dolphinscheduler使用者在執行命令ssh localhost 是不需要再輸入密碼的

在ds1上,配置部署使用者dolphinscheduler ssh打通到其他待部署的機器

su dolphinscheduler;
for ip in ds2 ds3; #請將此處ds2 ds3替換為自己要部署的機器的hostname
do
ssh-copy-id $ip #該操作執行過程中需要手動輸入dolphinscheduler使用者的密碼
done
當然 通過 sshpass -p xxx ssh-copy-id $ip 就可以省去輸入密碼了

踩坑

ssh要配置的是每個機器之間互相免密

在ds1上,修改目錄許可權,使得部署使用者對dolphinscheduler-backend目錄有操作許可權

sudo chown -R dolphinscheduler:dolphinscheduler dolphinscheduler-backend

資料庫初始化

進入資料庫,預設資料庫是PostgreSQL,如選擇MySQL的話,後續需要新增mysql-connector-java驅動包到DolphinScheduler的lib目錄下,這裡以MySQL為例

mysql -uroot -p

進入資料庫命令列視窗後,執行資料庫初始化命令,設定訪問賬號和密碼。注: {user} 和 {password} 需要替換為具體的資料庫使用者名稱和密碼

mysql> CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
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;

建立表和匯入基礎資料

修改 conf 目錄下 application-dao.properties 中的下列配置
vi conf/application-dao.properties
如果選擇 MySQL,請註釋掉 PostgreSQL 相關配置(反之同理), 還需要手動新增 [ mysql-connector-java 驅動 jar ] 包到 lib 目錄下,這裡下載的是mysql-connector-java-5.1.47.jar,然後正確配置資料庫連線相關資訊

#postgre
#spring.datasource.driver-class-name=org.postgresql.Driver
#spring.datasource.url=jdbc:postgresql://localhost:5432/dolphinscheduler
#mysql
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://xxx:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8     需要修改ip
spring.datasource.username=xxx						需要修改為上面的{user}值
spring.datasource.password=xxx						需要修改為上面的{password}值

修改並儲存完後,執行 script 目錄下的建立表及匯入基礎資料指令碼

sh script/create-dolphinscheduler.sh
​注意: 如果執行上述指令碼報 ”/bin/java: No such file or directory“ 錯誤,請在/etc/profile下配置 JAVA_HOME 及 PATH 變數

踩坑

每臺節點都要配置JDK以及相關環境變數

五:修改執行引數

修改 conf/env 目錄下的 .dolphinscheduler_env.sh 環境變數(以相關用到的軟體都安裝在/opt/soft下為例)

export HADOOP_HOME=/opt/soft/hadoop
export HADOOP_CONF_DIR=/opt/soft/hadoop/etc/hadoop
export SPARK_HOME1=/opt/soft/spark1
export SPARK_HOME2=/opt/soft/spark2
export PYTHON_HOME=/opt/soft/python
export JAVA_HOME=/opt/soft/java
export HIVE_HOME=/opt/soft/hive
export FLINK_HOME=/opt/soft/flink
export PATH=$HADOOP_HOME/bin:$SPARK_HOME2/bin:$PYTHON_HOME:$JAVA_HOME/bin:$HIVE_HOME/bin:$PATH:$FLINK_HOME/bin:$PATH

注: 這一步非常重要,例如 JAVA_HOME 和 PATH 是必須要配置的,沒有用到的可以忽略或者註釋掉;如果找不到.dolphinscheduler_env.sh, 請執行 ls -a

將jdk軟鏈到/usr/bin/java下(仍以 JAVA_HOME=/opt/soft/java 為例)

sudo ln -s /opt/soft/java/bin/java /usr/bin/java

修改一鍵部署指令碼 install.sh中的各引數,特別注意以下引數的配置

# 這裡填 mysql or postgresql
dbtype="mysql"

# 資料庫連線地址
dbhost="192.168.xx.xx:3306"

# 資料庫名
dbname="dolphinscheduler"

# 資料庫使用者名稱,此處需要修改為上面設定的{user}具體值
username="xxx"    

# 資料庫密碼, 如果有特殊字元,請使用\轉義,需要修改為上面設定的{passowrd}具體值
passowrd="xxx"

#將DS安裝到哪個目錄,如: /opt/soft/dolphinscheduler,不同於現在的目錄
installPath="/opt/soft/dolphinscheduler"

#使用哪個使用者部署,使用1.3小節建立的使用者
deployUser="dolphinscheduler"

#Zookeeper地址
zkQuorum="192.168.xx.xx:2181,192.168.xx.xx:2181,192.168.xx.xx:2181"

#在哪些機器上部署DS服務
ips="ds1,ds2,ds3,ds4"

#master服務部署在哪臺機器上
masters="ds1,ds2"

#worker服務部署在哪臺機器上
workers="ds3,ds4"

#報警服務部署在哪臺機器上
alertServer="ds2"

#後端api服務部署在在哪臺機器上
apiServers="ds1"


# 郵件配置,以qq郵箱為例
# 郵件協議
mailProtocol="SMTP"

# 郵件服務地址
mailServerHost="smtp.exmail.qq.com"

# 郵件服務埠
mailServerPort="25"

# mailSender和mailUser配置成一樣即可
# 傳送者
mailSender="[email protected]"

# 傳送使用者
mailUser="[email protected]"

# 郵箱密碼
mailPassword="xxx"

# TLS協議的郵箱設定為true,否則設定為false
starttlsEnable="true"

# 郵件服務地址值,參考上面 mailServerHost
sslTrust="smtp.exmail.qq.com"

# 開啟SSL協議的郵箱配置為true,否則為false。注意: starttlsEnable和sslEnable不能同時為true
sslEnable="false"

# excel下載路徑
xlsFilePath="/tmp/xls"

# 業務用到的比如sql等資原始檔上傳到哪裡,可以設定:HDFS,S3,NONE。如果想上傳到HDFS,請配置為HDFS;如果不需要資源上傳功能請選擇NONE。
resUploadStartupType="HDFS"

# 如果上傳資源儲存想儲存在hadoop上,hadoop叢集的NameNode啟用了HA的話,需要將hadoop的配置檔案core-site.xml和hdfs-site.xml放到安裝路徑(上面的installPath)的conf目錄下,本例即是放到/opt/soft/dolphinscheduler/conf下面,並配置namenode cluster名稱;如果NameNode不是HA,則只需要將mycluster修改為具體的ip或者主機名即可
defaultFS="hdfs://mycluster:8020"


# 如果ResourceManager是HA,則配置為ResourceManager節點的主備ip或者hostname,比如"192.168.xx.xx,192.168.xx.xx",否則如果是單ResourceManager或者根本沒用到yarn,請配置yarnHaIps=""即可,我這裡沒用到yarn,配置為""
yarnHaIps=""

# 如果是單ResourceManager,則配置為ResourceManager節點ip或主機名,否則保持預設值即可。我這裡沒用到yarn,保持預設
singleYarnIp="ark1"

特別注意:
如果需要用資源上傳到Hadoop叢集功能, 並且Hadoop叢集的NameNode 配置了 HA的話 ,需要開啟 HDFS型別的資源上傳,同時需要將Hadoop叢集下的core-site.xml和hdfs-site.xml複製到/opt/dolphinscheduler/conf,非NameNode HA跳過次步驟

六:安裝python的Zookeeper工具kazoo

安裝python的 Zookeeper 工具 ,此步驟僅在一鍵部署時候用到

#安裝pip
sudo yum -y install python-pip;  #ubuntu請使用 sudo apt-get install python-pip
sudo pip install kazoo;

注意:如果yum沒找到python-pip,也可以通過下面方式安裝

sudo curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo python get-pip.py  # 如果是python3,使用sudo python3 get-pip.py 
#然後
sudo pip install kazoo;

切換到部署使用者dolphinscheduler,然後執行一鍵部署指令碼

sh install.sh

踩坑

注意是原始dolphinscheduler下的指令碼

注意:
第一次部署的話,在執行中第3步3,stop server出現5次以下資訊,此資訊可以忽略
sh: bin/dolphinscheduler-daemon.sh: No such file or directory

指令碼完成後,會啟動以下5個服務,使用jps命令檢視服務是否啟動(jps為java JDK自帶)

    MasterServer         ----- master服務
    WorkerServer         ----- worker服務
    LoggerServer         ----- logger服務
    ApiApplicationServer ----- api服務
    AlertServer          ----- alert服務

如果以上服務都正常啟動,說明自動部署成功

七:登入系統

http://192.168.xx.xx:12345/dolphinscheduler
ip自行修改

初始賬號密碼:

admin
dolphinscheduler123

八:啟停服務

一鍵停止叢集所有服務

sh ./bin/stop-all.sh

一鍵開啟叢集所有服務

sh ./bin/start-all.sh

啟停Master

sh ./bin/dolphinscheduler-daemon.sh start master-server
sh ./bin/dolphinscheduler-daemon.sh stop master-server

啟停Worker

sh ./bin/dolphinscheduler-daemon.sh start worker-server
sh ./bin/dolphinscheduler-daemon.sh stop worker-server

啟停Api

sh ./bin/dolphinscheduler-daemon.sh start api-server
sh ./bin/dolphinscheduler-daemon.sh stop api-server

啟停Logger

sh ./bin/dolphinscheduler-daemon.sh start logger-server
sh ./bin/dolphinscheduler-daemon.sh stop logger-server

啟停Alert

sh ./bin/dolphinscheduler-daemon.sh start alert-server
sh ./bin/dolphinscheduler-daemon.sh stop alert-server

九:其他坑

如果發現無法上傳檔案

檢視/etc/dolphinscheduler目錄的許可權和所有者
sudo chown -R dolphinscheduler:dolphinscheduler dolphinscheduler
chmod 777 dolphinscheduler

master或者worker有的機器沒起來

檢查ssh和相應機器JDK環境

持續更新中