概述
Azkaban
是由Linkedin公司推出的⼀個批量⼯作流任務調度器,主要⽤於在⼀個⼯作流內以⼀個特定的順序運⾏⼀組⼯作和流程,它的配置是通過簡單的key:value對的⽅式,通過配置中的dependencies 來設置依賴關係,這個依賴關係必須是⽆環的,否則會被視爲⽆效的⼯作流。Azkaban使⽤job配置⽂件建⽴任務之間的依賴關係,並提供⼀個易於使⽤的web⽤戶界⾯維護和跟蹤你的⼯作流。zkaban的設計⾸先考慮了可⽤性。它已經在LinkedIn上運⾏了⼏年,並驅動了許多Hadoop和數據倉庫流程。
知名度⽐較⾼的應該是 Apache Oozie
,但是其配置⼯作流的過程是編寫⼤量的XML配置,⽽且代碼複雜度⽐較⾼,不易於⼆次開發。另外⼀個應⽤也⽐較⼴泛的調度系統是 Airflow
,但是其開發語⾔是
Python。
選擇Azkaban的理由:
- 提供功能清晰,簡單易⽤的Web UI界⾯
- 提供job配置⽂件快速建⽴任務和任務之間的依賴關係
- 提供模塊化和可插拔的插件機制,原⽣⽀持command、Java、Hive、Pig、Hadoop
- 基於Java開發,代碼結構清晰,易於⼆次開發
架構
Azkaban
在LinkedIn
上實施,以解決Hadoop作業依賴問題。我們有⼯作需要按順序運⾏,從ETL⼯作到數據分析產品。最初是單⼀服務器解決⽅案,隨着多年來Hadoop⽤戶數量的增加,Azkaban 已經發展成爲⼀個更強⼤的解決⽅案。Azkaban總共有三個⻆⾊:關係型數據庫(MySQL)
、AzkabanWebServer
、AzkabanExecutorServer
。
Azkaban使⽤MySQL存儲服務狀AzkabanWebServerAzkabanExecutorServer都需要訪問MySQL的DB數據庫
AzkabanWebServer
是所有Azkaban的主要管理器。它處理項⽬管理,身份驗證,調度程序和執⾏監視。它還⽤作Web⽤戶界⾯,使得 使⽤Azkaban很容易。- Azkaban使⽤* .job鍵值屬性⽂件來定義⼯作流程中的各個任務,並使⽤dependencies 屬性來定義作業的依賴關係鏈。這些作業⽂件和相關的代碼可以存檔爲*.zip,並通過Azkaban UI或curl通過Web服務器上傳。以前的Azkaban版本(version 3.0之前)在單個服務器中同時具有AzkabanWebServer和AzkabanExecutorServer功能。此後,執⾏程序已被分離到單獨的服務器中。拆分這些服務的原因有很多:⽅便的擴展Executor的數量,並在失敗的情況下可以恢復。離以後在對Azkaban升級的時候對⽤戶的使⽤影響很⼩。
安裝使用
在
version 3.0
中我們提供了三種模式:獨⽴的"solo-server"
模式、較重的"two server"
模式以及"multipleexecutor"
模式。
- 其中
solo server mode
使⽤的內嵌的H2 DB
,所有的web server和executor server運⾏在⼀個相同的進程中,該種模式適合測試或者任務調度規模⽐較⼩;two server mode
⽤於⽣產環境,後臺的DB數據庫使⽤MySQL
,其中Webserver和executorserver應該被部署在不同的主機上;- multiple executor mode 也通常⽤於⽣產環境,後臺的DB數據庫使⽤MySQL,其中Webserver和executorservers應該被部署在不同的主機上;
單機 mode
①編譯軟件
(推薦不要自己執行,亦可省略,直接開始②)
[root@pro1~] yum install git
[root@pro1~] git clone https://github.com/azkaban/azkaban.git
[root@pro1~] cd azkaban/
[root@pro1azkaban] ./gradlew build installDist
由於編譯時間過長(可能幾個小時),這裏附上已編譯好的安裝包
https://pan.baidu.com/s/1AI7QBfyMDDAxJ3V5x_TkDQ 提取碼:gvcc
②安裝單機
獲取編譯完成後安裝目錄下的 azkaban-solo-server-*.tar.gz
,進行解壓。
- 這裏也附上此
tar
包,可以不再使用①中的初始安裝包。
https://pan.baidu.com/s/14cMfemocG1EW9xddBo-J3w 獲取碼:e5dx
執行如下命令:
[root@pro1 azkaban] tar -zxf azkaban-solo-server/build/distributions/azkaban-soloserver-3.81.0-1-g304593d.tar.gz -C /usr/
[root@pro1 azkaban] cd /usr/
[root@pro1 usr] mv azkaban-solo-server-3.81.0-1-g304593d azkaban-solo-server
③修改 azkaban.properties 配置⽂件
進入conf目錄,執行如下命令
default.timezone.id=Asia/Shanghai #修改時區
jetty.port=8082 #配置azkabanweb服務器地址,避免與單機環境下的 flink衝突
④修改commonprivate.properties配置⽂件
[root@pro1 azkaban-exec-server] vim plugins/jobtypes/commonprivate.properties
修改如下配置
memCheck.enabled=false #關閉執⾏節點內存檢查,默認如果執⾏節點內存⼩於6GB,不會提交任務
⑤ 啓動
[root@pro1 azkaban-solo-server] ./bin/start-solo.sh #啓動
[root@pro1 azkaban-solo-server] jps
5638 AzkabanSingleServer
5679 Jps
⑥測試
訪問 端口: 8082 (對應③中配置的端口位置
)
username : azkaban
password: azkaban
關於測試的方法,一致放在 集羣模式下 展示。
⑦關閉
[root@pro1 azkaban-solo-server] ./bin/shutdown-solo.sh
Killing solo-server. [pid: 18912], attempt: 1
shutdown succeeded
集羣 mode
①安裝配置MySQL
- 略去安裝
準備好特定sql 文件
: https://pan.baidu.com/s/1FpbFxbnhr65cBPZxuuhSFQ 獲取碼:lsgv- 初始化azkaban服務運⾏所需的基本數據
# 創建庫
mysql> create database azkaban;
Query OK, 1 row affected (0.00 sec)
# 查看庫
mysql> show create database azkaban;
+----------+--------------------------------------------------------------------+
| Database | Create Database |
+----------+--------------------------------------------------------------------+
| azkaban | CREATE DATABASE `azkaban` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+--------------------------------------------------------------------+
1 row in set (0.00 sec)
#使用庫
mysql> use azkaban;
Database changed
# 加載sql文件
mysql> source /root/create-all-sql-3.81.0-1-g304593d.sql
Query OK, 0 rows affected (0.00 sec)
...
Query OK, 0 rows affected (0.00 sec)
#有34個表纔是成功
mysql> show tables;
.
.
34 rows in set (0.00 sec)
②安裝Executor-Server(在所有集羣節點上
)
安裝包獲取:https://pan.baidu.com/s/1lztuUl1-o_X_bd6EtlWU0A 獲取碼:zih8
執行如下命令:
[root@pro2 ~] tar -zxf azkaban-exec-server-3.81.0-1-g304593d.tar.gz -C /usr/zylsoft/
[root@pro2 ~] cd /usr/zylsoft/
[root@pro2 zylsoft] mv azkaban-exec-server-3.81.0-1-g304593d/ azkaban-exec-server
[root@pro2 zylsoft] cd azkaban-exec-server/
②-1.配置azkaban.properties
[root@pro2 azkaban-exec-server] vim conf/azkaban.properties
配置以下內容
# Azkaban Personalization Settings
# 改時區
default.timezone.id=Asia/Shanghai
# 改ip、端口
# Azkaban Jetty server properties.
jetty.port=8082
# Where the Azkaban web server is located
# 改IP、端口
azkaban.webserver.url=http://pro1:8082
# mail settings
mail.sender= #你的郵箱地址
mail.host=smtp.qq.com #郵箱類型
mail.user= #你的郵箱地址
mail.password= #郵箱的授權碼|密碼
# 任務調度成功&失敗的發送郵箱
job.failure.email= #你的郵箱地址
job.success.email= #你的郵箱地址
jetty.ssl.port) are used.
#修改 mysql配置
# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=pro1
sql.database=azkaban
mysql.user=root
mysql.password=000
②-2.配置commonprivate.properties
進入此文件中
[root@pro1 azkaban-exec-server] vim plugins/jobtypes/commonprivate.properties
修改:
memCheck.enabled=false #關閉內存檢查
②-3.啓動azkaban執⾏服務器
[root@pro2 azkaban-exec-server] ./bin/start-exec.sh
[root@pro2 azkaban-exec-server] jps
1635 Jps
1620 AzkabanExecutorServer
②-4.激活azkaban執⾏服務器(每次重啓,都需要激活)
[root@pro2 azkaban-exec-server] curl -G "localhost:$(<./executor.port)/executor?action=activate" && echo
{“status”:“success”}
顯示此狀態表示啓動成功
③安裝Azkaban的web服務器(只有⼀個,任一臺服務器上安裝)
軟件獲取包: https://pan.baidu.com/s/1j8ymmfN9uX1GfSTzcHp1Sw 獲取碼:vhar
③-1. 安裝
[root@pro1 ~] tar -zxf azkaban-web-server-3.81.0-1-g304593d.tar.gz -C /usr/
[root@pro1 ~] mv /usr/azkaban-web-server-3.81.0-1-g304593d/ /usr/azkaban-webserver/
③-2.配置azkaban.properties
[root@pro1 azkaban-web-server] vi conf/azkaban.properties
修改以下配置:
# Azkaban Personalization Settings
# 修改時區
default.timezone.id=Asia/Shanghai
# Azkaban Jetty server properties.
# 修改端口
jetty.port=8082
# mail settings
mail.sender=********@qq.com
mail.host=smtp.qq.com
mail.user=********@qq.comail.password=郵箱的授權碼|密碼
# 任務調度成功&失敗的發送郵箱
job.failure.email=********@qq.com
job.success.email=********@qq.com
# Azkaban mysql settings by default. Users should configure their own username and password.
# 修改MySQL配置
database.type=mysql
mysql.port=3306
mysql.host=pro1
mysql.database=azkaban
mysql.user=root
mysql.password=000
mysql.numconnections=100
#Multiple Executor
#azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
#關閉對執行服務器的內存檢查-測試環境才需要關閉
azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus
③-3.啓動、關閉
[root@pro1 azkaban-web-server] ./bin/start-web.sh
#停止指令
[root@pro1 azkaban-web-server] ./bin/shutdown-web.sh
④測試
訪問 8082端口 ,與 ③-2中配置的端口一致
username : azkaban
password: azkaban
測試
參考 https://blog.csdn.net/weixin_38231448/article/details/103847194
Flow1.0
type=command
command=echo ‘Hello Azkaban!’
將以上⽂件打包成zip包然後上傳!
Flow 2.0
1、創建xxx.project⽂件
azkaban-flow-version: 2.0
2.創建⼀個xxx.flow
nodes:
- name: jobA
type: command
config:
command: echo "This is an echoed text."
將以上⽂件打包成zip包然後上傳!
5種測試標準zip包獲取:
https://pan.baidu.com/s/1rcT3N5ALhtZ-AY7m76yKRQ 獲取碼:z2q3
-
ex-1
echo命令
-
ex-2
shell腳本
-
ex-3
java代碼
-
ex-4
多個⽆關job-並⾏
(文件名可能有誤,打開後請自行修改) -
ex-5
內嵌流
(文件名可能有誤,打開後請自行修改) -
補充
配置郵件服務示例:
---
config:
user.to.proxy: root
failure.emails: [email protected],[email protected]
success.emails: [email protected],[email protected]
notify.emails: [email protected],[email protected]
nodes:
- name: job01
type: command
config:
command: sh ./demo08/bin/hdfs.sh