一、準備
安裝VMware15虛擬化軟件
安裝CentOS 7虛擬機3個
安裝3節(jié)點的hadoop-2.6.0-cdh5.14.2集群
安裝了hive
安裝了zookeeper集群
安裝了hbase集群
二、主題
azkaban架構(gòu)
azkaban運行模式
azkaban安裝部署
azkaban使用
三、目標
理解azkanban架構(gòu)
完成azkaban安裝部署
學(xué)會azkaban各種使用方式
四、知識要點
1. 概述
azkaban官網(wǎng):https://azkaban.github.io/

功能特點
提供功能清晰、簡單易用的web UI界面
提供job配置文件快速建立任務(wù)和任務(wù)之間的關(guān)系
提供模塊化的可插拔機制,原生支持command、java、hive、hadoop
基于java開發(fā),代碼結(jié)構(gòu)清晰,易于二次開發(fā)
1. 為什么需要工作流調(diào)度系統(tǒng)
一個完整的數(shù)據(jù)分析系統(tǒng)通常都是由大量任務(wù)單元組成:
shell腳本程序,java程序,mapreduce程序、hive腳本等
各任務(wù)單元之間存在時間先后及前后依賴關(guān)系
為了很好地組織起這樣的復(fù)雜執(zhí)行計劃,需要一個工作流調(diào)度系統(tǒng)來調(diào)度執(zhí)行;
例如,我們可能有這樣一個需求,某個業(yè)務(wù)系統(tǒng)每天產(chǎn)生20G原始數(shù)據(jù),我們每天都要對其進行處理,處理步驟如下所示:
通過Hadoop先將原始數(shù)據(jù)同步到HDFS上;
借助MapReduce計算框架對原始數(shù)據(jù)進行轉(zhuǎn)換,生成的數(shù)據(jù)以分區(qū)表的形式存儲到多張Hive表中;
需要對Hive中多個表的數(shù)據(jù)進行JOIN處理,得到一個明細數(shù)據(jù)Hive寬表;
將明細數(shù)據(jù)進行各種統(tǒng)計分析,得到結(jié)果報表信息;
需要將統(tǒng)計分析得到的結(jié)果數(shù)據(jù)同步到業(yè)務(wù)系統(tǒng)中,供業(yè)務(wù)調(diào)用使用。
2. 工作流調(diào)度實現(xiàn)方式
簡單的任務(wù)調(diào)度:直接使用linux的crontab來定義;
復(fù)雜的任務(wù)調(diào)度:開發(fā)調(diào)度平臺或使用現(xiàn)成的開源調(diào)度系統(tǒng),比如ooize、azkaban、airflow等
2. Azkaban介紹
Azkaban是由Linkedin開源的一個批量工作流任務(wù)調(diào)度器。用于在一個工作流內(nèi)以一個特定的順序運行一組工作和流程。
Azkaban定義了一種KV文件(properties)格式來建立任務(wù)之間的依賴關(guān)系,并提供一個易于使用的web用戶界面維護和跟蹤你的工作流。
它有如下功能特點:
Web用戶界面
方便上傳工作流
方便設(shè)置任務(wù)之間的關(guān)系
調(diào)度工作流
認證/授權(quán)(權(quán)限的工作)
能夠殺死并重新啟動工作流
模塊化和可插拔的插件機制
項目工作區(qū)
工作流和任務(wù)的日志記錄和審計
3. azkaban的基本架構(gòu)

Azkaban由三部分構(gòu)成
1、Azkaban Web Server提供了Web UI,是azkaban的主要管理者,包括 project 的管理,認證,調(diào)度,對工作流執(zhí)行過程的監(jiān)控等。
2、Azkaban Executor Server負責(zé)具體的工作流和任務(wù)的調(diào)度提交
3、Mysql用于保存項目、日志或者執(zhí)行計劃之類的信息
4. Azkaban架構(gòu)的三種運行模式
1. solo server mode(單機模式)
web server 和 executor server運行在一個進程里
最簡單的模式,數(shù)據(jù)庫內(nèi)置的H2數(shù)據(jù)庫,管理服務(wù)器和執(zhí)行服務(wù)器都在一個進程中運行,任務(wù)量不大項目可以采用此模式。?
2. two server mode
web server 和 executor server運行在不同的進程
數(shù)據(jù)庫為mysql,管理服務(wù)器和執(zhí)行服務(wù)器在不同進程,這種模式下,管理服務(wù)器和執(zhí)行服務(wù)器互不影響。?
3. multiple executor mode
web server 和 executor server運行在不同的進程,executor server有多個
該模式下,執(zhí)行服務(wù)器和管理服務(wù)器在不同主機上,且執(zhí)行服務(wù)器可以有多個。?
5. Azkaban安裝部署
1. azkaban的編譯
我們這里選用azkaban3.51.0這個版本自己進行重新編譯,編譯完成之后得到我們需要的安裝包進行安裝
注意:我們這里編譯需要使用==jdk1.8==的版本來進行編譯,如果編譯服務(wù)器使用的jdk版本是1.7的,記得切換成jdk1.8,我們這里使用的是jdk8u141這個版本來進行編譯
cd /kkb/soft/
wget https://github.com/azkaban/azkaban/archive/3.51.0.tar.gz
tar -zxvf 3.51.0.tar.gz -C ../install/
cd /kkb/install/azkaban-3.51.0/
yum -y install git
yum -y install gcc-c++
./gradlew build installDist -x test
編譯之后需要的安裝文件列表如下
azkaban-exec-server
編譯完成之后得到我們需要的安裝包在以下目錄下即可獲取得到azkaban-exec-server存放目錄
/kkb/install/azkaban-3.51.0/azkaban-exec-server/build/distributions

