上節主要介紹了安裝搭建和簡單的運行一個job,但是真正使用到實際場景還是需要了解更多的知識,比如任務怎麼互相依賴,可以選擇指定的節點來執行嗎等等一些相關的操作會在本節中進行介紹
附上:
喵了個咪的博客:w-blog.cn
Azkaban官網: https://azkaban.github.io
官方文檔地址: http://azkaban.github.io/azkaban/docs/latest
一 ,任務依賴
之前說的都是部署方式和一個簡單的運行例子,那麼像開頭說的如果任務直接有依賴關係咋辦呢? 那就需要用到 dependencies 關鍵字了
> mkdir azkaban_job
> vim azkaban_job/one.job
type=command
command=echo "this is job one"
> vim azkaban_job/tow.job
type=command
dependencies=one
command=echo "this is job two"
zip -r azkaban_job.zip azkaban_job/
二 ,指定exec運行對應的任務
筆者遇到了難題,現在Azkaban管着3個exec,其中2個是hadoop的一個是docker相關的,但是Azkaban選擇執行任務的節點是更具節點的資源來調度的,那麼就會出現跑docker相關的命令會跑到hadoop的服務器上,hadoop的命令會跑到docker服務器上,那麼有沒有辦法指定任務執行的環境呢?
首先找到對應的ID
在運行任務的時候添加一個變量
PS:侷限雖然可以指定在一臺節點上執行,但是失去了高可用的優勢,如果有不同類型的任務建議用多套azkaban
三 , 參數傳遞
當我在編寫程序的時候常常會用到變量來去傳遞使用,使用變量的好處在於程序會應該不同的變量完成不同的事情,那麼對於任務來說也是同樣一個道理,比如我傳遞的數據庫的鏈接地址的不同就決定了從哪個數據庫獲取源數據,爲了程序的泛用性變量是不可缺少的,azkaban在job文件中也可以指定變量來接受每一次執行時不同的參數
azkaban變量替換格式是<${name}>,上傳下面測試job文件
#command.job
type=command
command=echo 'hello ${name}!'
在運行前配置好要替換 &{name} 參數的具體的值
最終在執行下來就可以看到參數已經被替換了
四 , 郵件配置
應爲任務是異步定時的,我們對於結果的感知往往沒有手動跑腳本那麼及時,但是如果任何一個任務運行失敗可能都會引起一些列問題,在這個情況下消息通知就很重要了,azkaban支持郵件通知任務執行情況
首先要確保在編譯的時候有按照本文搭建所示修改過azkaban-common/src/main/java/azkaban/utils/EmailMessage.java文件增加了下面這行代碼
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
郵件配置只需要配置到azkaban.properties就可以了
> vim /usr/local/azkaban-web-server/conf/azkaban.properties
mail.sender= @qq.com
mail.user=
mail.host=smtp.qq.com
mail.password=
mail.tls=true
mail.port=465
在執行任務前配置成功失敗的收件人
當任務執行完成就會收到如下郵件