::: IT인터넷 :::

AirFlow 소개와 구조

곰탱이푸우 2022. 3. 10. 08:20
데이터 과학 분야에서 ETL 자동화 파이프라인을 구성하는데 사용되는 AirFlow에 대해 알아본다.
 

AirFlow 소개

AirFlow는 Airbnb에서 시작되어 현재 아파치 재단에서 관리 중인 오픈소스 프로젝트이다.
 
Apache에서 관리하기 때문에 Apache 라이선스를 따른다.
Apache 라이선스도 BSD, MIT와 같이 코드 수정을 해도 공개 여부는 선택 가능하다. (할 일이 있을까 싶지만..)
단, 코드 수정 후 배포할 때 Apache 라이선스 고지가 포함되어야 한다.
 
 
AirFlow는 Workflow를 정의하고 실행 가능한 플랫폼으로, 반복 된 작업을 자동화하기 위해 사용한다.
EDA (Event Driven Architecture)로서 각 작업들은 DAG(Directed Acyclic Graph)를 통해 구조화 된다.
DAG에 연결 된 화살표 방향 순서대로 작업을 실행하고, 분기 실행과 병렬 실행이 가능하다.

 

전체적인 소개는 아래 문서를 참고한다.
예를 들어 아래와 같은 DAG를 구성하면 ingest 부터 마지막 report 까지 순차적으로 실행한다.
중간에 check_integrity 같은 분기 구문이 존재할 수 있고, 처리 결과에 따라 분기해서 나머지 부분을 처리 할 수 있다.
 
기존의 개발 방식은 위의 DAG에 있는 모든 작업들을 하나의 어플리케이션에 구현했다.
각 단위별 기능 구현은 물론, 스케줄링과 분기 조건까지 모두 어플리케이션에 포함되었다.
분기 조건이 바뀌거나 태스크를 추가하거나 삭제해야 하는 경우 전체 어플리케이션을 수정하고 배포해야 하는 불편함이 존재했다.
 
AirFlow의 경우 각 작업들을 독립 된 단위로 나눠서 개발하고 실행 순서를 조정하는 방법으로 모듈화가 가능하다.
어플리케이션 개발은 수행할 작업을 중심으로 진행하면 된다.
AirFlow에서는 실행할 순서에 따라 DAG에 배치하고 실행 주기와 분기 조건을 반영하면 된다.
보다 간단한 개발과 운영이 가능하게 된다.
 
AirFlow를 활용하는 대표적인 사례가 데이터 과학 (인공지능)의 ETL (Extract Transformation Load)이다.
ETL은 데이터를 추출하고 가공하여 적재 (저장)하는 과정을 파이프라인으로 구축하고 주기적으로 실행한다.
AirFlow는 이러한 과정을 구현하기 적합하다.
데이터의 추출, 가공, 적재 기능을 나눠서 개발하고, AirFlow는 이 작업들을 연결하여 파이프라인으로 배치하면 된다.
 
AirFlow는 일정 시간 단위마다 주기적으로 실행하는 기능을 포함한다.
또한 BackFill이라고 해서 과거 특정 시점부터 현재까지 몰아서 작업을 처리하는 것도 가능하다.
생각보다 굉장히 효율적이고 강력한 기능이다.
 
주기적으로 실행하는 것은 Linux의 CronTab과 유사하다.
그러나 CronTab은 하나의 어플리케이션만 지정 가능하고, 각 태스크 별로 연결이 불가능하다.
AirFlow는 복잡한 작업을 쉽게 구성 할 수 있고, 각 태스크 별로 연결할 수 있어 전체 파이프라인 구성에 적합하다.
 
 

AirFlow 구조

AirFlow는 다음과 같은 구조를 가지고 있다.
  • Scheduler - AirFlow의 DAG와 작업들을 모니터링하고 실행 순서와 상태 관리
  • Worker - AirFlow의 작업을 실행하는 공간
  • Metadata Database - AirFlow에서 실행할 작업에 관한 정보들을 저장
  • Webserver - AirFlow의 User Interface 제공
  • DAG Directory - AirFlow에서 실행할 작업들을 파이프라인 형태로 저장

 

즉, AirFlow는 Scheduler가 DAG Directory의 작업을 가져와서 Worker에서 실행하는 형태라고 할 수 있다.
 
Docker를 사용하려는 경우 docker-compose로 6개의 컨테이너를 한 번에 생성해야 한다.
  • AirFlow 이미지가 각각 Scheduler, Worker, Webserver, flower 컨테이너로 실행되어야 한다.
  • 추가로 PostgreSQL과 redis  컨테이너도 필요하다.
  • PostgreSQL은 AirFlow의 설정 정보, DAG과 작업 들의 메타 정보등을 저장한다.
  • redis는 메시지 브로커로서 Scheduler에서 Worker로 메시지를 전달하는 역할을 수행한다.
 

 

다행히 Apache 공식 사이트와 Bitnami에서 docker-compose로 설정할 수 있는 예제를 제공한다.
Apache  공식 사이트와 Bitnami에서 가이드 하는 방법을 각각 테스트해보고 적합한 방법을 선택한다.
 
Docker 이미지를 사용하여 설정하는 방법은 다음 포스팅을 참고한다.