分散式任務調度框架 Azkaban —— Flow 1.0 的使用

  • 2019 年 10 月 3 日
  • 筆記

一、簡介

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 開源項目大數據入門指南