1、Azkaban 介紹
1.1 背景
一個完整的大數據分析系統,必然由不少任務單元 (如數據收集、數據清洗、數據存儲、數據分析等) 組成,全部的任務單元及其之間的依賴關係組成了複雜的工做流。複雜的工做流管理涉及到不少問題:git
- 如何定時調度某個任務?
- 如何在某個任務執行完成後再去執行另外一個任務?
- 如何在任務失敗時候發出預警?
- ......
面對這些問題,工做流調度系統應運而生。Azkaban 就是其中之一。github
1.2 功能
Azkaban 產生於 LinkedIn,並通過多年生產環境的檢驗,它具有如下功能:web
- 兼容任何版本的 Hadoop
- 易於使用的 Web UI
- 可使用簡單的 Web 頁面進行工做流上傳
- 支持按項目進行獨立管理
- 定時任務調度
- 模塊化和可插入
- 身份驗證和受權
- 跟蹤用戶操做
- 支持失敗和成功的電子郵件提醒
- SLA 警報和自動查殺失敗任務
- 重試失敗的任務
Azkaban 的設計理念是在保證功能實現的基礎上兼顧易用性,其頁面風格清晰明朗,下面是其 WEB UI 界面:數據庫
2、Azkaban 和 Oozie
Azkaban 和 Oozie 都是目前使用最爲普遍的工做流調度程序,其主要區別以下:服務器
功能對比
- 二者都可以調度 Linux 命令、MapReduce、Spark、Pig、Java、Hive 等工做流任務;
- 二者都可以定時執行工做流任務。
工做流定義
- Azkaban 使用 Properties(Flow 1.0) 和 YAML(Flow 2.0) 文件定義工做流;
- Oozie 使用 Hadoop 流程定義語言(hadoop process defination language,HPDL)來描述工做流,HPDL 是一種 XML 流程定義語言。
資源管理
- Azkaban 有較嚴格的權限控制,如用戶對工做流進行讀/寫/執行等操做;
- Oozie 暫無嚴格的權限控制。
運行模式
- Azkaban 3.x 提供了兩種運行模式:
- solo server model(單服務模式) :元數據默認存放在內置的 H2 數據庫(能夠修改成 MySQL),該模式中
webServer
(管理服務器) 和 executorServer
(執行服務器) 運行在同一個進程中,進程名是 AzkabanSingleServer
。該模式適用於小規模工做流的調度。
- multiple-executor(分佈式多服務模式) :存放元數據的數據庫爲 MySQL,MySQL 應採用主從模式進行備份和容錯。這種模式下
webServer
和 executorServer
在不一樣進程中運行,彼此之間互不影響,適合用於生產環境。
- Oozie 使用 Tomcat 等 Web 容器來展現 Web 頁面,默認使用 derby 存儲工做流的元數據,因爲 derby 過於輕量,實際使用中一般用 MySQL 代替。
3、總結
若是你的工做流不是特別複雜,推薦使用輕量級的 Azkaban,主要有如下緣由:框架
- 安裝方面:Azkaban 3.0 以前都是提供安裝包的,直接解壓部署便可。Azkaban 3.0 以後的版本須要編譯,這個編譯是基於 gradle 的,自動化程度比較高;
- 頁面設計:全部任務的依賴關係、執行結果、執行日誌均可以從界面上直觀查看到;
- 配置方面:Azkaban Flow 1.0 基於 Properties 文件來定義工做流,這個時候的限制可能會多一點。可是在 Flow 2.0 就支持了 YARM。YARM 語法更加靈活簡單,著名的微服務框架 Spring Boot 就採用的 YAML 代替了繁重的 XML。
更多大數據系列文章能夠參見 GitHub 開源項目: 大數據入門指南分佈式