Azkaban3.x集羣部署(multiple executor mode)

Azkaban3.x集羣部署(multiple executor mode)

介紹

Azkaban是由Linkedin公司推出的一個批量工作流任務調度器,用於在一個工作流內以一個特定的順序運行一組工作和流程。Azkaban使用job配置文件建立任務之間的依賴關係,並提供一個易於使用的web用戶界面維護和跟蹤你的工作流。 它有三個重要組件:

  • 關係數據庫(目前僅支持mysql)
  • web管理服務器-AzkabanWebServer
  • 執行服務器-AzkabanExecutorServer

Azkaban使用MySQL來存儲它的狀態信息,Azkaban Executor Server和Azkaban Web Server均使用到了MySQL數據庫。

AzkabanExecutorServer在如下幾個方面使用到了數據庫:

  • 獲取project的信息
  • 執行工作流
  • 存儲工作流運行日誌
  • 如果一個工作流在不同的執行器上運行,它將從DB中獲取狀態。

AzkabanWebServer在如下幾個方面使用到了數據庫:

  • Project管理
  • 跟蹤工作流執行進度
  • 訪問歷史工作流的運行信息
  • 定時執行工作流任務
  • 記錄所有sla規則

AzkabanWebServer
AzkabanWebserver是整個Azkaban工作流系統的主要管理者,它負責project管理、用戶登錄認證、定時執行工作流、跟蹤工作流執 行進度等一系列任務。同時,它還提供Web服務操作的接口,利用該接口,用戶可以使用curl或其他ajax的方式,來執行azkaban的相關操作。操作包括:用戶登錄、創建project、上傳workflow、執行workflow、查詢workflow的執行進度、殺掉workflow等一系列操作,且這些操作的返回結果均是json的格式。

AzkabanExecutorServer
之所以將AzkabanWebServer和AzkabanExecutorServer分開,主要是因爲在某個任務流失敗後,可以更方便的將重新執行。而且也更有利於Azkaban系統的升級。

編譯安裝

1、下載源碼

從github上下載azkaban官方源碼,目前最新release爲3.30.1

git clone [email protected]:azkaban/azkaban.git

2、編譯

進入到下載的azkaban目錄中進行編譯:

# Build Azkaban
./gradlew build(這一步需要等待的時間略久,需要提前安裝git、gcc等軟件,否則會報錯)

# Clean the build
./gradlew clean

# Build and install distributions
./gradlew installDist

# Run tests
./gradlew test

# Build without running tests
./gradlew build -x test

相關目錄介紹如下:

azkaban-common : 常用工具類
azkaban-db : 對應的sql腳本
azkaban-Hadoop-secutity-plugin : hadoop有關kerberos插件
azkaban-solo-server: web和executor運行在同一進程的項目
azkaban-web-server:azkaban的web-server單獨模塊
azkaban-executor-server: azkaban的executor-server單獨模塊
azkaban-spi: azkaban存儲接口以及exception類

將編譯好的文件拷貝出來:

# mkdir Azkaban_3.30
# cp azkaban-master/azkaban-exec-server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz azkaban_3.30/
# cp azkaban-master/azkaban-web-server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz azkaban_3.30/
# cp azkaban-master/azkaban-solo-server/build/distributions/azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz azkaban_3.30/
# cp azkaban-master/azkaban-db/build/distributions/azkaban-db-0.1.0-SNAPSHOT.tar.gz azkaban_3.30/

解壓:

# cd azkaban_3.30
# tar xvf azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz 
# tar xvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz 
# tar xvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz 
# tar xvf azkaban-db-0.1.0-SNAPSHOT.tar.gz 

配置mysql數據庫

1、安裝mysql數據庫

這裏省略安裝步驟,使用版本的爲5.7

2、創建數據庫

創建一個azkaban的數據庫:

mysql -uroot -p
> CREATE DATABASE azkaban;

授權:

> CREATE USER 'azkaban'@'%' IDENTIFIED BY 'password';
> GRANT ALL ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;
> flush privileges;
> FLUSH PRIVILEGES;
> EXIT

3、導入建表語句

mysql -uazkaban -p
> SOURCE azkaban_3.30/azkaban-db-0.1.0-SNAPSHOT/create-all-sql-0.1.0-SNAPSHOT.sql;

配置Azkaban

這裏將安裝三個exec-server和一個web-server,相關組件分配如下:

本文將採用multiple executor mode安裝模式,組件分配如下:
bd-dev-ops-170       172.31.217.170       azkaban-exec-server
bd-dev-ops-171       172.31.217.171       azkaban-exec-server
bd-dev-ops-172       172.31.217.172       azkaban-web-server  azkaban-exec-server
bd-dev-ops-173       172.31.217.173       mysql-server

在172上創建/opt/Azkaban-web-server目錄,把編譯好的軟件拷貝到該目錄,包含以下目錄:

bin      啓動腳本存放目錄
conf     配置文件存放目錄(沒有的話從solo-server的目錄中拷貝過來)
lib      依賴jar包存放目錄
extlib   附加jar包存放目錄(沒有的話手動創建)
plugins  插件安裝目錄
web      web資源文件

在170,171,172上創建目錄/opt/Azkaban-exec-server目錄,把編譯好的軟件拷貝到該目錄,包含以下目錄:

bin      啓動腳本存放目錄
conf     配置文件存放目錄(沒有的話從solo-server的目錄中拷貝過來)
lib      依賴jar包存放目錄
extlib   附加jar包存放目錄(沒有的話手動創建)
plugins  插件安裝目錄

