Azkaban
1.工作流
工作流(Workflow),指“業務過程的部分或整體在計算機應用環境下的自動化”。是對工作流程及其各操作步驟之間業務規則的抽象、概括描述。
工作流解決的主要問題是:爲了實現某個業務目標,利用計算機軟件在多個參與者之間按某種預定規則自動傳遞文檔、信息或者任務。
一個完整的數據分析系統通常都是有多個前後依賴的模塊組合構成的:數據採集、數據預處理、數據分析、數據展示等。各個模塊單元之間存在事件先後依賴關係,且存在着週期性重複。
2.工作流調度工具之間對比
特性 | Hamake | Oozie | Azkaban | Cascading |
---|---|---|---|---|
工作流描述語言 | XML | XML (xPDL based) | text file with key/value pairs | Java API |
依賴機制 | data-driven | explicit | explicit | explicit |
是否要 web 容器 | No | Yes | Yes | No |
進度跟蹤 | console/log messages | web page | web page | Java API |
Hadoop job 調度 支持 | no | yes | yes | yes |
運行模式 | command line utility | daemon | daemon | API |
Pig 支持 | yes | yes | yes | yes |
事件通知 | no | no | no | yes |
需要安裝 | no | yes | yes | no |
支持的 hadoop 版本 | 0.18+ | 0.20+ | currently unknown | 0.18+ |
重試支持 | no | workflownode evel | yes | yes |
運行任意命令 | yes | yes | yes | yes |
Amazon EMR 支 持 | yes | no | currently unknown | yes |
3.Azkaban 調度器
Azkaban 是由 linkedin(領英)公司推出的一個批量工作流任務調度器,用於在一個工作流內以一個特定的順序運行一組工作和流程。Azkaban 使用 job 配置文件建立任務之間的依賴關係,並提供一個易於使用的 web 用戶界面維護和跟蹤你的工作流。
4.Azkaban 功能特點
-
提供功能清晰,簡單易用的 Web UI 界面
-
提供 job 配置文件快速建立任務和任務之間的依賴關係
-
提供模塊化和可插拔的插件機制,原生支持 command、Java、Hive、Pig、Hadoop
-
基於 Java 開發,代碼結構清晰,易於二次開發
5.Azkaban 原理架構
-
mysql 服務器
-
存儲元數據:項目名稱、項目描述、項目權限、任務狀態、SLA 規則等
-
-
AzkabanWebServer
-
對外提供 web 服務,使用戶可以通過 web 頁面管理。
-
職責包括項目管理、權限授權、任務調度、監控 executor
-
-
AzkabanExecutorServer
-
負責具體的工作流的提交、執行
-
6.Azkaban 三種部署模式
-
solo-server mode
-
該模式中 webServer 和 executorServer 運行在同一個進程中,進程名是 AzkabanSingleServer。 使用自帶的 H2 數據庫。 這種模式包含 Azkaban 的所有特性,但一般用來學習和測試。
-
-
two-server mode
-
該模式使用 MySQL 數據庫, Web Server 和 Executor Server 運行在不同的進程中
-
-
multiple-executor mode
-
該模式使用 MySQL 數據庫, Web Server 和 Executor Server 運行在不同的機器中。 且有多個 Executor Server。 該模式適用於大規模應用。
-
Azkaban 使用
1. shell command 調度
1.1 創建 job 描述文件
vi command.job
#command.job
type=command
command=echo 'hello'
1.2 將 job 資源文件打包成 zip 文件
zip command.job
1.3 通過 azkaban 的 web 管理平臺創建 project 並上傳 job 壓縮包
創建 project
上傳 zip 包
啓動執行該 job
2. job 依賴調度
2.1 創建有依賴關係的多個 job 描述
第一個 job: foo.job
# foo.job
type=command
command=echo foo
第二個 job:bar.job 依賴 foo.job
# bar.job
type=command
dependencies=foo
command=echo bar
2.2 將所有 job 資源文件打包到一個 zip 包中
2.3 在 azkaban 的 web 管理界面創建工程並上傳 zip 包
2.4 啓動工作流 flow
3. HDFS 任務調度
4. MAPREDUCE 任務調度
5. HIVE 腳本任務調度
6. 定時任務調度