[컴] Azkaban flow 작성 방법

작성법 / Azkaban / 아즈카반 플로우 / 아즈카반 잡 등록 / job / 수행 / 실행

Azkaban flow 작성 방법

여기서는 Flow 2.0 에 대한 이야기이다. ref. 4 에서 보여주는 문법이 flow 1.0 인듯 하다.(확인필요)

flow1.0 은 앞으로 deprecated 된다고 한다.[ref. 1]

다음 2개의 file 을 생성하자.

  1. flow20.project
  2. basic.flow : 이 basic 이라는 파일이름이, Azkaban Web UI 에서 보면 flow 이름이 된다.

2개의 파일 작성이 끝나고 2개의 파일을 zip 으로 묶는다. 참고로, 하나의 zip file 안에 flow 는 여러개가 존재할 수 있다.

my-test.zip +-- flow20.project
            |
            +-- basic.flow

flow20.project

flow20.project에는 아래처럼 flow 버전을 넣어주면 된다.

azkaban-flow-version: 2.0

basic.flow

nodes

nodes 라는 항목에 ’실행하고 싶은 항목들’을 넣는다. 보통 다음 항목을 넣는다.

  • name
  • type
  • config
---
config:
  failure.emails: myemail@test.com, myemail2@test.com
  success.emails: myemail@test.com
nodes:
  - name: jobA
    type: command
    config:
      command: echo "This is an echoed text."

flow 와 executor

ref. 3 을 참고하면, 하나의 flow 는 하나의 executor 에서 처리된다고 한다.

embedded flows 를 이용하면, 여러 executor 로 원하는 job 을 분배할 수 있을 듯 하다.

flow 와 shell script

  • 예제
  • shell script(.sh) 를 zip 안에 넣는다.
  • 그리고 flow 에 chmod +x 를 해준다. 그리고 그 후에 shell script 를 실행한다.
  • 명확치는 않지만, flow 로 올려놓은 zip 을 executor 의 log를 쌓는 곳에 일단 copy 해 놓고, executor 를 실행하는 듯 하다.
  • ssh 로 특정 서버에 존재하는 script 를 실행할 수도 있지만, 이렇게 하는 것은 여러 executor 를 둬서 하나의 executor 가 fail 났을 때 다른 executor 에서 실행하게 하는 특징을 이용할 수 없게 만든다. 
  • https://azkaban.github.io/azkaban/docs/latest/#command-type 에 보면, 어떻게 실행하는지에 대한 이야기가 있다. azakaban 은 java processbuilder 를 사용해서 UNIX commands 를 실행해준다. 실행시, 아즈카반이 command 를 실행하는 process 를 생성한다.(spawn off)
---
config:
  failure.emails: namh@userhabit.io
nodes:
  - name: jobChmod
    type: command
    config:
      command: chmod 755 ./a.sh
  - name: jobA
    type: command
    config:
      command: ./a.sh
    dependsOn:
     - jobChmod 

flow 실패시 option

개별로 Flow 를 실행(execute) 할 때는 ‘Failure Options’ 를 정해줄 수 있다. 그 때 옵션은 3가지를 제공한다.

  • Failure Current Running : 실패가 나면, 현재 실행되고 있는 job 만 끝내고, 더 이상 새로운 job 을 시작하지 않는다.
  • Cancel All : 실패가 나면, 모든 job 들을 kill 하고, flow 를 실패 시킨다.
  • Finish All Possible : 실패가 나도 dependency 들이 충족되는 한 계속해서 job 들을 수행한다.

schedule flow 등록 방법

job type

이 job type 을 만들어서 azkaban 을 통해 자신이 원하는 작업을 하는 것이 좋다.

job type들을 만들때 꼭 java 로 작성해야 하는 것은 아니라고 한다. 설정(configuration) 을 변경해서 새로운 job type 을 만드는 것으로도 충분할 수 있다. LinkedIn 에 pigLi type 이라는 것이 있는데, 이것은 미리 등록되고, import 된 유용한 라이브러리 jar들과 함께 제공된다. 이 방법으로 일반 사용자들은 그들의 pig script 와 그들의 udf jars(user defined functionality) 를 제공하면 된다. pig job은 pig grunt로 부터 나온 gateway machine에서 실행되는 것처럼 실행되어야 한다. 비교해 보면, 사용자가 기본적인 pig job types을 사용해야하는 경우, Azkaban job package에 필요한 모든 jar을 포함시키고, 모든 등록 및 가져 오기를 직접 수행해야하며, 이는 종종 새로운 pig/Azkaban 사용자에게 learning curve를 만들게 된다.

알림

email 설정

azkaban.properties 에서 하면 된다.

mail.sender=20191217@qq.com
mail.host=smtp.163.com
mail.port=587
mail.tls=true
mail.user=20191217@qq.com
mail.password=20191217

실패시 알림

slack

alerter.name=slack
alerter.class=com.github.pmerienne.azkaban.slack.SlackAlerter

slack.authentication.token=fjfkdlsjgklg
slack.channel=#my_noti_channel
slack.alert.on.success=true
slack.alert.on.first.error=true
slack.alert.on.error=true

Reference

  1. Creating Flows — Azkaban documentation
  2. Azkaban task scheduling - Programmer Sought
  3. Run Jobs parallely on multiple executors · Issue #1899 · azkaban/azkaban · GitHub
  4. Azkaban 3.0 Documentation

댓글 없음:

댓글 쓰기