azkaban-web-server
azkaban-web-server存放目錄
/kkb/install/azkaban-3.51.0/azkaban-web-server/build/distributions

azkaban-solo-server
azkaban-solo-server存放目錄
/kkb/install/azkaban-3.51.0/azkaban-solo-server/build/distributions

execute-as-user.c
azkaban two server模式下需要的C程序在這個路徑下面
/kkb/install/azkaban-3.51.0/az-exec-util/src/main/c

數(shù)據(jù)庫腳本文件
數(shù)據(jù)庫腳本文件在這個路徑下面
/kkb/install/azkaban-3.51.0/azkaban-db/build/install/azkaban-db

2. azkaban兩個服務(wù)模式安裝
在node03節(jié)點操作
1. 確認所需軟件:
Azkaban Web服務(wù)安裝包
azkaban-web-server-0.1.0-SNAPSHOT.tar.gz
Azkaban執(zhí)行服務(wù)安裝包
azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
編譯之后的sql腳本
create-all-sql-0.1.0-SNAPSHOT.sql
C程序文件腳本
execute-as-user.c程序
將以上4個文件上傳到node03的/kkb/soft目錄
2. 數(shù)據(jù)庫準備
進入mysql的客戶端執(zhí)行以下命令
mysql -uroot -p
執(zhí)行以下命令:
-- 設(shè)置密碼的驗證強度等級
set global validate_password_policy=LOW;
set global validate_password_length=6;
CREATE DATABASE azkaban;
CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';?
GRANT all privileges ON azkaban.* to 'azkaban'@'%' identified by 'azkaban' WITH GRANT OPTION;
flush privileges;
use azkaban;
source /kkb/soft/create-all-sql-0.1.0-SNAPSHOT.sql;

3. 解壓軟件安裝包
解壓azkaban-web-server
cd /kkb/soft
tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C ../install/
cd /kkb/install
mv azkaban-web-server-0.1.0-SNAPSHOT/ azkaban-web-server-3.51.0
解壓azkaban-exec-server
cd /kkb/soft
tar -zxvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz -C ../install/
cd /kkb/install
mv azkaban-exec-server-0.1.0-SNAPSHOT/ azkaban-exec-server-3.51.0
4. 安裝SSL安全認證
安裝ssl安全認證,允許我們使用https的方式訪問我們的azkaban的web服務(wù);
密碼一定要一個個的字母輸入,或者粘貼也行
cd /kkb/install/azkaban-web-server-3.51.0
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
密碼一直輸入azkaban

5. azkaban web server安裝
修改azkaban-web-server的配置文件
cd /kkb/install/azkaban-web-server-3.51.0/conf
vim azkaban.properties
# Azkaban Personalization Settings
azkaban.name=Azkaban
azkaban.label=My Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=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
azkaban.project.dir=projects
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
jetty.use.ssl=true
jetty.maxThreads=25
jetty.port=8081
jetty.ssl.port=8443
jetty.keystore=/kkb/install/azkaban-web-server-3.51.0/keystore
jetty.password=azkaban
jetty.keypassword=azkaban
jetty.truststore=/kkb/install/azkaban-web-server-3.51.0/keystore
jetty.trustpassword=azkaban
# Azkaban Executor settings
# mail settings
mail.sender=
mail.host=
# User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web install and users.
# enduser -> myazkabanhost:443 -> proxy -> localhost:8081
# when this parameters set then these parameters are used to generate email links.
# if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used.
# azkaban.webserver.external_hostname=myazkabanhost.com
# azkaban.webserver.external_ssl_port=443
# azkaban.webserver.external_port=8081
job.failure.email=
job.success.email=
lockdown.create.projects=false
cache.directory=cache
# JMX stats
jetty.connector.stats=true
executor.connector.stats=true
# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=node03
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
#Multiple Executor
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
azkaban.activeexecutor.refresh.milisecinterval=10000
azkaban.queueprocessing.enabled=true
azkaban.activeexecutor.refresh.flowinterval=10
azkaban.executorinfo.refresh.maxThreads=10
需要修改的項目如下圖


