Azkaban入門篇

Azkaban是由Linkedin公司推出的一個批量工作流任務調度器,用於在一個工作流內以一個特定的順序運行一組工作和流程。Azkaban使用job配置文件建立任務之間的依賴關係,並提供一個易於使用的web用戶界面維護和跟蹤你的工作流。

在介紹Azkaban之前,我們先來看一下現有的兩個工作流任務調度系統。知名度比較高的應該是Apache Oozie,但是其配置工作流的過程是編寫大量的XML配置,而且代碼複雜度比較高,不易於二次開發。另外一個應用也比較廣泛的調度系統是Airflow,但是其開發語言是Python。由於我們團隊內部使用Java作為主流開發語言,所以選型的時候就被淘汰掉了。我們選擇Azkaban的原因基於以下幾點:

  • 提供功能清晰,簡單易用的Web UI界面

  • 提供job配置文件快速建立任務和任務之間的依賴關係

  • 提供模塊化和可插拔的插件機制,原生支持command、Java、Hive、Pig、Hadoop

  • 基於Java開發,代碼結構清晰,易於二次開發

1、Azkaban的安裝

Azkaban有兩種部署方式:solo server mode 和 cluster server mode。

  • solo server mode(單機模式):該模式中webServer和executorServer運行在同一個進程中,進程名是AzkabanSingleServer。可以使用自帶的H2資料庫或者配置mysql數據。該模式適用於小規模的使用。
  • cluster server mode(集群模式):該模式使用MySQL資料庫,webServer和executorServer運行在不同進程中,該模式適用於大規模應用。

Azkaban的組成如下:

其實在單機模式中,AzkabanSingleServer進程只是把AzkabanWebServer和AzkabanExecutorServer合到一起啟動而已。

下面介紹單機版的安裝過程。

(1)下載Azkaban

下載地址:azkaban.github.io/downl

官網提供的壓縮包是Azkaban2.5版本的,但是最新的版本是3.0。如果需要使用3.0版本,只需要到github上下載源碼後編譯即可。github地址是:GitHub - azkaban/azkaban: Azkaban workflow manager.

(2)解壓安裝包

下載後的安裝包是:azkaban-solo-server-x.x.x.tar.gz,解壓後的主要目錄如下所示:

bin:包含啟動和停止的腳本conf:配置文件目錄data:默認自帶資料庫H2的數據目錄executions:每個執行的工作流都會生成一個對應的文件夾,放在該目錄下extlib:第三方擴展包lib:依賴的jar包logs:執行日誌plugins:可拔插的插件包projects:用戶上傳的壓縮包所在目錄sql:運行所需要的mysql表的建表語句web:前端展示界面對應的HTML/CSS/JS文件

(3)資料庫安裝配置

MySQL安裝過程(略)

進入MySQL命令行後,創建資料庫:

  • CREATE DATABASE azkaban;

創建用戶名和密碼:

  • CREATE USER "username"@"%" IDENTIFIED BY "password";

給用戶授權:

  • GRANT SELECT,INSERT,UPDATE,DELETE ON <database>.* to "<username>"@"%" WITH GRANT OPTION;

導入下載包azkaban-sql-script-x.x.x.tar.gz中腳本「create.all.sql」

  • SOURCE create.all.sql;

檢查下載包web和executor的lib文件下是否有mysql驅動,若不存在,則拷貝一個。

(4)修改配置文件conf/azkaban.properties(以下為可修改部分,其他默認即可)

#設置項目主標題azkaban.name=Local#設置項目副標題azkaban.label=My Local Azkaban#設置為上海時間(東八區),否則會按美國時間執行default.timezone.id=Asia/Shanghai#注釋掉默認的H2資料庫配置後,配置MySQL資料庫database.check.version=falsedatabase.type=mysqlmysql.port=3306mysql.host=192.168.0.1mysql.database=azkabanmysql.user=usernamemysql.password=passwordmysql.numconnections=100#配置禁用Jetty伺服器jetty.use.ssl=falsejetty.ssl.port=8043jetty.maxThreads=25jetty.port=8081#配置告警郵件mail.sender=xxx@163.commail.host=smtp.163.commail.user=mailUsernamemail.password=mailPassword#配置azkaban web urlazkaban.webserver.url=http://azkaban.xxx.com/

