1. 程式人生 > 其它 >Azkaban 簡介(一)

Azkaban 簡介(一)

什麼是任務排程

大資料平臺技術框架支援的開發語言多種多樣,開發人員的背景差異也很大,這就產生出很多不同型別的程式(任務)執行在大資料平臺之上,如:MapReduce、Hive、Pig、Spark、Java、Shell、Python 等。

這些任務需要不同的執行環境,並且除了定時執行,各種型別之間的任務存在依賴關係,一張簡單的任務依賴圖如下:

常見任務排程工具

  • crontab (Linux 自帶命令,使用方式簡單,適合不是非常複雜的場景,比如只按照時間來排程)
  • oozie( Hadoop 自帶的開源排程系統,使用方式比較複雜,適合大型專案場景)
  • azkaban(一個開源排程系統,使用方式比較簡單,適合中小型專案場景)
  • 企業定製開發(企業自研的排程系統,不開源)

Azkaban 是什麼

Azkaban 是由 Linkedin 公司推出的一個批量工作流任務排程器,Azkaban 使用 job 檔案建立任務之間的依賴關係,並提供 Web 介面供使用者管理和排程工作流

Azkaban 特點

Azkaban 是由 Linkedin 開源的一個批量工作流任務排程器。用於在一個工作流內以一個特定的順序執行一組工作和流程。Azkaban 定義了一種 KV 檔案格式來建立任務之間的依賴關係,並提供一個易於使用的 web 使用者介面維護和跟蹤你的工作流。
它有如下功能特點:

  • Web 使用者介面
  • 方便上傳工作流
  • 方便設定任務之間的關係
  • 排程工作流
  • 認證/授權(許可權的工作)
  • 能夠殺死並重新啟動工作流
  • 模組化和可插拔的外掛機制
  • 專案工作區
  • 工作流和任務的日誌記錄和審計

Azkaban 與 Oozie 對比

Azkaban 和 Oozie 是市面上最流行的兩種排程器。總體來說,Ooize 相比 Azkaban 是一個重量級的任務排程系統,功能全面,但部署和使用也更復雜,比較適合作為大型專案的任務排程系統。而 Azkaban 相對而言,配置和使用更為簡單,能夠滿足常見的任務排程,比較適合作為中小型專案的任務排程系統。

Azkaban 和 Oozie 詳情對比如下:

  • 功能

    兩者均可以排程 mapreduce,pig,java,指令碼工作流任務
    兩者均可以定時執行工作流任務

  • 工作流定義

    Azkaban 使用 Properties 檔案定義工作流
    Oozie 使用 XML 檔案定義工作流

  • 工作流傳參

    Azkaban 支援直接傳參

    Oozie 支援引數和 EL 表示式

  • 定時執行

    Azkaban 的定時執行任務是基於時間的
    Oozie 的定時執行任務基於時間和輸入資料

  • 資源管理

    Azkaban 有較嚴格的許可權控制,如使用者對工作流進行讀/寫/執行等操作
    Oozie 暫無嚴格的許可權控制

  • 工作流執行

    Azkaban 有兩種執行模式,分別是單機模式和叢集模式
    Oozie 作為工作流伺服器執行,支援多使用者和多工作流

  • 工作流管理

    Azkaban 支援瀏覽器以及 ajax 方式操作工作流
    Oozie 支援命令列、HTTP REST、Java API、瀏覽器操作工作流

Azkaban 執行模式及架構

Azkaban 三大核心元件
  • 關係型元資料庫(MySQL)
  • Azkaban Web Server
  • Azkaban Executor Server
Azkaban有兩種部署方式
  • solo server mode(單機模式)

    WebServer 和 ExecutorServer 在同一個程序

  • cluster server mode(叢集模式)

    WebServe r和 ExecutorServer 執行在不同程序,並用資料庫儲存定義及狀態

    • 單個Executor
    • 多個Executor

Azkaban Web Server

AzkabanWebServer 是 Azkaban 的主要管理者,負責專案管理、身份驗證、排程和監控執行,並且為使用者介面

Azkaban Executor

提交和執行工作流,記錄工作流日誌,和 Azkaban WebServer 可以在同一臺伺服器,也可部署在獨立的機器。把 Executor 單獨分開有幾個好處:

  • 在多 Executor 模式下可以方便擴充套件
  • 工作流在某一個 Executor 掛掉,可以在另一個 Executor 上重試
  • 可以滾動升級,從而不影響排程

Azkaban 元資料庫

Azkaban 任務排程步驟

  • Azkaban 新建專案
  • 在 Azkaban Web 介面建立 Project
  • 建立 job 檔案
  • 將檔案壓縮為 zip 檔案
  • 上傳 zip 檔案到 Web 介面
  • 執行排程

Azkaban 常見任務型別

執行 shell 命令
type=command
command=echo 'hello'
執行 shell 指令碼
type=command
command=sh hello.sh
執行 Spark 程式
type=command
command=/usr/install/spark/bin/spark-submit --class com.test.AzkabanTest test-1.0-SNAPSHOT.jar
hive 命令\指令碼
type=command
command=beeline -u jdbc:hive2://localhost:10000 -n hive -p hive -f 'test.sql'
執行 MapReduce 程式
type=command
command=${HADOOP_HOME}bin/hadoop jar hadoop-mapreduce-examples-2.8.0.jar
wordcount ${input} ${output}