6. azkaban executor server 安裝
第一步:修改azkaban-exex-server配置文件
修改azkaban-exec-server的配置文件
cd /kkb/install/azkaban-exec-server-3.51.0/conf
vim azkaban.properties
# Azkaban Personalization Settings
azkaban.name=Azkaban
azkaban.label=My Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=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
azkaban.project.dir=projects
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
jetty.use.ssl=true
jetty.maxThreads=25
jetty.port=8081
#注意 添加如下5行內(nèi)容
jetty.keystore=/kkb/install/azkaban-web-server-3.51.0/keystore
jetty.password=azkaban
jetty.keypassword=azkaban
jetty.truststore=/kkb/install/azkaban-web-server-3.51.0/keystore
jetty.trustpassword=azkaban
# Where the Azkaban web server is located
azkaban.webserver.url=https://node03:8443
# mail settings
mail.sender=
mail.host=
# User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web install and users.
# enduser -> myazkabanhost:443 -> proxy -> localhost:8081
# when this parameters set then these parameters are used to generate email links.
# if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used.
# azkaban.webserver.external_hostname=myazkabanhost.com
# azkaban.webserver.external_ssl_port=443
# azkaban.webserver.external_port=8081
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
# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=node03
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
# Azkaban Executor settings
executor.maxThreads=50
executor.flow.threads=30
需要修改的項目如下圖


第二步:添加插件
將我們編譯后的C文件execute-as-user.c上傳到這個目錄來/kkb/install/azkaban-exec-server-3.51.0/plugins/jobtypes或者直接將我們/kkb/softwares下面的文件拷貝過來也行
cp /kkb/soft/execute-as-user.c /kkb/install/azkaban-exec-server-3.51.0/plugins/jobtypes/
然后執(zhí)行以下命令生成execute-as-user
sudo yum -y install gcc-c++
cd /kkb/install/azkaban-exec-server-3.51.0/plugins/jobtypes
gcc execute-as-user.c -o execute-as-user
sudo chown root execute-as-user
sudo chmod 6050 execute-as-user
第三步:修改配置文件
修改配置文件
cd /kkb/install/azkaban-exec-server-3.47.0/plugins/jobtypes
vim commonprivate.properties
文件末尾增加兩行,內(nèi)容如下
memCheck.enabled=false
azkaban.native.lib=/kkb/install/azkaban-exec-server-3.51.0/plugins/jobtypes

最終生成如下

7. 啟動服務(wù)
第一步:啟動azkaban exec server
cd /kkb/install/azkaban-exec-server-3.51.0
bin/start-exec.sh

第二步:激活我們的exec-server
node03機器任意目錄下執(zhí)行以下命令
curl -G "node03:$(<./executor.port)/executor?action=activate" && echo

第三步:啟動azkaban-web-server
cd /kkb/install/azkaban-web-server-3.51.0/
bin/start-web.sh

訪問地址:
用戶名和密碼都是azkaban
若瀏覽器界面出現(xiàn)類似情況,按圖操作即可

8. 修改linux的時區(qū)問題
由于先前做好了時鐘同步,所以不用擔(dān)心時區(qū)問題,不需要修改時區(qū)了
注:先配置好服務(wù)器節(jié)點上的時區(qū)
1、先生成時區(qū)配置文件Asia/Shanghai,用交互式命令 tzselect 即可
2、拷貝該時區(qū)文件,覆蓋系統(tǒng)本地時區(qū)配置
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
6. Azkaban使用
Azkaba內(nèi)置的任務(wù)類型支持command、java
1. Command類型單一job示例
1. 創(chuàng)建job描述文件
創(chuàng)建文本文件,更改名稱為mycommand.job
注意后綴.txt一定不要帶上,保存為格式為UFT-8 without bom
內(nèi)容如下
type=command
command=echo 'hello world'
2. 將job資源文件打包成zip文件

. 創(chuàng)建project并上傳壓縮包
通過azkaban的web管理平臺創(chuàng)建project并上傳job壓縮包
首先創(chuàng)建project