(5)配置plugin插件

在官網下載azkaban-jobtype-x.x.x.tar.gz文件,解壓到azkaban安裝目錄下的plugin目錄下,並重命名為jobtypes目錄,然後配置commonprivate.properties文件如下:

jobtype.global.classpath=本地hadoop的config文件和lib文件hadoop.classpath=同上#配置各個組件的homehadoop.home=/home/hadoop/hadoop-2.6.0-cdh5.5.0pig.home=/home/hadoop/azkaban/plugins/jobtypes/pighive.home=/home/hadoop/hive-1.1.0-cdh5.5.0spark.home=/home/hadoop/spark-1.6.0-bin-hadoop2.6azkaban.home=/home/hadoop/azkaban/azkaban-solo-server-3.0.0

(6)啟動與關閉

啟動命令:

  • ./bin/azkaban-solo-start.sh

關閉命令:

  • ./bin/azkaban-solo-shutdown.sh

至此,Azkaban的單機版安裝完成,在瀏覽器中訪問:hostname:8081就可以看到Azkaban的UI界面啦!

2、Azkaban界面功能說明

Azkaban主界面中四個標籤頁,分別對應了它的四大功能模塊:

  • Projects:每個獨立的Flows都對應一個Projects,Flows將在Projects中運行

  • Scheduling:顯示定時執行任務

  • Executing:顯示正在執行的任務

  • History:顯示歷史執行任務

由於Projects模塊涉及的功能比較多,下面重點介紹一下。點擊進入一個Project後,如下:

界面右上角的三個按鈕分別可以刪除、上傳、下載Project,我們編寫完成並打包的zip文件,就是在這裡上傳的。界面中的三個標籤頁功能如下:

  • Flows:工作流程,由多個job組成,點擊還可以進入圖表界面

選擇任意一個job節點,右鍵點擊「Open Job...」可以看到該節點的配置參數,可編輯

  • Permissions:用於許可權管理

  • Project Logs:工程日誌

點擊Execute Flow按鈕開始執行工作流,彈出界面如下:

  • Flow View:該界面右邊的流程圖中的每個節點,都可以Disable和Enable

  • Notification:可以配置成功或失敗時是否發出郵件。

  • Failure Options:當任務流執行失敗是選擇處理策略,默認是僅完成當前運行的job

  • Concurrent:並行任務執行設置

  • Flow Parameters:設置執行的參數,用於覆蓋全局設置的參數

最後點擊Execute按鈕即可執行。執行完成的效果如下:

每個執行成功的節點是綠色表示,如果執行失敗,則用紅色表示。

3、一個簡單的例子

下面通過一個列子講解Azkaban的開發流程。

(1)新建一個文件夾,在文件夾下創建兩個文件hello1.job和hello2.job,內容如下:

hello1.job:

type=commandcommand=echo 「this is hello1 job」

hello2.job:

type=commandcommand=echo 「this is hello2 job」dependencies=hello1

(2)把兩個文件打包成hello.zip文件

(3)新建一個Azkaban工程:Hello,並上傳hello.zip壓縮文件

(4)上傳成功後,可以在界面分別看到兩個節點

(5)執行並查看輸出

(6)點擊Details,查看具體日誌

(7)在history界面中可以查看到執行完成的任務:

至此,一個完整的任務從開發到執行完成。


推薦閱讀:

Hadoop實現了雲計算中的哪些構件,又有哪些構件是沒有實現的,用Hadoop可以搭建一個完整的雲計算平台么?
怎麼看待Hadoop Summit 2016 和 Spark summit 2016?
下載prebuilt版的Spark後,必須運行sbt/sbt assembly 後才能使用嗎?
什麼是自助式BI?和傳統BI(商業智能)相比有何優劣勢?
數據之路(Hadoop)我該如何打好基礎?

TAG:Hadoop | 任务系统 |