【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

 8.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

8.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)

 

8.3、在azkaban-web-server中新建logs目錄,用於記錄azkaban運行日志結構如下:

 

currentpid是在啟動的時候生成的,不用管。

9、配置azkaban-exec-server

9.1在azkaban-exec-server中的conf目錄下配置 沒有conf目錄則創建,同時創建對應下面文件

├── conf │ ├── azkaban.properties
│ ├── log4j.properties

azkaban.properties

# Azkaban
default.timezone.id=Asia/Shanghai # Azkaban JobTypes Plugins
azkaban.jobtype.plugin.dir=plugins/jobtypes # 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 # Azkaban Executor settings executor.maxThreads=50 executor.port=12321 executor.flow.threads=30 # JMX stats jetty.connector.stats=true executor.connector.stats=true # uncomment to enable inmemory stats for azkaban #executor.metric.reports=true #executor.metric.milisecinterval.default=60000

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

 

9.2 在azkaban-exec-server創建plugins/jobtypes 文件夾

mkdir -p plugins/jobtypes

在/jobtypes中生成commonprivate.properties文件 寫入

execute.as.user=false

 

9.3 在azkaban-exec-server創建logs目錄

9.4 最終azkaban-exec-server目錄層級如下:

上圖中圈出的即為創建相應文件夾后的格式,而 executors projects temp目錄會在執行任務時創建 不用管。

 10、啟動azkaban-web-server

一定要在bin層啟動  不在bin目錄里面啟動  如下:

cd azkaban-web-server/

bin/start-web.sh

11、啟動azkaban-exec-server

cd azkaban-exec-server/

bin/start-exec.sh

12、驗證效果如下:

13、前端啟動host:8081即可

 14、注意千萬不要用firefox瀏覽器打開,用google,否則會出現如下界面。不兼容,導致Job不能查看。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM