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包
建立部署目錄,部署目錄請不要建立在/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環境