: Apache Airflow 는 배치 지향 워크플로우를 개발, 스케줄링, 모니터링하기 위한 오픈소스 플랫폼이다. Airflow 의 웹 인터페이스는 워크플로우 상태를 관리하는 데 도움이 된다. Airflow는 단일 프로세스에서 대규모 워크플로우를 지원하는 분산 설정까지 다양한 방식으로 배포할 수 있다. 이 때, Airflow 의 워크플로우 정의는 '파이썬'을 이용한다.
: Airflow 가 배치 지향 워크 플로우를 위한 오픈소스 플랫폼이라고 하였다. 그렇다면, 하나의 큰 기능을 위한 배치 스크립트를 crontab 에 등록하여 사용하는 방식 같이 일반적인 모놀리식 스크립트 배치 구조와 Airflow 배치는 어떤 차이점이 있을까?
: 한 시간 마다 날씨 데이터를 수집하여, 전처리 한 데이터를 데이터베이스에 넣는 데이터 파이프라인을 예시로 각각 어떻게 동작하는지 비교해보겠다.
개발 및 스케줄: 위 3단계를 하나의 스크립트로 개발하여 한 시간 마다 스크립트가 수행할 수 있도록 crontab 스케줄에 등록하거나 반복문을 사용하는 등의 별도 트리거를 이용한다.
단점(특징)
: 모놀리식 스크립트를 이용한 배치 관리가 반드시 단점만 있는 것은 아니지만, 일반적으로 Airflow 를 활용할 때 배치 스케줄링이 더 정교하고 편리해지는 것은 사실이다. 위에 언급 된 내용 이외에도 Airflow 의 장점, 단점들이 존재하지만 책 인트로에서 언급 되는 내용을 요약하면 위와 같이 정리해 볼 수 있을 것 같다.
: 아래 이미지는 몇 가지 워크플로 관리자와 주요 특성에 대한 비교 표이다. "Airflow 가 가장 좋다" 라기보다는 워크플로우를 정의할 때 파이썬을 사용하기 때문에 조금 더 유연히 개발 가능하며, 스케줄 관리, 백필, 사용자 인터페이스를 제공하기 때문에 별도 시스템을 구축할 필요가 없고, 플랫폼 설치에도 별다른 제약이 없으면서 수평확장 가능하기 때문에 배치 지향 워크플로우를 선택할 때 큰 장점이 있는 것은 분명하다.
: DAG란 말 그대로 '비순환 그래프' 개념이다. Airflow 에서는 하나의 배치로 DAG 라는 개념을 사용하고 있으며, 아래 이미지 처럼 Task 수행 순서가 단일 방향으로 흐르도록 개발하여 비순환 그래프 조건에 만족 해야한다. 이 때, Task 는 이미지에서 하나의 네모박스를 의미한다.(예: ingest, analyze...)
: Task 란 배치 작업 내에서 각 작업 단계를 의미한다. Airflow 의 Task 수행 방향은 WEB UI 에서 위 이미지와 같이 화살표로 확인할 수 있다.
: Airflow 스케줄러는 모든 작업과 DAG를 모니터링한 다음 종속성이 완료되면 작업 인스턴스를 트리거 한다. 스케줄러는 지정된 DAG 파일 경로의 모든 DAG를 모니터링하고 동기화 상태를 유지하는 프로세스를 실행 한다. 기본적으로 스케줄러는 분당 한 번 DAG 구문 분석 결과를 수집하고 활성 작업을 트리거 할 수 있는지 확인한다.
: 예약 된 Task 를 선택하고 실행한다.
: 스케줄러에서 분석한 DAG 를 시각화하고 DAG 실행과 결과(상태)를 확인할 수 있는 주요 인터페이스를 제공한다.
그리고 위 그림과 같이 Task 가 실행 대기열에 추가 되면 Airflow Worker는 Task 를 실행하고 실행 과정의 모든 결과를 Airflow 메타스토어(DB)에 저장하여 모든 Task 의 상태 값을 WEB 서버(웹 인터페이스)에서 확인할 수 있다.
: Airflow 책을 학습하는 방법 을 참고하여, Chapter01 학습을 위한 Docker compose 명령을 수행해준다.
$ cd data-pipelines-with-apache-airflow/chapter01/
$ docker-compose up -d
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ebd63bcc4bce apache/airflow:2.0.0-python3.8 "/usr/bin/dumb-init …" 5 minutes ago Up 5 minutes 0.0.0.0:8080->8080/tcp chapter01-webserver-1
b4723af03894 apache/airflow:2.0.0-python3.8 "/bin/bash -c 'airfl…" 5 minutes ago Exited (0) 3 minutes ago chapter01-init-1
4c6388d85919 apache/airflow:2.0.0-python3.8 "/usr/bin/dumb-init …" 5 minutes ago Up 4 minutes 8080/tcp chapter01-scheduler-1
4249b88066e6 postgres:12-alpine "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 0.0.0.0:5432->5432/tcp chapter01-postgres-1
$ open http://localhost:8080 # 또는 웹브라우저에서 주소로 접근 하면 된다.
: ID/PW 모두 admin 이 기본 값이다.
: Airlfow 메인 페이지에서 아래 이미지와 같이 사용자가 등록한 DAG 목록과 해당 DAG의 실행 주기, 최근 실행 상태 등을 확인할 수 있다.
: 특정 DAG 를 클릭한 후 Graph View 탭을 확인해보면 아래 이미지 처럼 해당 DAG 의 각 Task 의 수행 방향과 실행 상태를 모니터링 할 수 있다.