1. 程式人生 > >Hadoop之Azkaban詳解

Hadoop之Azkaban詳解

工作流排程器azkaban
1 為什麼需要工作流排程系統
  1)一個完整的資料分析系統通常都是由大量任務單元組成:shell指令碼程式,java程式,mapreduce程式、hive指令碼等
  2)各任務單元之間存在時間先後及前後依賴關係
  3)為了很好地組織起這樣的複雜執行計劃,需要一個工作流排程系統來排程執行;

  例如,我們可能有這樣一個需求,某個業務系統每天產生20G原始資料,我們每天都要對其進行處理,處理步驟如下所示:
    1、 通過Hadoop先將原始資料同步到HDFS上;
    2、 藉助MapReduce計算框架對原始資料進行轉換,生成的資料以分割槽表的形式儲存到多張Hive表中;
    3、 需要對Hive中多個表的資料進行JOIN處理,得到一個明細資料Hive大表;
    4、 將明細資料進行復雜的統計分析,得到結果報表資訊;
    5、 需要將統計分析得到的結果資料同步到業務系統中,供業務呼叫使用。


2 工作流排程實現方式
  簡單的任務排程:直接使用linux的crontab來定義;
  複雜的任務排程:開發排程平臺
  或使用現成的開源排程系統,比如ooize、azkaban等


3 常見工作流排程系統
  市面上目前有許多工作流排程器
  在hadoop領域,常見的工作流排程器有Oozie, Azkaban,Cascading,Hamake等

4 Azkaban與Oozie對比
  #功能
    兩者均可以排程mapreduce,pig,java,指令碼工作流任務
    兩者均可以定時執行工作流任務
  #工作流定義
    Azkaban使用Properties檔案定義工作流
    Oozie使用XML檔案定義工作流
  #工作流傳參
    Azkaban支援直接傳參,例如${input}
    Oozie支援引數和EL表示式,例如${fs:dirSize(myInputDir)}
  #定時執行
    Azkaban的定時執行任務是基於時間的
    Oozie的定時執行任務基於時間和輸入資料
  #資源管理
    Azkaban有較嚴格的許可權控制,如使用者對工作流進行讀/寫/執行等操作
    Oozie暫無嚴格的許可權控制
  #工作流執行
    Azkaban有兩種執行模式,分別是solo server mode(executor server和web server部署在同一臺節點)和multi server mode(executor server和web server可以部署在不同節點)
    Oozie作為工作流伺服器執行,支援多使用者和多工作流
  #工作流管理
    Azkaban支援瀏覽器以及ajax方式操作工作流
    Oozie支援命令列、HTTP REST、Java API、瀏覽器操作工作流

5 Azkaban介紹


  Azkaban是由Linkedin開源的一個批量工作流任務排程器。用於在一個工作流內以一個特定的順序執行一組工作
  和流程。Azkaban定義了一種KV檔案格式來建立任務之間的依賴關係,並提供一個易於使用的web使用者介面
  維護和跟蹤你的工作流。
  它有如下功能特點:
    #Web使用者介面
    #方便上傳工作流
    #方便設定任務之間的關係
    #排程工作流
    #認證/授權(許可權的工作)
    #能夠殺死並重新啟動工作流
    #模組化和可插拔的外掛機制
    #專案工作區
    #工作流和任務的日誌記錄和審計

6 azkaban實戰
  Azkaba內建的任務型別支援command、java
  Command型別單一job示例
  1、建立job描述檔案
    vi command.job
      #command.job
      type=command
      command=echo 'hello'
  2、將job資原始檔打包成zip檔案
    zip command.job
  3、通過azkaban的web管理平臺建立project並上傳job壓縮包
    首先建立project
    上傳zip包
  4、啟動執行該job

  Command型別多job工作流flow
    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、將所有job資原始檔打到一個zip包中
    3、在azkaban的web管理介面建立工程並上傳zip包
    4、啟動工作流flow

  HDFS操作任務
    1、建立job描述檔案
      # fs.job
      type=command
      command=/home/hadoop/apps/hadoop-2.6.1/bin/hadoop fs -mkdir /azaz
    2、將job資原始檔打包成zip檔案
    3、通過azkaban的web管理平臺建立project並上傳job壓縮包
    4、啟動執行該job

  MAPREDUCE任務
    Mr任務依然可以使用command的job型別來執行
    1、建立job描述檔案,及mr程式jar包(示例中直接使用hadoop自帶的example jar)
      # mrwc.job
      type=command
      command=/home/hadoop/apps/hadoop-2.6.1/bin/hadoop jar hadoop-mapreduce-examples-2.6.1.jar
      wordcount /wordcount/input /wordcount/azout
    2、將所有job資原始檔打到一個zip包中
    3、在azkaban的web管理介面建立工程並上傳zip包
    4、啟動job

  HIVE指令碼任務
    1、建立job描述檔案和hive指令碼
    Hive指令碼: test.sql
      use default;
      drop table aztest;
      create table aztest(id int,name string) row format delimited fields terminated by ',';
      load data inpath '/aztest/hiveinput' into table aztest;
      create table azres as select * from aztest;
      insert overwrite directory '/aztest/hiveoutput' select count(1) from aztest;

    Job描述檔案:hivef.job
      # hivef.job
      type=command
      command=/home/hadoop/apps/hive/bin/hive -f 'test.sql'
    2、將所有job資原始檔打到一個zip包中
    3、在azkaban的web管理介面建立工程並上傳zip包
    4、啟動job