【Azkaban搭建】---Azkaban 3.25.0搭建細則 超實用
一、前述
Azkaban是一個工作流排程工具,因為需要各個任務之間有依賴關係,傳統的Crontab 任務已經不能滿足 所以需要建立一套工作流引擎。相比Ooize來說,Azkaban的優勢是作為一個客戶端來提供任務的提交。而Ooize是將任務隨機分配到我們的叢集環境中。考慮到常用架構,所以我們選擇Azkaban進行工作流引擎。但是網上的搭建教程總會有各種各樣的問題,實在令人煩心。折騰了好幾天,終於把Azkaban搭建成功,特將詳細步驟描述如下。這裡給出一個建議,Azkaban千萬不要用最新的搭建,因為你會有意想不到的坑。。
二、具體步驟
1、下載Azkaban的3.25.0的軟體包 地址如下:
https://github.com/azkaban/azkaban/releases/tag/3.25.0
2、下載後上傳到對應伺服器 目錄上面。本文地址目錄為/mnt/data8/ire/
3、解壓目錄並重命名
tar - xf azkaban-3.25.0.tar.gz
mv azkaban-3.25.0 azkaban
4、對原始碼編譯
./gradlew build 編譯
./gradlew build -x test 忽略測試 (當上一個命令執行不成功再執行這個命令,上個執行成功後就不需要了,因為有的時候總卡在編譯測試上面,沒辦法進行了)
./gradlew installDist 打包
5、新建azkaban編譯後的執行目錄
我在根目錄/mnt/data8/ire/下新建目錄azkaban-ire
mkdir azkaban-ire
6、將build後的tar包cp到azkaban-ire
目錄下
cp azkaban/azkaban-web-server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz azkaban-ire/
cp azkaban/azkaban-exec-server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz azkaban-ire/
cp azkaban/azkaban-db/build/distributions/azkaban-db-0.1.0-SNAPSHOT.tar.gz azkaban-ire/
解壓對應jar 包 並重命名(強力建議) 因為後面會有一堆絕對路徑的引入,名字太長,太麻煩。效果如下
tar -xf azkaban-db-0.1.0-SNAPSHOT.tar.gz
tar -xf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
tar -xf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz
mv azkaban-db-0.1.0-SNAPSHOT azkaban-db
mv azkaban-exec-server-0.1.0-SNAPSHOT azkaban-exec-server
mv azkaban-web-server-0.1.0-SNAPSHOT azkaban-web-server
7、匯入Azkaban-sql
選擇一個數據庫,或者新建一個數據庫為Azkaban 命令如下:
CREATE DATABASE azkaban;
CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';
GRANT ALL ON azkaban.* to 'azkaban'@'localhost' IDENTIFIED BY 'azkaban';
flush privileges;
use azkaban;
source azkaban-ire/azkaban-db-0.1.0-SNAPSHOT/create-all-sql-0.1.0-SNAPSHOT.sql
這裡建議手動執行吧 執行之前最好刪除之前因為其他版本建立的表,如下:
drop table active_executing_flows; drop table active_sla; drop table execution_flows; drop table execution_jobs; drop table execution_logs; drop table executor_events; drop table executors; drop table project_events; drop table project_files; drop table project_flows; drop table project_permissions; drop table project_properties; drop table properties_index ; drop table projects; drop table properties; drop table triggers; drop table project_flow_files; drop table project_versions; drop table qrtz_blob_triggers,qrtz_calendars,qrtz_cron_triggers,qrtz_fired_triggers,qrtz_job_details,qrtz_locks,qrtz_paused_trigger_grps,qrtz_scheduler_state,qrtz_simple_triggers,qrtz_simprop_triggers,qrtz_triggers;
在create-all-sql-0.1.0-SNAPSHOT.sql裡面最後一行可以去掉 ,因為已經有這個欄位了。
8、配置azkaban-web-server
1、在azkaban-web-server中新建conf目錄,結構如下
mkdir conf
├── conf
│ ├── azkaban-users.xml
│ ├── azkaban.properties
│ ├── global.properties
│ └── log4j.properties
azkaban-users.xml
<azkaban-users> <user username="azkaban" password="azkaban" roles="admin" groups="azkaban" /> <user username="metrics" password="metrics" roles="metrics"/> <user username="admin" password="admin" roles="admin,metrics" /> <role name="admin" permissions="ADMIN" /> <role name="metrics" permissions="METRICS"/> </azkaban-users>
azkaban.properties
# Azkaban Personalization Settings #設定專案名稱 azkaban.name=Test #設定專案副標題 azkaban.label=My Local Azkaban azkaban.color=#FF3601 azkaban.default.servlet.path=/index #這裡一定寫成絕對路徑 否則頁面會找不到對應地址 web.resource.dir=/mnt/data8/ire/azkaban-ire/azkaban-web-server/web/ #一定要設定為上海,否則按美國時間執行 default.timezone.id=Asia/Shanghai # Azkaban UserManager class user.manager.class=azkaban.user.XmlUserManager #這裡一定寫成絕對路徑 user.manager.xml.file=/mnt/data8/ire/azkaban-ire/azkaban-web-server/conf/azkaban-users.xml # Loader for projects #這裡一定寫成絕對路徑 否則頁面會找不到對應地址 executor.global.properties=/mnt/data8/ire/azkaban-ire/azkaban-web-server/conf/global.properties azkaban.project.dir=projects database.type=mysql mysql.port=3306 mysql.host=127.0.0.1 mysql.database=azkaban mysql.user=root mysql.password=root mysql.numconnections=100 # Velocity dev mode velocity.dev.mode=false # Azkaban Jetty server properties. jetty.maxThreads=25 jetty.ssl.port=8443 jetty.use.ssl=false jetty.port=8081 jetty.keystore=keystore jetty.password=password jetty.keypassword=keypassword jetty.truststore=keystore jetty.trustpassword=password jetty.excludeCipherSuites=SSL_RSA_WITH_DES_CBC_SHA,SSL_DHE_RSA_WITH_DES_CBC_SHA,SSL_DHE_DSS_WITH_DES_CBC_SHA,SSL_RSA_EXPORT_WITH_RC4_40_MD5,SSL_RSA_EXPORT_WITH_DES40_CBC_SHA,SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_DSS_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA # Azkaban Executor settings executor.port=12321 # mail settings #mail.sender=email賬號 #mail.host=email伺服器 #mail.user=email賬號 #mail.password=email密碼 mail.sender= mail.host= job.failure.email= job.success.email= lockdown.create.projects=false cache.directory=cache # JMX stats jetty.connector.stats=true executor.connector.stats=true
global.properties (置空即可)
log4j.properties
log4j.rootLogger=INFO,C log4j.appender.C=org.apache.log4j.ConsoleAppender log4j.appender.C.Target=System.err log4j.appender.C.layout=org.apache.log4j.PatternLayout log4j.appender.C.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
2、生成keystore檔案。
在conf目錄下執行
keytool -keystore keystore -alias azkaban -genkey -keyalg RSA
具體執行效果如下:
Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]: azkaban.test.com
What is the name of your organizational unit?
[Unknown]: azkaban
What is the name of your organization?
[Unknown]: test
What is the name of your City or Locality?
[Unknown]: beijing
What is the name of your State or Province?
[Unknown]: beijing
What is the two-letter country code for this unit?
[Unknown]: CN
Is CN=azkaban.test.com, OU=azkaban, O=test, L=beijing, ST=beijing, C=CN correct?
[no]: yes
Enter key password for <azkaban>
(RETURN if same as keystore password)
3、在azkaban-web-server中新建logs目錄,用於記錄azkaban執行日誌結構如下: