Azkaban 任務調度工具

概述

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開發,代碼結構清晰,易於⼆次開發

架構

在這裏插入圖片描述

AzkabanLinkedIn上實施,以解決Hadoop作業依賴問題。我們有⼯作需要按順序運⾏,從ETL⼯作到數據分析產品。最初是單⼀服務器解決⽅案,隨着多年來Hadoop⽤戶數量的增加,Azkaban 已經發展成爲⼀個更強⼤的解決⽅案。Azkaban總共有三個⻆⾊:關係型數據庫(MySQL)AzkabanWebServerAzkabanExecutorServer

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,進行解壓。

執行如下命令:

[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
# 創建庫
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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章