配置Azkaban Web Server

1、配置jetty ssl

# keytool -keystore keystore -alias jetty -genkey -keyalg RSA
Enter keystore password:  
Re-enter new password: 
What is your first and last name?
  [Unknown]:  YY
What is the name of your organizational unit?
  [Unknown]:  YY
What is the name of your organization?
  [Unknown]:  YY
What is the name of your City or Locality?
  [Unknown]:  shanghai
What is the name of your State or Province?
  [Unknown]:  shanghai
What is the two-letter country code for this unit?
  [Unknown]:  CN
Is CN=YY, OU=YY, O=YY, L=shanghai, ST=shanghai, C=CN correct?
  [no]:  yes

將生成的keystone文件拷貝到web-server的安裝目錄下,和conf等目錄同級

2、修改conf/azkaban.properties配置文件

#cat azkaban.properties 
# Azkaban Personalization Settings
azkaban.name=Test              #服務器UI名稱,用於服務器上方顯示的名字
azkaban.label=My Local Azkaban #描述
azkaban.color=#FF3601          #UI顏色
azkaban.default.servlet.path=/index
web.resource.dir=web/          #默認根web目錄
default.timezone.id=Asia/Shanghai #默認時區,已改爲亞洲/上海
# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager    #用戶權限管理默認類
user.manager.xml.file=conf/azkaban-users.xml      #用戶配置,具體配置參見下文
# Loader for projects
executor.global.properties=conf/global.properties #globa配置文件所在位置
azkaban.project.dir=projects                      

# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.  #jetty服務器屬性
jetty.maxThreads=25                 #最大線程數
jetty.ssl.port=8443                 #jetty ssl端口號
jetty.port=8081                     #jetty端口
jetty.keystore=keystore             #SSL文件名
jetty.password=bigdata@123          #SSL文件密碼
jetty.keypassword=bigdata@123       #jetty主密碼與keystore文件相同
jetty.truststore=keystore           #SSL文件名
jetty.trustpassword=bigdata@123     #SSL文件密碼
# Azkaban Executor settings
executor.port=12321                 #執行服務器端口
# mail settings                     #郵件配置(暫沒有配置)
mail.sender=                        #發送郵箱
mail.host=                          #發送郵箱smtp地址
mail.password=                      #郵箱密碼
job.failure.email=                  #任務失敗時發送郵件的地址
job.success.email=                  #任務成功時發送郵件的地址
lockdown.create.projects=false
cache.directory=cache               #緩存目錄
# JMX stats
jetty.connector.stats=true
executor.connector.stats=true
# Azkaban plugin settings
azkaban.jobtype.plugin.dir=plugins/jobtypes

database.type=mysql          #數據庫類型
mysql.port=3306              #數據庫端口號
mysql.host=172.31.217.173    #數據庫連接地址
mysql.database=azkaban       #數據庫實例名
mysql.user=azkaban           #數據庫用戶名
mysql.password=bigdata@123   #數據庫密碼
mysql.numconnections=100     #數據庫最大連接數
azkaban.use.multiple.executors=true
azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1
azkaban.executorselector.comparator.Memory=1
azkaban.executorselector.comparator.LastDispatched=1
azkaban.executorselector.comparator.CpuUsage=1

3、上傳log4j文件

在azkaban目錄下創建logs文件夾,位置跟conf在同一級,在conf目錄中上傳log4j文件。簡單示例如下:

log4j.rootLogger=DEBUG,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

如果沒有log4j文件,將會以下錯誤:

Exception: java.lang.StackOverflowError thrown from the UncaughtExceptionHan

4、用戶配置

添加管理員用戶及密碼:

<azkaban-users>
  <user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/>
  <user password="metrics" roles="metrics" username="metrics"/>
  <user username="admin" password="admin" roles="admin,metrics"/>#新增管理員
  <role name="admin" permissions="ADMIN"/>
  <role name="metrics" permissions="METRICS"/>
</azkaban-users>

5、啓動web-server

進入到web-server的目錄,執行如下腳本,需要在bin級目錄執行,否則彙報找不到配置文件的錯誤。

# bin/azkaban-web-start.sh

打開瀏覽器,訪問https://172.31.217.172:8443,用剛剛添加的管理員賬戶密碼登錄。

配置 Azkaban Executor Server

1、修改conf/azkaban.properties

# cat azkaban.properties 
# Azkaban Personalization Settings
default.timezone.id=Asia/Shanghai
# Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects
# Azkaban plugin settings
azkaban.jobtype.plugin.dir=plugins/jobtypes

database.type=mysql
mysql.port=3306
mysql.host=172.31.217.173
mysql.database=azkaban
mysql.user=azkaban
mysql.password=bigdata@123
mysql.numconnections=100

# Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30

2、上傳log4j文件

在azkaban目錄下創建logs文件夾,位置跟conf在同一級,在conf目錄中上傳log4j文件。簡單示例如下:

log4j.rootLogger=DEBUG,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

如果沒有log4j文件,將會以下錯誤:

Exception: java.lang.StackOverflowError thrown from the UncaughtExceptionHan

3、啓動exec-server

進入到exec-server的目錄,執行如下腳本,需要在bin級目錄執行,否則彙報找不到配置文件的錯誤。(一共三臺機器)

# bin/azkaban-executor-start.sh
# 在這種模式下,先要啓動exec-server,再啓動web-server
http://www.cnblogs.com/bugsbunny/p/7412164.html
發佈了72 篇原創文章 · 獲贊 134 · 訪問量 69萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章