[Airflow] Apache 에어플로우 (Airflow) 시작하기

nooyji·2022년 6월 29일
0

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 송식 문서에 잇는 것을 그대로 따라해서 설치한 과정이니 더 자세한 것과 궁금한 것은 공식 문서를 참고하시면 될 것 같습니다.

  1. 경로 및 환경 변수 설정

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)"

...

  1. Airflow 실행 전 세팅

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}

이 때 마지막 비밀번호를 입력하라는 것이 나오니 비밀번홀ㄹ 잊지 않을 수 있도록 설정해줍니다.

  1. Airflow web server 실행

여기까지 진행하였으면 기본적인 세팅을 끝났습니다. 이제 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 객체 생성

  • default_args
    DAG 을 구성할 때 필요한 default argument 를 세팅
  • DAG 객체 생성
    DAG 이름과 schedule interval 등을 세팅
    실제 dag 을 수행하는 작업을 명시
    operator, task 연결 등을 이 안에서 수행

위처럼 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 형태로 실행해보는 명령어입니다.

원문 : https://lsjsj92.tistory.com/631

0개의 댓글