分布式計算(五)Azkaban使用


在安裝好Azkaban后,熟悉Azkaban的用法花了較長時間,也踩了一些坑,接下來將詳細描述Azkaban的使用過程。

 目錄

  一、界面介紹

  二、Projects

    1. 創建Command類型單一Job示例

      1)創建一個Project,填寫名稱和描述

      2)點擊Create Project之后

      3)創建Job

      4)打包Job資源文件並上傳

    2. 創建Command類型多Job工作流

      1)創建Project

      2)上傳文件

      3)執行一次

      4)指定定時任務

 

一、界面介紹

 

 

首頁有6個菜單:

  • Projects:最重要的部分,創建一個工程,所有flows將在工程中運行
  • Scheduling:顯示定時任務
  • Executing:顯示當前運行的任務
  • History:顯示歷史運行任務
  • Scheduled Flow Triggers:定時flow觸發器
  • Documentation:Azkaban文檔

二、Projects

創建工程:創建之前我們先了解下Project、Flow和Job之間的關系,一個Project包含一個或多個Flow,一個Flow包含多個Job。Job是你想在Azkaban中運行的一個進程,可以是簡單的Linux命令,可以是Java程序,也可以是復雜的Shell腳本,當然,如果你安裝相關插件,也可以運行插件。一個Job可以依賴於另一個Job,這種多個Job和它們的依賴組成的圖表叫做Flow

1. 創建Command類型單一Job示例

1)創建一個Project,填寫名稱和描述

2)點擊Create Project之后

  • Flows:工作流程,由多個Job組成
  • Permissions:權限管理
  • Project Logs:工程日志

 3)創建Job

創建Job很簡單,只要創建一個以.job結尾的文本文件就行了,例如我們創建一個工作,用來打印Hello Azkaban, welcome to the world!,名字叫做command.job

#command.job

type=command

command=echo 'Hello Cellphone, welcome to this world!'

 一個簡單的job就創建好了,解釋下,type的command,告訴Azkaban用unix原生命令去運行,比如原生命令或者Shell腳本,當然也有其他類型,后面介紹。

4)打包Job資源文件並上傳

注意:只能是zip格式!!!

 

分布式計算(四)Azkaban安裝文中說到,安裝的是two server model模式,所以在執行Flow時需要顯示指定useExecutor,在 flow params中設置"useExecutor" = EXECUTOR_ID,而EXECUTOR_ID是數據表executors的id。如果不指定,配置的Flow是無法成功執行的。如果不想通過頁面設置來指定Executor,可以在properties文件中指定,同時在代碼中加上對該屬性的解析,然后,才能分發到指定Executor。

2. 創建Command類型多Job工作流

1)創建Project

前面介紹過多個Job和它們的依賴組成Flow。怎么創建依賴,只要指定dependencies參數就行了。比如導入Hive前,需要進行數據清洗,數據清洗前需要上傳,上傳之前需要從Ftp獲取日志。

定義5個Job:

1. download_log_from_ftp1:從ftp1下載日志

2. download_log_from_ftp2:從ftp2下載日志

3. upload_log_to_hdfs:上傳日志到hdfs

4. clean_data:清洗數據

5. transport_data_to_hive:將清洗完的數據入hive庫

依賴關系:

3依賴1和2,4依賴3,5依賴4,1和2沒有依賴關系。

download_log_from_ftp1.job

type=command
# 執行sh腳本,建議這樣做,后期只需維護腳本就行了,azkaban定義工作流程
# 這里為了測試,把command修改為echo + 相應命令
command=echo 'sh /job/download_log_from_ftp1.sh'

download_log_from_ftp2.job

type=command
# 執行sh腳本,建議這樣做,后期只需維護腳本就行了,azkaban定義工作流程
# 這里為了測試,把command修改為echo + 相應命令
command=echo 'sh /job/download_log_from_ftp2.sh'

upload_log_to_hdfs.job

type=command
command=echo 'sh /job/upload_log_to_hdfs.sh'
#多個依賴用逗號隔開
dependencies=download_log_from_ftp1,download_log_from_ftp2

clean_data.job

type=command
command=echo 'sh /job/clean_data.sh'
#多個依賴用逗號隔開
dependencies=upload_log_to_hdfs

transport_data_to_hive.job

type=command
command=echo 'sh /job/transport_data_to_hive.sh'
#多個依賴用逗號隔開
dependencies=clean_data

可以運行unix命令,也可以運行python腳本(強烈推薦)。將上述job打成zip包。

2)上傳文件

創建工程MultiJob,並上傳MultiJob.zip

點擊transport_data_to_hive進入流程,azkaban流程名稱以最后一個沒有依賴的job定義的。

右上方是配置執行當前流程或者執行定時流程。

說明:

Flow view:流程視圖,可以禁用,啟用某些Job
Notification:定義任務成功或者失敗是否發送郵件
Failure Options:定義一個Job失敗,剩下的Job怎么執行
Concurrent:並行任務執行設置
Flow Parametters:參數設置

 3)執行一次

設置好上述參數,點擊execute。

綠色代表成功藍色是運行紅色是失敗。可以查看job運行時間,依賴和日志,點擊details可以查看各個job運行情況。

4)指定定時任務

可以查看下次執行時間。

 

參考:Azkaban學習之路 (三)Azkaban的使用

 問題

1. Azkaban 執行 Flow 一直處於 Preparing 狀態,無法正常執行

修改 web-server conf/azkaban.properties 配置

# execute 主機過濾器配置, 去掉 MinimumFreeMemory
# MinimumFreeMemory 過濾器會檢查 executor 主機空余內存是否會大於 6G,如果不足 6G,則 web-server 不會將任務交由該主機執行
azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM