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
下載地址:http://azkaban.github.io/downloads.html
官網提供的壓縮包是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的單機版安裝完成,在瀏覽器中訪問:http://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)我該如何打好基礎?