1. 윈도우 환경에서 Airflow를 구동시키기 위해 어떤 환경설정이 필요한지 설명해주세요.
- Windows 환경에서 Apache Airflow를 설정하려면 몇 가지 사전 준비와 설정 단계가 필요하다. Airflow는 기본적으로 Unix 기반 시스템에서 잘 동작하도록 설계되었으므로, Windows에서는 몇 가지 추가 작업이 필요하다.
- [AIRFLOW] Window환경에 Airflow 설치 및 Dag import 확인(출처: https://velog.io/@newnew_daddy/AIRFLOW01)
- Window 환경에 Airflow를 설치하려면 상당히 고역이다. 엄밀히 말하자면 윈도우 로컬 환경에 설치는 어렵기 때문에 WSL의 도움을 받아 설치를 하곤하는데 Docker-Compose를 사용하면 아주 간단하게 Webserver와 Postgres DB까지 같이 한 방에 설치가 가능하다.
- Docker-Compose를 사용하여 Airflow 환경을 구축해보자.
- Docker Compose를 사용한 Airlfow 환경 구축
- Docs 참고 -> Running Airflow in Docker
- Docker Compose YAML 파일 -> Airflow YAML
- 위의 yaml 파일을 docker-compose.yaml에 저장 후 바로 실행해도 무방하지만 UI에 접속했을 때 예시 Dag들을 보여주는 AIRFLOW__CORE__LOAD_EXAMPLES 옵션을 false로 주고 설치를 해 볼 것이다.
version: '3.8'
x-airflow-common:
&airflow-common
.
.
AIRFLOW__CORE__LOAD_EXAMPLES: 'false'
- 리눅스 명령어가 먹히도록 WSL 터미널로 접속한 후 아래 과정을 따라간다.
1.설치 전 명령어 실행
> mkdir -p ./dags ./logs ./plugins ./config
> echo -e "AIRFLOW_UID=$(id -u)" > .env
2. 생성된 .env 파일의 'AIRFLOW_UID' 변경
> AIRFLOW_UID=50000
3. Database 초기화
> docker compose up airflow-init
4. 초기화 완료 후 docker-compose.yaml 파일 실행
> docker-compose up
- docker-compose up 후 약간의 시간이 지나고 docker ps로 실행중인 컨테이너 목록들을 확인해본다. 아래와 같이 6개의 컨테이너들이 모두 running 상태이면 로컬에 airflow 설치가 완료된것이다.
2. Airflow의 주요 구성요소인 DAG와 Task의 관계에 대해 설명해주세요.
- Apache Airflow에서 DAG와 Task는 워크플로우를 정의하고 실행하는 데 중요한 구성 요소이다.
- 두 개념의 관계는 마치 전체와 구성 요소의 관계와 같다.
1. DAG (Directed Acyclic Graph)
- 정의: DAG는 워크플로우의 전체적인 구조를 나타내는 유향 비순환 그래프.
- "유향"이란 각 작업이 특정 순서대로 실행되어야 함을 의미.
- "비순환"이란 작업의 흐름에 루프(순환)가 없음을 의미.
- 역할: 여러 Task를 의미 있는 순서로 연결하여, 실행할 워크플로우를 정의.
- 구성: DAG는 단순히 작업(Task)들의 실행 순서를 정의하는 틀(framework)이다. 실제로 실행되는 것은 DAG 안에 정의된 Task들이다.
2. Task
- 정의: Task는 DAG 내에서 실행되는 작업 단위.
- 예를 들어, 데이터를 다운로드하거나, 정리하거나, 업로드하는 각각의 작업이 하나의 Task.
- 역할: 실제로 수행할 작업을 정의하며, Python 함수, Bash 명령, 데이터 이동, API 호출 등 다양한 형태로 정의.
- 종류: Airflow에서 제공하는 Operator(작업 유형)를 사용하여 Task를 정의. 대표적인 Operator는 다음과 같다:
- PythonOperator: Python 코드를 실행
- BashOperator: Bash 명령 실행
- PostgresOperator: PostgreSQL 쿼리 실행
- DummyOperator: 아무 작업도 하지 않음 (흐름 제어용)
3. DAG와 Task의 관계
- DAG는 Task의 컨테이너: DAG는 Task들을 그룹화하고, 실행 순서를 결정. DAG 없이는 Task를 정의할 수 없으며, DAG의 일부로써 Task가 존재.
- 의존성 정의: Task들 간의 실행 순서를 DAG에서 설정.
- 예를 들어, Task A → Task B → Task C라는 의존성을 DAG 안에서 정의.
from airflow import DAG
from airflow.operators.dummy import DummyOperator
from datetime import datetime
# DAG 생성
with DAG(
dag_id="example_dag",
start_date=datetime(2023, 12, 1),
schedule_interval="@daily",
) as dag:
# Task 정의
task_a = DummyOperator(task_id="task_a")
task_b = DummyOperator(task_id="task_b")
task_c = DummyOperator(task_id="task_c")
# 의존성 설정
task_a >> task_b >> task_c
- 이 코드에서 DAG는 워크플로우 전체를 나타내고, Task A, B, C는 각 단계의 작업을 나타낸다.
- task_a >> task_b >> task_c는 Task 간의 의존성을 정의하며, A가 끝난 후 B가 실행되고, B가 끝난 후 C가 실행된다.
4. 요약: DAG와 Task의 핵심 관계
- DAG: Task를 조직화하는 전체 워크플로우의 설계도.
- Task: DAG의 구성 요소로서 실제 작업을 담당.
- DAG는 Task들의 실행 순서와 의존성을 제어하며, Task는 DAG 안에서 개별 작업 단위를 수행
이와 같이, DAG는 큰 그림(워크플로우 구조)을 그리고, Task는 각각의 조각(구체적 작업)을 담당하며, 둘은 긴밀히 연결되어 워크플로우를 완성한다.
'Sprint_DA01 > 위클리 페이퍼' 카테고리의 다른 글
위클리 페이퍼 #17 (2) - BigQuery (3) | 2024.12.07 |
---|---|
위클리 페이퍼 #17 (1) - 데이터 웨어하우스 (2) | 2024.12.07 |
위클리 페이퍼 #15 (2) - 엔터티, 속성, 관계 (1) | 2024.11.20 |
위클리 페이퍼 #13 - 결정 트리 / 부스팅 모델 (5) | 2024.11.17 |
위클리 페이퍼 #14 - Group by , Having / NULL (1) | 2024.11.15 |