工作流調(diào)度器azkaban

一、準備

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


訪問地址:

https://node03:8443

用戶名和密碼都是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







?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容