一、概述 1)什麼是任務調度? 大數據平臺技術框架支持的開發語言多種多樣,開發人員的背景差異也很大,這就產生出很多不同類型的程式(任務)運行在大數據平臺之上,如:MapReduce、Hive、Pig、Spark、Java、Shell、Python 等。 這些任務需要不同的運行環境,並且除了定時運行, ...
目錄
一、概述
1)什麼是任務調度?
大數據平臺技術框架支持的開發語言多種多樣,開發人員的背景差異也很大,這就產生出很多不同類型的程式(任務)運行在大數據平臺之上,如:MapReduce、Hive、Pig、Spark、Java、Shell、Python 等。
這些任務需要不同的運行環境,並且除了定時運行,各種類型之間的任務存在依賴關係,一張簡單的任務依賴圖如下:
2)常見任務調度工具
Crontab
(Linux 自帶命令,使用方式簡單,適合不是非常複雜的場景,比如只按照時間來調度)Oozie
( Hadoop 自帶的開源調度系統,使用方式比較複雜,適合大型項目場景)Azkaban
(一個開源調度系統,使用方式比較簡單,適合中小型項目場景)- 企業定製開發(企業自研的調度系統,不開源)
3)什麼是Azkaban
Azkaban是由Linkedin開源的一個批量工作流任務調度器,Azkaban來自LinkedIn公司,用於管理他們的Hadoop批處理工作流。日常生產環境中,為了得到想要的數據,通常需要執行很多作業,一批作業執行完畢,再將中間結果進一步處理,最後得到有價值的數據,因此作業之間執行有先後順序和依賴關係。這樣的一組作業稱為一個工作流,Azkaban就是用來構建、運行和管理工作流的工具,它提供友好的Web用戶界面來維護和跟蹤用戶的工作流程。Azkaban已經在LinkedIn運行了好幾年,管理著很多Hadoop和數據倉庫作業流,具有很強的可用性。
官方文檔:
https://azkaban.readthedocs.io/en/latest/
https://azkaban.github.io/azkaban/docs/latest/
簡單來講,它有幾個特點:
- 分散式多執行器
- MySQL重試
- 友好的用戶界面
- 有條件的工作流
- 數據觸發
- 高安全
- 支持插件擴展,從Web UI到作業執行
- 全作者身份管理系統
二、Azkaban 與 Oozie 對比
Azkaban 和 Oozie 是市面上最流行的兩種調度器。總體來說,Ooize 相比 Azkaban 是一個重量級的任務調度系統,功能全面,但部署和使用也更複雜,比較適合作為大型項目的任務調度系統。而 Azkaban 相對而言,配置和使用更為簡單,能夠滿足常見的任務調度,比較適合作為中小型項目的任務調度系統。
對比如下:
對比項目 | Azkaban | Oozie |
---|---|---|
功能 | 兩者均可以調度 mapreduce,pig,java,腳本工作流任務兩者均可以定時執行工作流任務 | 跟Azkaban一樣 |
工作流定義 | Azkaban 使用 Properties 文件定義工作流 | Oozie 使用 XML 文件定義工作流 |
工作流傳參 | Azkaban 支持直接傳參 | Oozie 支持參數和 EL 表達式 |
定時執行 | Azkaban 的定時執行任務是基於時間的 | Oozie 的定時執行任務基於時間和輸入數據 |
資源管理 | Azkaban 有較嚴格的許可權控制,如用戶對工作流進行讀/寫/執行等操作 | Oozie 暫無嚴格的許可權控制 |
工作流執行 | Azkaban 有兩種運行模式,分別是單機模式和集群模式 | Oozie 作為工作流伺服器運行,支持多用戶和多工作流 |
工作流管理 | Azkaban 支持瀏覽器以及 ajax 方式操作工作流 | Oozie 支持命令行、HTTP REST、Java API、瀏覽器操作工作流 |
三、Azkaban 運行模式及架構
Azkaban 三大核心組件
- 關係型元資料庫(MySQL)
- Azkaban Web Server
- Azkaban Executor Server
1)Azkaban Web Server
AzkabanWebServer 是 Azkaban 的主要管理者,負責項目管理、身份驗證、調度和監控執行,並且為用戶界面
2)Azkaban Executor Server
提交和執行工作流,記錄工作流日誌,和 Azkaban WebServer 可以在同一臺伺服器,也可部署在獨立的機器。把 Executor 單獨分開有幾個好處:
- 在多 Executor 模式下可以方便擴展
- 工作流在某一個 Executor 掛掉,可以在另一個 Executor 上重試
- 可以滾動升級,從而不影響調度
3)關係型元資料庫(MySQL)
負責存儲azkaban系統的數據,包括用戶上傳的工作流文件、作業執行的日誌等。Executor Server和Web Server都通過jdbc頻繁地對其操作。
Azkaban 元資料庫
表名 | 描述 |
---|---|
active_executing_flows | 記錄當前執行中的flow對應每次執行的exejid |
execution_flows | Azkaban flow的執行記錄 |
executionjobs | Azkaban flow中的job的執行記錄 |
executionjogs | Azkaban flow中的執行日誌記錄 |
executors | 配置的executor的信息,多執行器模式有多條記錄 |
project_files | 保存項目的文件 |
project_flows | 項目中的flow信息 |
project_permissions | 項目中用戶的許可權 |
project_versions | 項目的版本,上傳用戶,上傳時間等 |
projects | 項目信息 |
triggers | 調度信息 |
四、Azkaban安裝部署
在3.0版本之後,我們提供了兩種模式:獨立的“單獨伺服器”模式和分散式多執行器模式。下麵介紹兩種模式的區別。
- solo server mode(單機模式):該模式中Web Server和Executor Server運行在同一個進程中,進程名AzkabanSingleServer。可以使用自帶的H2資料庫或者配置mysql數據。該模式適用於小規模的使用。
- multiple executor mode(多執行器模式),適用於大規模的生產環境。它的資料庫應該由設置了主從關係的MySQL實例進行備份。Web Server和Executor Server運行在不同的進程中,這樣升級和維護就不會影響到用戶。這種多主機設置為阿茲卡班帶來了健壯和可伸縮的方面。
目前我們採用的是multiple executor mode方式,分別在不同的主機上部署多個Azkaban ExecutorServer以應對高併發定時任務執行的情況,從而減輕單個伺服器的壓力。
安裝步驟如下:
- 設置資料庫
- 配置資料庫以使用多個執行程式
- 為資料庫中配置的每個Executor下載並安裝Executor Server
- Azkaban安裝插件
- 安裝Web伺服器
官方文檔:https://azkaban.readthedocs.io/en/latest/getStarted.html
1)solo server mode安裝
1、下載
$ cd /opt/bigdata/hadoop/software
$ git clone https://github.com/azkaban/azkaban.git
2、構建Azkaban安裝包
$ cd azkaban; ./gradlew build installDist
【溫馨提示】如果編譯失敗了,就多執行幾次
3、啟動服務
$ cd azkaban-solo-server/build/install/azkaban-solo-server
$ ./bin/start-solo.sh
$ netstat -tnlp|grep 8081
### 停止服務,這裡不執行
$ ./bin/shutdown-solo.sh
檢查進程
$ jps
4、web訪問驗證
- 訪問http://ip:8081 (預設埠是
8081
) - zkaban預設登錄名/密碼:
azkaban/azkaban
5、配置https並重啟服務
阿茲卡班獨立伺服器預設不使用SSL。但你也可以在獨立的web伺服器上用同樣的方法設置它。Azkaban web伺服器支持SSL套接字連接器,這意味著必須提供密鑰存儲庫,您可以按照以下步驟生成這裡提供的有效的jetty密鑰存儲庫:
創建ssl配置
$ keytool -keystore keystore -alias jetty -genkey -keyalg RSA
1.輸入密鑰庫口令: 123456
2.再次輸入新口令: 123456
3.[Unknown]: azkaban
4.[Unknown]: azkaban
5.[Unknown]: azkaban
6.[Unknown]: shenzhen
7.[Unknown]: guangdong
8.[Unknown]: CN
9.[no]: Y
10.(如果和密鑰庫口令相同, 按回車):
修改Azkaban 配置文件azkaban.properties
或azkaban.private.properties
(推薦)。
$ cd /opt/bigdata/hadoop/software/azkaban/azkaban-solo-server/build/install/azkaban-solo-server/conf
$ touch azkaban.private.properties
在azkaban.private.properties
(文件需要創建)配置如下:
# 根據上面設置的填,keystore文件會自動生成
# ssl 文件名
jetty.keystore=/opt/bigdata/hadoop/software/azkaban/azkaban-solo-server/build/install/azkaban-solo-server/keystore
jetty.password=123456
jetty.keypassword=123456
# 文件名
jetty.truststore=/opt/bigdata/hadoop/software/azkaban/azkaban-solo-server/build/install/azkaban-solo-server/keystore
jetty.trustpassword=123456
在azkaban.properties
修改如下配置:
jetty.use.ssl=true
jetty.ssl.port=8443
重啟服務
$ ./bin/shutdown-solo.sh ; ./bin/start-solo.sh
$ jps
$ netstat -tnlp|grep 8443
web訪問驗證
2)multiple executor mode安裝(推薦)
先停掉上面的服務
$ /opt/bigdata/hadoop/software/azkaban/azkaban-solo-server/build/install/azkaban-solo-server/bin/shutdown-solo.sh
部署規劃
hostname | IP | 節點屬性 |
---|---|---|
hadoop-node1 | 192.168.0.113 | Azkaban Web Server/Azkaban Executor Server |
hadoop-node2 | 192.168.0.114 | Azkaban Executor Server |
1、把編譯好的包copy到其它目錄
這裡也提供一下我編譯的安裝包,下載地址如下:
鏈接:https://pan.baidu.com/s/1zvUyfXg3sCPqBfESWY-oLQ
提取碼:6666
$ mkdir /opt/bigdata/hadoop/server/azkaban
$ cd /opt/bigdata/hadoop/software/azkaban/
$ cp ./azkaban-web-server/build/distributions/azkaban-web-server-3.91.0-313-gadb56414.tar.gz /opt/bigdata/hadoop/server/azkaban/
$ cp ./azkaban-exec-server/build/distributions/azkaban-exec-server-3.91.0-313-gadb56414.tar.gz /opt/bigdata/hadoop/server/azkaban/
$ cp ./azkaban-db/build/distributions/azkaban-db-3.91.0-313-gadb56414.tar.gz /opt/bigdata/hadoop/server/azkaban/
### 解壓並改名
$ cd /opt/bigdata/hadoop/server/azkaban
2、安裝mysql
因為我之前安裝過了mysql,不清楚的可以參考我之前的文章:大數據Hadoop之——數據倉庫Hive
3、初始化azkaban表
#【溫馨提示】一般公司禁止mysql -u root -p123456這種方式連接,在history里有記錄,存在安全隱患,小伙伴不要被公司安全審計哦,切記!!!
$ mysql -u root -p
輸入密碼:123456
CREATE DATABASE azkaban;
CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';
GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;
Mysql數據包大小可能需要重新配置。預設情況下,MySQL允許的包大小可能低得離譜。要增加它,您需要將屬性
max_allowed_packet
設置為一個更大的數字,比如1024M。要在linux中配置,請打開/etc/my.cnf
或者/etc/my.cnf.d/mysql-server.cnf
(推薦),在mysqld後面的某個地方,添加以下內容:
[mysqld]
max_allowed_packet=1024M
重啟mysql服務
$ systemctl restart mysqld
$ netstat -tnlp|grep 3306
開始初始化azkaban表
$ cd /opt/bigdata/hadoop/server/azkaban/azkaban-db
# 連接mysql
$ mysql -u root -p
密碼:123456
use azkaban
# 可能版本不一樣,sql文件也不太一樣,create-all-sql-*.sql
source create-all-sql-3.91.0-313-gadb56414.sql
4、安裝 Azkaban Executor Server(hadoop-node1)
$ cd /opt/bigdata/hadoop/server/azkaban/azkaban-exec
# mysql配置,如果不一樣,就需要調整
$ grep mysql conf/azkaban.properties
修改conf/azkaban.properties
配置文件
### 修改時區
default.timezone.id=Asia/Shanghai
### 修改mysql host
mysql.host=hadoop-node1
### webserver.url
azkaban.webserver.url=https://hadoop-node1:8443
### executor.port不設置就是隨機值了,不方便管理,所以這裡還是固定一個埠號,看資料大部分都是使用12321這個埠,這裡也隨大流
executor.port=12321
啟動服務
# 【溫馨提示】必須進入到azkaban-exec目錄下執行啟動重啟命令,因為配置文件中有些路徑用的是相對路徑
$ cd /opt/bigdata/hadoop/server/azkaban/azkaban-exec
# 重啟
$ ./bin/shutdown-exec.sh ; ./bin/start-exec.sh
# AzkabanExecutorServer
$ jps
$ telnet -tnlp|grep 12321
在資料庫中查看記錄
通過介面的方式去激活,不能直接改表欄位值,切記!!!
# 記得換成自己的IP或功能變數名稱
$ curl -G "hadoop-node1:12321/executor?action=activate" && echo
【溫馨提示】重啟Azkaban Executor Server得重新激活
5、安裝 另一臺Azkaban Executor Server(hadoop-node2)
- 【第一步】先登錄
hadoop-node2
創建azkaban目錄
$ mkdir -p /opt/bigdata/hadoop/server/azkaban
- 【第二步】登錄到
hadoop-node1
copy 安裝目錄到hadoop-node2
$ cd /opt/bigdata/hadoop/server/azkaban
$ scp -r azkaban-exec hadoop-node2:/opt/bigdata/hadoop/server/azkaban/
- 【第三步】啟動Executor Server
# 登錄到hadoop-node2 切換到azkaban目錄
$ cd /opt/bigdata/hadoop/server/azkaban/azkaban-exec
$ ./bin/start-exec.sh
$ jps
$ netstat -tnlp|grep 12321
- 【第四步】激活Executor Server
# 記得換成自己的IP或功能變數名稱
$ curl -G "hadoop-node2:12321/executor?action=activate" && echo
【溫馨提示】重啟Azkaban Executor Server得重新激活
6、安裝Azkaban Web Server(hadoop-node1)
$ cd /opt/bigdata/hadoop/server/azkaban/azkaban-web
# mysql配置,如果不一樣,就需要調整
$ grep mysql conf/azkaban.properties
修改conf/azkaban.properties
配置文件
### 修改時區
default.timezone.id=Asia/Shanghai
### 修改mysql host
mysql.host=hadoop-node1
### azkaban.executorselector.filters調度策略
# 把MinimumFreeMemory去掉,因為MinimumFreeMemory是6G,自己電腦資源有限,如果小伙伴的機器資源雄厚,可以保留
# StaticRemainingFlowSize:根據排隊的任務數來調度任務到哪台executor機器
# CpuStatus:跟據cpu空閑狀態來調度任務到哪台executor機器
azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus
啟動服務
$ ./bin/start-web.sh
$ jps
$ netstat -tnlp|grep 8081
7、配置HTTPS
跟上面的一樣
$ keytool -keystore keystore -alias jetty -genkey -keyalg RSA
1.輸入密鑰庫口令: 123456
2.再次輸入新口令: 123456
3.[Unknown]: azkaban
4.[Unknown]: azkaban
5.[Unknown]: azkaban
6.[Unknown]: shenzhen
7.[Unknown]: guangdong
8.[Unknown]: CN
9.[no]: Y
10.(如果和密鑰庫口令相同, 按回車):
配置
在azkaban-web/azkaban.private.properties
(文件需要創建)配置如下:
# 根據上面設置的填,keystore文件會自動生成
# ssl 文件名
jetty.keystore=/opt/bigdata/hadoop/server/azkaban/azkaban-web/keystore
jetty.password=123456
jetty.keypassword=123456
# 文件名
jetty.truststore=/opt/bigdata/hadoop/server/azkaban/azkaban-web/keystore
jetty.trustpassword=123456
在azkaban-web/azkaban.properties
修改如下配置:
jetty.use.ssl=true
jetty.ssl.port=8443
修改azkaban-exec/conf/azkaban.properties
jetty.port=8443
# Where the Azkaban web server is located
azkaban.webserver.url=https://hadoop-node1:8443
重啟服務
$ ./bin/shutdown-web.sh ; ./bin/start-web.sh
$ jps
$ netstat -tnlp|grep 8443
web訪問驗證:https://192.168.0.113:8443
8、Web 用戶與角色
官方文檔:https://azkaban.readthedocs.io/en/latest/userManager.html
$ cd /opt/bigdata/hadoop/server/azkaban/azkaban-web
$ cat conf/azkaban-users.xml
配置一個管理員用戶,增加如下一行
<user password="123456" roles="metrics" username="test"/>
重啟web服務
$ ./bin/shutdown-web.sh ; ./bin/start-web.sh
五、Azkaban實戰
官方文檔:https://azkaban.readthedocs.io/en/latest/createFlows.html
1)HelloWorld示例(單個工作流)
1、在windows環境,新建helloworld.project
文件,編輯內容如下:
azkaban-flow-version: 2.0
【溫馨提示】該文件作用,是採用新的Flow-API方式解析flow文件,內容基本上是固定的,2.0版本xxx.flow是yaml格式,2.0之前的版本是key=value格式,示例如下:
type=command
command=echo 'hello'
2、新建helloworld.flow
文件,內容如下:
nodes:
- name: jobA
type: command
config:
command: echo "Hello World"
【溫馨提示】註意縮進的空格
- Name:job名稱
- Type:job類型。command表示你要執行作業的方式為命令
- Config:job配置
3、將上面兩個文件壓縮成一個zip文件,目前只支持zip文件,文件名稱必須是英文。
4、新建project
5、把zip文件上傳到azkaban執行
6、執行
2)工作量依賴案例
- DependentWorkflow.flow
nodes:
- name: jobA
type: command
config:
command: echo "jobA"
- name: jobB
type: command
config:
command: echo "jobB"
- name: jobC
type: command
dependsOn:
- jobA
- jobB
config:
command: echo "jobC"
- DependentWorkflow.project
azkaban-flow-version: 2.0
- 創建project,並把zip文件上傳到azkaban執行
- 執行(執行完jobA和jobB才執行jobC)
4)自動失敗重試案例
執行一個不存在的腳本/tmp/retry.sh,則任務失敗,間隔10000ms,重試3次,其實總共會執行4次,1+3(重試3次)
- AutoFailed2Retry.flow
---
nodes:
- name: JobA
type: command
config:
command: sh /tmp/retry.sh
retries: 3
retry.backoff: 10000
retries
:重試次數
retry.backoff
:重試的間隔時間(ms)
- AutoFailed2Retry.project
azkaban-flow-version: 2.0
- 創建project,並把zip文件上傳到azkaban執行
- 執行
執行了4次,最後一次執行的狀態為失敗狀態
5)手動失敗重試案例
需求:JobA=》JobB(依賴於A)=》JobC(依賴於B)=》JobD(依賴於C)=》JobE(依賴於D)=》JobF(依賴於E)。生產環境,任何Job都可能掛掉,可以根據需求執行想要執行的Job。這裡假設JobC失敗了。
- ManualFailed2Retry.flow
---
nodes:
- name: JobA
type: command
config:
command: echo "This is JobA."
- name: JobB
type: command
dependsOn:
- JobA
config:
command: echo "This is JobB."
- name: JobC
type: command
dependsOn:
- JobB
config:
command: sh /tmp/retry.sh
- name: JobD
type: command
dependsOn:
- JobC
config:
command: echo "This is JobD."
- name: JobE
type: command
dependsOn:
- JobD
config:
command: echo "This is JobE."
- name: JobF
type: command
dependsOn:
- JobE
config:
command: echo "This is JobF."
- ManualFailed2Retry.project
azkaban-flow-version: 2.0
- 創建project,並把zip文件上傳到azkaban執行
- 執行
執行到JobC失敗了,後面的Job就會自動取消了
- 手動創建這個/tmp/retry.sh腳本,每個Executor都創建這個腳本,因為不確定會調度到哪個Executor
$ echo "echo 'This is JobC.'" > /tmp/retry.sh
可以看到,之前JobA和JobB執行成功的就不再執行了。正是預期效果。
6)JavaProcess工作流案例
【溫馨提示】
type
不單單隻有command
,還有javaprocess
,當然還有其它type,例如:noop
等。可以參考官方文檔
【概述】
JavaProcess類型可以運行一個自定義主類方法,type類型為javaprocess
,可用的配置為:
-
Xms:最小堆記憶體
-
Xmx:最大堆記憶體
-
classpath:類路徑,可以省略,省略的話,是flow當前文件路徑
-
java.class:要運行的Java對象,其中必須包含Main方法
-
main.args:main方法的參數
-
新建azkaban的maven工程或者module
-
創建
com.bigdata.AzTest
類,內容如下:
【示例】
package com.bigdata;
public class AzTest {
public static void main(String[] args) {
System.out.println("This is Azkaban Test!!!");
}
}
- 打包成jar包azkaban-1.0-SNAPSHOT.jar
- 新建com.bigdata.testJava.flow,內容如下:
nodes:
- name: az_javaprocess_test
type: javaprocess
config:
Xms: 100M
Xmx: 200M
java.class: com.bigdata.AzTest
- JavaprocessTest001.project,project文件是固定的也是並不可少的。
azkaban-flow-version: 2.0
- 把三個文件打包成zip包
- 把zip包上傳到azkaban上執行
六、Azkaban進階(條件工作流)
1)條件工作流概述
條件工作流功能允許用戶自定義執行條件來決定是否運行某些Job,條件可以由當前Job的父Job輸出的運行時參數構成,也可以使用預定義巨集。在這些條件下,用戶可以在確定Job執行邏輯時獲取得更大的靈活性,例如:只要父Job之一成功,就可以運行當前Job。
1、基本原理
- 父Job將參數寫入
JOB_OUTPUT_PROP_FILE
環境變數所指向的文件 - 子Job使用${jobName.param}來獲取父Job輸出的參數並定義執行條件
2、支持的條件運算符:
- == 等於
- != 不等於
-
大於
-
= 大於等於
- < 小於
- <= 小於等於
- && 與
- || 或
- ! 非
3、示例
【示例一】
需求:JobA執行一個shell腳本。JoB執行一個shell腳本,但JobB不需要每天都執行,而只需要每周一執行。
- 新建JobA.sh
#!/bin/bash
echo "do JobA"
wk=`date +%w`
echo "{\"wk\":$wk}" > $JOB_OUTPUT_PROP_FILE
獲取當前周第幾天,0:周日,1表示周一,則JobB需要到周一才執行,今天不執行
- 新建JobB.sh
#!/bin/bash
echo "do JoB"
- 新建condition.flow
nodes:
- name: JobA
type: command
config:
command: sh JobA.sh
- name: JobB
type: command
dependsOn:
- JobA
config:
command: sh JobB.sh
condition: ${JobA:wk} == 1
- 將JobA.sh、JobB.sh、condition.flow和azkaban.project打包成xxx.zip
- 創建condition項目=》上傳xxx.zip文件=》執行作業=》觀察結果
2)預定義巨集
1、巨集概念
Azkaban中預置了幾個特殊的判斷條件,稱為預定於巨集。
預定於巨集會根據所有父Job的完成情況進行判斷,再決定是否執行。可用的預定義巨集如下:
all_success
:表示父Job全部成功才執行(預設)all_done
:表示父Job全部完成才執行all_failed
:表示父Job全部失敗才執行one_success
:表示父Job至少一個成功才執行one_failed
:表示父Job至少一個失敗才執行
2、示例
需求:
- JobA執行一個shell腳本
- JobB執行一個shell腳本
- JobC執行一個shell腳本,要求JobA、JobB中有一個成功即可執行
步驟如下:
- 新建JobA.sh
#!/bin/bash
echo "do JobA"
- 新建JobB.sh(不創建,驗證)
#!/bin/bash
echo "do JobB"
- 新建JobC.sh
#!/bin/bash
echo "do JobC"
- 新建marco.flow
nodes:
- name: JobA
type: command
config:
command: sh JobA.sh
- name: JobB
type: command
config:
command: sh JobB.sh
- name: JobC
type: command
dependsOn:
- JobA
- JobB
config:
command: sh JobC.sh
condition: one_success
- 新建marco.project
azkaban-flow-version: 2.0
- 把文件打包成zip文件,並上傳到azkaban上執行
- 執行
JobB執行失敗了,JobC還是執行成功,驗證成功。
3)定時執行工作流
拿之前的案例,設置定時調度
每分鐘執行一次
把定時任務移除
4)郵件報警
1、開啟郵箱協議SMTP服務
這裡以QQ郵箱為示範,需要開啟郵箱協議
2、修改azkaban-web配置,配置發送郵件信息
$ cd /opt/bigdata/hadoop/server/azkaban/azkaban-web
$ vi conf/azkaban.properties
# 修改的內容如下:
[email protected]
mail.host=smtp.qq.com
# 下麵兩行沒有需要增加
[email protected]
# password就換成上面截圖的授權碼(自己郵箱授權碼)
mail.password=xxxx
重啟web服務生效
$ ./bin/shutdown-web.sh ; ./bin/start-web.sh
3、azkaban配置郵件接受人
還是拿上面的案例進行測試
查看郵箱,發現已經收到了工作流報警郵件
5)電話報警
因為azkaban預設是不支持電話報警的,所以這裡使用睿象雲做中轉實現電話報警。
1、登錄睿象雲官網註冊並登錄配置
這裡選擇免費試用,自己測試就免費試用也夠了,如果是商用或者在企業里用肯定是需要付費使用的。
使用智能告警平臺
選擇集成
這裡使用Email集成方式,因為azkaban支持郵件
2、配置通知策略
3、設置azkaban配置
配置這個郵箱:[email protected]
能收到告警電話,驗證ok。小伙伴可以自己試試。
總結
原生的 Azkaban 支持的plugin類型有以下這些:
- command:Linux shell命令行任務
- javaprocess:原生java任務
- gobblin:通用數據採集工具
- hadoopJava:運行hadoopMR任務
- hive:支持執行hiveSQL
- pig:pig腳本任務
- spark:spark任務
- hdfsToTeradata:把數據從hdfs導入Teradata
- teradataToHdfs:把數據從Teradata導入hdfs
上面我們示例中用到了command和javaprocess,其中最簡單而且最常用的是
command
類型。
Azkaban基礎部分就先到這了,後續會有更多相關的文章,請小伙伴耐心等待~