1. 程式人生 > >Azkaban安裝並設定定時任務Schedule以及郵件傳送接收

Azkaban安裝並設定定時任務Schedule以及郵件傳送接收

緣起

    之前的任務一直使用的是crontab定時任務,要通過監聽任務執行日誌才可以知道任務執行失敗,並且還要設定郵件傳送比較麻煩。最重要的是crontab無法維護任務之間的依賴關係。而使用Azkaban可以很方便的管理任務之間的依賴關係,可以設定任務失敗執行重試操作和郵件傳送,NICE!

安裝

    首先第一步肯定是要上官網瞄一下啦!https://azkaban.github.io/azkaban/docs/latest/#overview

    solo server mode可以滿足我們的需求,就是它了!

最好先建立一個工作目錄,在工作目錄裡面操作,這裡我建立了一個工作目錄 /big_data,接著就按照官方文件的步驟來:

git clone https://github.com/azkaban/azkaban.git
cd azkaban;
./gradlew build
./gradlew build
./gradlew clean
./gradlew installDist
./gradlew test
./gradlew build -x test
./gradlew build installDist

畫重點:為了避免不必要的許可權問題出現,比如要執行的使用者是hdfs,在這一步完成以後,一定要修改azkaban目錄下的owner:

chown hdfs:hdfs -R azkaban/

開啟azkaban服務:

cd azkaban-solo-server/build/install/azkaban-solo-server; bin/start-solo.sh

注意:為了避免使用者許可權問題,跑任務的是哪個使用者,必須要切換到哪個使用者啟動azkaban,不然的話會出現許可權問題!

停止azkaban服務:

cd azkaban-solo-server/build/install/azkaban-solo-server;bin/shutdown-solo.sh
開啟azkaban服務後訪問:
http://IP:8081/index

預設的azkaban web埠號是8081

建立工作流



填好工程名稱和描述

    建立四個job:

    1 sync_Apply_CreditCard.job

#sync_Apply_CreditCard.job
type=command
command=sh /big_data/sh/azkaban_mysql_2_hive_sh/sqoop_Apply_CreditCard.sh
retries=3 #失敗重試3次
retry.backoff=30000 #每次重試間隔,單位為毫秒

    2 sync_Company.job

type=command
dependencies=sync_Apply_CreditCard
command=sh /big_data/sh/azkaban_mysql_2_hive_sh/sqoop_Company.sh
retries=3
retry.backoff=30000

    3  sync_Product_CreditCard.job

type=command
dependencies=sync_Company
command=sh /big_data/sh/azkaban_mysql_2_hive_sh/sqoop_Product_CreditCard.sh
retries=3
retry.backoff=30000

    4 sync_Member.job

#sync_Member.job
type=command
dependencies=sync_Product_CreditCard
command=sh /big_data/sh/azkaban_mysql_2_hive_sh/sqoop_Member.sh
retries=3
retry.backoff=30000

然後使用zip命令將這四個檔案打成zip檔案:

zip CRMMarket.zip *

選擇剛才打好的zip檔案上傳,上傳完成後可以看到:



    這就說明zip包解析沒有問題,.job檔案語法也沒有問題,依賴關係也OK!

設定Schedule
1.設定azkaban為上海時區:

由於azkaban預設的時區是美國時區,所以要將預設時區設定成上海時區。azkaban的預設時區配置如下:

default.timezone.id=America/Los_Angeles

包含時區設定的檔案有四個:

/big_data/azkaban/azkaban-solo-server/src/main/resources/conf/azkaban.properties
/big_data/azkaban/azkaban-solo-server/build/resources/main/conf/azkaban.properties
/big_data/azkaban/azkaban-solo-server/build/install/azkaban-solo-server/conf/azkaban.properties

將這四個檔案的時區設定修改成:

#default.timezone.id=America/Los_Angeles
default.timezone.id=Asia/Shanghai

然後重啟azkaban服務。

2.設定定時任務:

選中project,點選Execute Flow:



設定每天16:00跑這個定時任務:


設定郵箱通知

    Azkaban還具有任務執行結果郵件通知功能,在solo server mode安裝模式下,配置郵件通知的方式如下:

1.配置郵件傳送者:
/big_data/azkaban/azkaban-solo-server/src/main/resources/conf/azkaban.properties
/big_data/azkaban/azkaban-solo-server/build/resources/main/conf/azkaban.properties
/big_data/azkaban/azkaban-solo-server/build/install/azkaban-solo-server/conf/azkaban.properties

    修改這三個檔案的如下內容:

# mail settings
#mail.sender=郵件傳送者
#mail.host=傳送郵件伺服器   騰訊企業郵箱的host是:smtp.exmail.qq.com  126郵箱的host是:smtp.126.com  163郵箱的host是:smtp.163.com
[email protected]
mail.host=smtp.126.com
[email protected]
mail.password=XXXXXXX
2.配置郵件接收者:

在任務流Flow的最後一個.job中檔案中新增如下內容

#任務執行失敗傳送郵件,多個接收郵件人之間用“,”分隔
[email protected],[email protected]
#任務執行成功傳送郵件
[email protected]
#任務執行完成,無論成功還是失敗傳送郵件
[email protected]