1. 程式人生 > 實用技巧 >Azkaban(二)【WorkFlow案例實操】

Azkaban(二)【WorkFlow案例實操】

目錄

1.使用步驟

1)建立.project檔案: azkaban-flow-version:2.0
2)建立.flow檔案
3)壓縮成.zip檔案,上傳
注意:flow檔案是yaml格式
大小寫敏感
通過縮排來表達層次,嚴禁使用\t
屬性名:後面跟一個空格

2.案例:

1.hello word

nodes:
    - name: Job名稱
      type: command<job型別[command/javaprocess/flow]>
      config:
        command: echo "...."/sh xx.sh

2.作業依賴[dependsOn配置作業的依賴關係]

nodes:
    - name: A
      type: command
      config:
        command: echo "A"
    - name: B
      type: command
      config:
        command: echo "B"
      dependsOn:
        - A

3.內嵌工作流

nodes:
    - name: A
      type: flow #flow代表當前Job就是一個工作流
      #config:
      #  command: echo "A" 當前不會列印,因為只有type為command才會執行命令
      nodes:
        - name: B
          type: command
          config:
            command: echo "A.B"

4.全域性配置 [在開頭通過config進行配置,後續可以通過${屬性名}來引用]

config:
    屬性名1: 屬性值
    屬性名2: 屬性值
nodes:
    - name: A
      type: command
      config:
        command: echo "${屬性名1} .."

5.自動重試[retries代表重試的次數,retry.backoff代表重試的時間間隔]

nodes:
    - name: A
      type: command
      config:
        command: echo "${屬性名1} .."
        retries: 3
        retry.backoff: 5000 #毫秒

6.執行java程式

nodes:
    - name: A
      type: javaprocess
      config:
        java.class: com.atguigu.XXX
        Xmx: 1024M
        Xms: 1024M
#   type:javaprocess [代表執行java程式]
#   java.class: [執行哪個java類,類中必須要有main方法]
#   Xms: [代表啟動時的記憶體容量大小]
#   Xmx: [代表執行時的記憶體的最大容量大小]
#   一般Xms要與Xmx設定一致,防止記憶體的抖動

7.條件工作流

7.1 根據job的引數進行判斷
【在指令碼中將json字串寫到azkaban內部的變數<$JOB_OUTPUT_PROP_FILE>中,後續通過${Job名稱:屬性名}】
 在寫入$JOB_OUTPUT_PROP_FILE變數的時候,要在指令碼的最後一行寫入
nodes:
    - name: A
      type: command
      config:
        command: sh a.sh
    - name: B
      type: command
      config:
        command: echo "B"
      condition: ${A:屬性名} == "屬性值"

a.sh內容

##! /bin/bash
...
echo '{"屬性名":"屬性值"}' >> $JOB_OUTPUT_PROP_FILE
7.2 azkaban內部巨集
nodes:
    - name: A
      type: command
      config:
        command: sh a.sh
    - name: C
      type: command
      config:
        command: sh c.sh
    - name: B
      type: command
      config:
        command: echo "B"
      condition: ${A:屬性名} == "屬性值" && all_success
      dependsOn:
        - A
        - C
#all_done: 依賴任務全部完成[kill、failed、success..都代表完成]
#all_success: 依賴的任務必須全部success
#all_failed: 依賴的任務必須全部failed
#one_failed: 依賴的任務必須要求其中一個failed
#one_success: 依賴的任務必須要求其中一個success