大數據Hadoop之——任務調度器Azkaban(Azkaban環境部署)

来源:https://www.cnblogs.com/liugp/archive/2022/05/15/16273966.html
-Advertisement-
Play Games

一、概述 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

訪問:http://192.168.0.113:8081

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.propertiesazkaban.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訪問驗證

https://192.168.0.113:8443

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

https://hadoop-node1:8443

五、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基礎部分就先到這了,後續會有更多相關的文章,請小伙伴耐心等待~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在實際項目開發中,我們可能會碰到各種各樣的項目環境,有些項目需要一個大而全的整體框架來支撐開發,有些中小項目這需要一些簡單便捷的系統框架靈活開發。本系列隨筆介紹底層利用SqlSugar來做ORM數據訪問模塊,設計一個簡單便捷一點的框架,本篇從基礎開始介紹一些框架內容。 ...
  • 配置三台伺服器,如下: 生成密鑰 在三台機器(node1\node2\node3)執行以下命令,生成公鑰與私鑰。 ssh-keygen -t rsa 執行該命令之後,按下三個回車即可,然後敲(三個回車),就會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰),預設保存在/root/.ss ...
  • df命令 linux命令學習_ll linux命令學習_pip linux命令學習_cat df命令:顯示磁碟的相關信息 語法:df [-ahHiklmPT][--block-size=<區塊大小>][-t <文件系統類型>][-x <文件系統類型>][--help][--no-sync][--sy ...
  • crash tool是一款內核調試工具,常用來分析內核崩潰問題。我們可以手動觸發內核崩潰,然後借用該工具來分析當時系統的運行情況,當然也包括記憶體的運行情況。 ...
  • 背景 作為一名開發,平時工作中也會涉及到後端服務部署等一些linux運維任務,在此想總結一下我最近一次遇到的運維問題,事情起因是這樣的,在一個天氣晴朗的早上,本來在愉快的摸著魚,開著總結會,突然接到電話,客戶線上的項目全部不能用了,白屏;尼瑪,當聽到這個東西,我心裡是想罵人的,因為這個是祖傳的東西, ...
  • MOSFET 的三端標記分別為 G, S, D(Gate, Source, Drain), 電路符號有多種形式, 最常見的如下圖所示, 以一條垂直線代表溝道(Channel), 兩條和溝道平行的接線代表源極(Source)與漏極(Drain), 左方和溝道垂直的接線代表柵極(Gate). 有時也會將... ...
  • Environment Modules: provides dynamic modification of a user's environment 一個可以動態修改用戶環境的工具 ...
  • 待持續更新 一、批處理命令 1.命令 使用help命令查看結果集 結果集 1. echo 和 @ 回顯命令 @ #關閉單行回顯 echo off #從下一行開始關閉回顯 @echo off #從本行開始關閉回顯。一般批處理第一行都是這個 echo on #從下一行開始打開回顯 echo #顯示當前是 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...