Azkaban 3.62 安裝

介紹

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

                                               azkaban_struct.png

1. 元數據數據庫(目前僅支持mysql)

2. web管理服務器-AzkabanWebServer

3. 執行服務器-AzkabanExecutorServer

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

metadata Database:存儲元數據,如項目名稱、項目描述、項目權限、任務狀態、SLA規則等。
AzkabanWebServer:項目管理、權限授權、任務調度、監控executor。
AzkabanExecutorServer:作業流執行的Server。

AzkabanWebServer

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

AzkabanExecutorServer

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

Azkaban三種部署模式

solo-server模式

DB使用的是一個內嵌的H2,Web Server和Executor Server運行在同一個進程裏。這種模式包含Azkaban的所有特性,但一般用來學習和測試。

two-server模式

DB使用的是MySQL,MySQL支持master-slave架構,Web Server和Executor Server運行在不同的進程中。

分佈式multiple-executor模式

DB使用的是MySQL,MySQL支持master-slave架構,Web Server和Executor Server運行在不同機器上,且有多個Executor Server。
 

編譯安裝

1、下載源碼

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

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

2、編譯

進入到下載的azkaban目錄中進行編譯:(提前安裝好git,gradle,jdk8)

# 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.62

# cp azkaban-db/build/distributions/azkaban-db-3.62.0-7-g4f2f631.tar.gz azkaban_3.62/

# cp azkaban-web-server/build/distributions/azkaban-web-server-3.62.0-7-g4f2f631.tar.gz azkaban_3.62/

# cp azkaban-solo-server/build/distributions/azkaban-solo-server-3.62.0-7-g4f2f631.tar.gz azkaban_3.62/

# cp azkaban-exec-server/build/distributions/azkaban-exec-server-3.62.0-7-g4f2f631.tar.gz azkaban_3.62/

解壓:

# cd azkaban_3.62

# tar xvf azkaban-solo-server-3.62.0-7-g4f2f631.tar.gz

# tar xvf azkaban-exec-server-3.62.0-7-g4f2f631.tar.gz

# tar xvf azkaban-web-server-3.62.0-7-g4f2f631.tar.gz

# tar xvf azkaban-db-3.62.0-7-g4f2f631.tar.gz

3、配置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;

> EXIT

3、導入建表語句


mysql -uazkaban -p

> SOURCE azkaban_3.62/azkaban-db-3.62.0-7-g4f2f631/create-all-sql-3.62.0-7-g4f2f631.sql;

4、配置Azkaban

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

1. 本文將採用multiple executor mode安裝模式,組件分配如下:

node1 azkaban-exec-server

node2 azkaban-exec-server

node3 azkaban-web-server

node3 mysql-server

在node3上創建/opt/Azkaban-web-server目錄,把編譯好的軟件azkaban-web-server拷貝到該目錄

在node1,node2上創建目錄/opt/Azkaban-exec-server目錄,把編譯好的軟件azkaban-exec-server拷貝到該目錄

2. 配置Azkaban Web Server

2-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]: 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=YY, OU=YY, O=YY, L=shanghai, ST=shanghai, C=CN correct?

[no]: y

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

2-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

2-3. 用戶配置

在conf/azkaban-users.xml添加管理員用戶及密碼:

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

2-4. 啓動web-server

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

# bin/start-web.sh

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

 

3. 配置 Azkaban Executor Server

3-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

3-2. 啓動exec-server

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

#  bin/start-exec.sh 

注意:在這種模式下,先要啓動exec-server,再啓動web-server


5、問題

1. Error: HADOOP_HOME is not set. Hadoop job types will not run properly.

export HADOOP_HOME=...

2. java.lang.IllegalArgumentException: The datetime zone id 'Asia/Shangha' is not recognised

配置文件中時區配置錯誤,修正即可。Asia/Shanghai

3. azkaban.executor.ExecutorManagerException: No active executors found

修改數據庫executors表中的active字段爲1,並且在關閉exector時使用kill -9,不能使用shutdown-exec.sh,否則要重新設置executors表中的active字段爲1。

4. javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?

在web頁面登陸時,使用https替換http。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章