Airflow 살펴보기 1

Sung Dong Kim·2022년 1월 12일
0

Batch process

데이터 엔지니어링이나 ML모델을 서비스하다보면 주기적으로 어떤 작업을 실행하고 싶을 때가 많다고 한다.

예)

  • 월요일 아침마다 쌓인 데이터로 자동으로 보고서를 생성해야할 때
  • 한 달마다 ML모델을 주기적으로 재학습 시킬 때(continous training)
  • Batch serving을 해야 할 때(<=> Online serving)

이렇게 주기적으로 실행되는 프로세스를 Batch process라고 한다.

리눅스 Crontab

사실 기본 리눅스에는 Batch Process를 할 수 있게 해주는 crontab이라는 것이 있다.

리눅스 환경에서

$ crontab -e

를 입력하면 에디터가 하나 켜지는데 에디터 안에서 크론 표현식과 실행할 파일을 입력하면 주기적으로 실행이 된다.

크론 표현식은 주기를 정의하는 일종의 표현식인데 5가지 구성요소로 되어 있다.
* * * * *
순서대로 분, 시, 일, 달, 요일이며
위의 별 다섯개는 매 분마다를 의미하고
0 0 1 * *
위 표현식은 매 월 1일 0시 0분마다를 뜻한다.

이 외에도 * , - / 를 사용해 더 다양한 표현식을 만들 수 있다.

매번 암기할 필요는 없고 도움을 주는 사이트를 잘 활용하면 좋다.
https://crontab.guru/

서버는 일반적으로 리눅스를 사용하고 있고 크론탭은 이 리눅스에 기본적으로 설치되어 있어 매우 간편하다는 장점이 있다.

Crontab의 한계

간단한 batch processing을 할 때에는 크론탭을 활용하면 좋지만 복잡한 작업을 하기엔 단점이 좀 있다.

  • 실패 시 재실행, 알람을 지원하지 않음
  • 과거 실행 로그를 보기가 어려움
  • 여러 파일을 실행해야 하거나 복잡한 파이프라인을 만들기 힘들다.

이러한 문제점을 해결하기 위해 많은 스케줄링 전용 도구들이 등장하였으며 거의 현재 거의 표준으로 사용되는 Apache Airflow에 대해 살펴보자.

Airflow

개요

Airflow는 에어비엔비에서 만든 스케줄링 도구이며, 확장성이 좋아 거의 모든 기능을 제공하여 스케줄링 도구의 표준으로 자리잡았다.
뒤에도 나오겠지만 실무에서 생길 수 있는 다양한 사례에 대한 추상화(Operator)를 해 놓았다.
(대신 좀 무겁다고 한다.)

Airflow는 파이썬으로 스케줄링, 파이프라인을 작성할 수 있고 web ui도 제공한다.

파이프라인을 *DAG(순환하지 않는 유향 그래프) 단위로 관리하여 여러 작업을 순차적으로, 의존성을 고려해 관리할 수 있고, 시각화도 용이하다.

설치

우선 Airflow를 위한 가상환경을 하나 만든다.

$ pyenv virtualenv 3.8.10 airflow-env

$ pyenv activate airflow-env

$ pyenv local airflow-env
# local을 지정하면 해당 디렉토리로 들어오면 자동으로 가상환경을 사용하고 나가면 꺼짐

pip로 설치
충돌이 별로 없는 2.2.0 버전을 권장하신다.

$ sudo pip install apache-airflow==2.2.0

airflow를 설치하다 보면 의존성 경고가 몇 개 나온다.

저 중 jsonschema는 4.0.0 버전 이상을 요구하는데 막상 4.0.0, 버전을 설치하면 아래와 같은 에러가 뜬다.

flask-appbuilder 3.4.3 requires jsonschema<4,>=3.0.1, but you have jsonschema 4.0.0 which is incompatible.
apache-airflow 2.2.3 requires jsonschema~=3.0, but you have jsonschema 4.0.0 which is incompatible.

두 버전 다 나중에 airflow를 실행해 보니 openapi-schema-validator를 맞춰주는 방향으로(4.0.0 버전 이상)
설치해야 에러가 나지 않았다.


설정

설치가 완료되면 Airflow 기본 디렉토리 경로 환경변수를 설정해주어야 한다.

$ export AIRFLOW_HOME=.

다음으로 airflow가 사용할 db를 초기화하고 계정을 만들어준다.

$ airflow db init
$ airflow users create --username admin --password mypassword --firstname sungdong --lastname kim --role Admin --email ththth663@gmail.com

여기까지 하면 Airflow Web ui를 사용할 수 있다.

$ airflow webserver

기본 포트는 8080을 사용한다.

사진에선 찍히지 않았지만 스케줄러가 실행중이 아니라는 에러가 상단에 있을 것이다.
다른 터미널을 켜 스케줄러를 실행하자.

$ airflow scheduler

초기에는 예시 DAG들밖에 없다.

다음 글에서 간단한 DAG를 만들어 보겠다.

profile
notion으로 이사갔어요

0개의 댓글