Apache Airflow 란 무엇일까요 ?
airflow 란 AirBnB 에서 만든 workflow management tool 입니다.
workflow 는 일련의 작업의 흐름이라고 말할 수 있습니다.
예를 들어서 ETL 같은 경우는 데이터를 Extractaction -> Transformation -> Loading 하는 작업의 흐름이 있는데요.
이런 workflow 를 관리하는 툴이 바로 airflow 입니다.
여기서 관리라는 것은 워크플로우 (workflow) 를 작성, 스케줄링, 모니터링 하는 작업을 말할 수 있습니다.
이러한 airflow 는 요즘 핫한 MLOps 에서도 많이 사용되며 데이터 엔지니어 (Data Engineer) 영역에서도 많이 사용되는 SW 입니다.
Airflow 는 특징이 되는 컴포넌트들이 있으며 각 component 들 간의 아키텍처는 다음과 같습니다.
https://airflow.apache.org/docs/apache-airflow/stable/concepts/overview.html
Airflow 는 크게 아래 4가지의 구성요소로 이루어져 있습니다.
Webserver
Scheduler
Executor
Workers
또한, 아래와 같은 개념을 이용해 workflow 를 작성합니다.
DAG (Directed Acyclic Graph)
Airflow Webserver
Airflow 의 웹 서버는 Airflow 의 로그를 보여주거나 스케쥴러 (Scheduler) 에 의해 생성된 DAG 목록, Task 상태 등을 시각화해서 보여줍니다. 즉, UI 를 통해 사용자에게 시각적으로 정보를 제공해주는 요소라고 볼 수 있습니다.
Airflow Scheduler
Airflow 스케쥴러는 airflow 로 할당된 work 들을 스케쥴링 해주는 component 입니다. Scheduled 된 workflow 들의 triggering 과 실행하기 위해서 executor 에게 task 를 제공해주는 역할을 수행합니다.
Airflow Executor
Airflow Executor 는 실행중인 task 를 handling 하는 component 입니다. default 설치 시에는 scheduler 에 있는 모든 것들을 다 실행시키지만, production 수준에서의 executor 는 worker 에게 task 를 push 합니다.
Airflow Worker
Airflow worker 는 실제 task 를 실행하는 주체자라고 보면 됩니다.
Airflow Database
Airflow database 는 airflow 에 있는 DAG, Task 등의 metadata 를 저장하고 관리합니다.
DAG (Directed Acyclic Graph)
DAG 는 비순환 그래프로써 순환하는 싸이클이 없는 그래프입니다. 즉, 노드와 노드가 단방향으로 연결되어 있어 그 노드로 향하게 되면 돌아오지 않는다는 특성을 가지고 있습니다.
Airflow 에서는 이러한 DAG 를 이용해 Workflow 를 구성하여 어떤 순서로 task 를 실행시킬 것인지 dependency 를 어떻게 표현할 것인지 등을 설정합니다.
Airflow 설치 및 기본 세팅, 실행
Airflow 설치는 Python 의 pip install 을 활용하면 간단하게 설치할 수 있습니다. 본 설치 과정은 Airflow 송식 문서에 잇는 것을 그대로 따라해서 설치한 과정이니 더 자세한 것과 궁금한 것은 공식 문서를 참고하시면 될 것 같습니다.
Airflow 를 설치하기에 앞서 가장 먼저 경로와 환경 변수 설정을 세팅하고 가야합니다. Airflow 공식 문서에도 나와 있듯이 Airflow 는 기본 경로를 '~/airflow' 로 권장하고 있습니다. 즉, 사용자 계정 path 를 선호하고 있습니다.
또한, Airflow 버전을 어떠한 것으로 설치할 것인지, Python 버전은 무엇인지 등을 세팅하고 Airflow 를 설치합니다.
export AIRFLOW_HOME=~/airflow
AIRFLOW_VERSION=2.2.3
PYTHON_VERSION="$(python --version | cut -d " " -f 2 | cut -d "." -f 1-2)"
...
Airflow 를 본격적으로 실행하기 전 몇 가지 세팅이 필요합니다. 가장 먼저 DB 초기화가 필요합니다.
DB 는 Airflow 의 DAG 과 Task 등을 관리하기 때문에 세팅이 필요합니다.
airflow db init
airflow.cfg
airflow 의 환경설정 파일
airflow.db
DB 관련된 정보를 담고 있음
logs
airflow 의 각종 로그를 관리
dags
airflow 에서 dag 을 관리하는 디렉토리
다음으로 airflow 를 관리할 사용자 계정을 하나 만들어줍니다.
airflow users create \
--username {USERNAME} \
--firstname {FIRSTNAME} \
--lastname {LASTNAME} \
--role Admin \
--email {EMAIL}
이 때 마지막 비밀번호를 입력하라는 것이 나오니 비밀번홀ㄹ 잊지 않을 수 있도록 설정해줍니다.
여기까지 진행하였으면 기본적인 세팅을 끝났습니다. 이제 airflow webserver 를 실행시켜서 airflow web ui 를 확인할 수 있습니다.
airflow webserver --port 8080
airflow.cfg 파일을 보면 dags_folder 라는 설정값이 있습니다. 해당 경로에 있는 dag 정보를 이용해서 airflow 는 dags 를 표시하고 관리합니다.
따라서 dags 디렉토리로 들어간 다음 파일 하나를 생성해줍니다. airflow dag 은 python 코드를 기반으로 작성되기 때문에 python 파일을 생성합니다.
Airflow Operator
Airflow 는 Operator 를 이용해 Task 를 정의
Python Operator, Bash Operator, Dummy Operator, Branch python operator 등 다양한 operator 가 존재
각 Operator 마다 수행하는 주체, 목적 등이 다름
Task 연결 (task relationship)
각 task 는 ">>", "<<", "[]" 를 이용하여 dag 그래프를 그릴 수 있음
first_task.set_downstream (second_task), third_task.set_upstream (second_task) 와 같은 형태로도 가능
ex) t1 >> [t2, t3]
args 설정 및 DAG 객체 생성
위처럼 DAG 을 구성한 후 이제 airflow scheduler 를 실행시켜 줍니다. 스케줄러는 airflow 작업들을 스케줄링 해주는 component 이기 때문에 이를 실행시켜줘야 각종 관리를 할 수 있습니다.
Airflow command 명령어 살펴보기
Airflow 에는 각종 command line 명령어를 제공해줍니다.
airflow tasks list {dag id}
airflow 의 dag 안에는 여러 task 로 구성되어져 있습니다. airflow tasks list {dag id} 는 해당 dag 에 있는 task 들의 리스트를 확인해주는 명령어입니다.
airflow tasks list {dag id} --tree
--tree 옵션을 추가하면 tree 형태로 task 를 확인할 수 있습니다.
airflow dags list
airflow 에 등록된 dag list 를 확인하려면 airflow dags list 명령어를 입력하면 됩니다. 해당 명령어를 이용해 현재 등록된 dag 들의 리스트들을 확인할 수 있습니다.
airflow dags test {dag_id} {date}
command line 으로 dag 을 test 형태로 실행해보는 명령어입니다.