分散式任務排程框架 Azkaban —— Flow 1.0 的使用
一、簡介
Azkaban 主要通過介面上傳配置檔案來進行任務的排程。它有兩個重要的概念:
- Job: 你需要執行的排程任務;
- Flow:一個獲取多個 Job 及它們之間的依賴關係所組成的圖表叫做 Flow。
目前 Azkaban 3.x 同時支援 Flow 1.0 和 Flow 2.0,本文主要講解 Flow 1.0 的使用,下一篇文章會講解 Flow 2.0 的使用。
二、基本任務排程
2.1 新建專案
在 Azkaban 主介面可以建立對應的專案:
2.2 任務配置
新建任務配置檔案 Hello-Azkaban.job
,內容如下。這裡的任務很簡單,就是輸出一句 'Hello Azkaban!'
#command.job
type=command
command=echo 'Hello Azkaban!'
2.3 打包上傳
將 Hello-Azkaban.job
打包為 zip
壓縮檔案:
通過 Web UI 介面上傳:
上傳成功後可以看到對應的 Flows:
2.4 執行任務
點選頁面上的 Execute Flow
執行任務:
2.5 執行結果
點選 detail
可以檢視到任務的執行日誌:
三、多工排程
3.1 依賴配置
這裡假設我們有五個任務(TaskA——TaskE),D 任務需要在 A,B,C 任務執行完成後才能執行,而 E 任務則需要在 D 任務執行完成後才能執行,這種情況下需要使用 dependencies
Task-A.job :
type=command
command=echo 'Task A'
Task-B.job :
type=command
command=echo 'Task B'
Task-C.job :
type=command
command=echo 'Task C'
Task-D.job :
type=command
command=echo 'Task D'
dependencies=Task-A,Task-B,Task-C
Task-E.job :
type=command command=echo 'Task E' dependencies=Task-D
3.2 壓縮上傳
壓縮後進行上傳,這裡需要注意的是一個 Project 只能接收一個壓縮包,這裡我還沿用上面的 Project,預設後面的壓縮包會覆蓋前面的壓縮包:
3.3 依賴關係
多個任務存在依賴時,預設採用最後一個任務的檔名作為 Flow 的名稱,其依賴關係如圖:
3.4 執行結果
從這個案例可以看出,Flow1.0 無法通過一個 job 檔案來完成多個任務的配置,但是 Flow 2.0 就很好的解決了這個問題。
四、排程HDFS作業
步驟與上面的步驟一致,這裡以檢視 HDFS 上的檔案列表為例。命令建議採用完整路徑,配置檔案如下:
type=command
command=/usr/app/hadoop-2.6.0-cdh5.15.2/bin/hadoop fs -ls /
執行結果:
五、排程MR作業
MR 作業配置:
type=command
command=/usr/app/hadoop-2.6.0-cdh5.15.2/bin/hadoop jar /usr/app/hadoop-2.6.0-cdh5.15.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.15.2.jar pi 3 3
執行結果:
六、排程Hive作業
作業配置:
type=command
command=/usr/app/hive-1.1.0-cdh5.15.2/bin/hive -f 'test.sql'
其中 test.sql
內容如下,建立一張僱員表,然後檢視其結構:
CREATE DATABASE IF NOT EXISTS hive;
use hive;
drop table if exists emp;
CREATE TABLE emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
-- 檢視 emp 表的資訊
desc emp;
打包的時候將 job
檔案與 sql
檔案一併進行打包:
執行結果如下:
七、線上修改作業配置
在測試時,我們可能需要頻繁修改配置,如果每次修改都要重新打包上傳,這會比較麻煩。所以 Azkaban 支援配置的線上修改,點選需要修改的 Flow,就可以進入詳情頁面:
在詳情頁面點選 Eidt
按鈕可以進入編輯頁面:
在編輯頁面可以新增配置或者修改配置:
附:可能出現的問題
如果出現以下異常,多半是因為執行主機記憶體不足,Azkaban 要求執行主機的可用記憶體必須大於 3G 才能執行任務:
Cannot request memory (Xms 0 kb, Xmx 0 kb) from system for job
如果你的執行主機沒辦法增大記憶體,那麼可以通過修改 plugins/jobtypes/
目錄下的 commonprivate.properties
檔案來關閉記憶體檢查,配置如下:
memCheck.enabled=false
更多大資料系列文章可以參見 GitHub 開源專案: 大資料入門指南