Azkaban安裝並設定定時任務Schedule以及郵件傳送接收
緣起
之前的任務一直使用的是crontab定時任務,要通過監聽任務執行日誌才可以知道任務執行失敗,並且還要設定郵件傳送比較麻煩。最重要的是crontab無法維護任務之間的依賴關係。而使用Azkaban可以很方便的管理任務之間的依賴關係,可以設定任務失敗執行重試操作和郵件傳送,NICE!
安裝
首先第一步肯定是要上官網瞄一下啦!https://azkaban.github.io/azkaban/docs/latest/#overviewsolo 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]