초기 설정
airflow-docker 디렉터리 만들어주고
(base) nayoungkim@nayoungkim airflow-docker % curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.9.0/docker-compose.yaml'
(base) nayoungkim@nayoungkim airflow-docker % echo -e "AIRFLOW_UID=$(id -u)" > .env
(base) nayoungkim@nayoungkim airflow-docker % docker compose up airflow-init
(base) nayoungkim@nayoungkim airflow-docker % chmod +x airflow.sh
(base) nayoungkim@nayoungkim airflow-docker % ls
airflow.sh dags logs
config docker-compose.yaml plugins
(base) nayoungkim@nayoungkim airflow-docker % ./airflow.sh airflow info
(base) nayoungkim@nayoungkim airflow-docker % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7d727ae3bf21 postgres:13 "docker-entrypoint.s…" 9 minutes ago Up 3 minutes (healthy) 5432/tcp airflow-docker-postgres-1
fc876aca6630 redis:latest "docker-entrypoint.s…" 9 minutes ago Up 3 minutes (healthy) 6379/tcp airflow-docker-redis-1
(base) nayoungkim@nayoungkim airflow-docker % vi docker-compose.yaml
(base) nayoungkim@nayoungkim airflow-docker % docker compose up

docker container 안으로 들어가는 명령어
(base) nayoungkim@nayoungkim airflow-docker % docker exec -it airflow-docker-airflow-webserver-1 /bin/bash
Airflow webserver 실행
http://localhost:8080/home 접속

나는 default 사용자로 로그인했다.
username / password : airflow

예제 dag들과 나의 dag를 확인 할 수 있다.
나는 count number 예제 dag를 돌려봤는데,

성공적으로 돌아간 것을 확인할 수 있었다.
사용한 dag 파일은 다음과 같다.
count.py
from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.bash import BashOperator
default_args = {
"owner": "airflow",
"depends_on_past": False,
"email": ["airflow@example.com"],
"email_on_failure": False,
"email_on_retry": False,
"retries": 1,
"retry_delay": timedelta(minutes=5),
}
with DAG(
"number_counting_dag",
default_args=default_args,
description="A simple DAG to count numbers",
schedule_interval=timedelta(days=1),
start_date=datetime(2024, 2, 12),
catchup=False,
tags=["example"],
) as dag:
count_10 = BashOperator(
task_id="count_10",
bash_command="for i in {1..10}; do echo $i; sleep 1; done",
)
count_20 = BashOperator(
task_id="count_20",
bash_command="for i in {11..20}; do echo $i; sleep 1; done",
)
count_30 = BashOperator(
task_id="count_30",
bash_command="for i in {21..30}; do echo $i; sleep 1; done",
)
count_10 >> count_20 >> count_30
Airflow에서 pip 패키지 설정하기
docker-compose.yaml 수정
image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.9.0}
build:
dockerfile: Dockerfile
Dockerfile 생성
FROM apache/airflow:2.9.0
# 필요한 Python 라이브러리 설치
RUN pip install xmltodict
나의 경우에는 xmltodict 라이브러리가 필요해서 설정해 주었다.
Airflow DAG에서 csv 파일 활용하기
외부 볼륨에 저장하여 Docker 컨테이너에서 접근할 수 있게 할 수 있습니다. 일반적으로 Airflow를 Docker로 실행할 때는 데이터 파일을 컨테이너 외부에 저장하고, 이를 볼륨 마운트를 통해 접근하는 방식을 많이 사용합니다.
docker-compose.yaml 파일 수정
services:
airflow-webserver:
volumes:
- ./data:/opt/airflow/data # 호스트의 `data` 디렉토리를 컨테이너의 `/opt/airflow/data`에 마운트
docker compose 재실행
docker-compose up -d --build
참고한 블로그
'Data Engineering > Airflow' 카테고리의 다른 글
[Airflow] Airflow와 S3, MySQL 연결 (0) | 2024.07.19 |
---|