[Airflow] Windows에 Airflow 설치

MJ·2026년 1월 19일

[0] 설치 개요

  • Docker Container 환경에 Airflow & Spark 환경을 같이 구성할 것임
  • 사내 노트북 환경에서는 SSL Certi가 없기 때문에 의존성 설치 시 핫스팟 사용
  • 목표:
    • 로컬 윈도우 환경에서 Airflow DAG 실행
    • DAG 내부에서 PySpark 기반 데이터 처리 가능
    • Docker 기반으로 환경 통제, 로컬 개발/테스트 가능하도록 구성

[1] 설치 아키텍쳐

  • 실행 방식: Docker + Astro CLI
  • Airflow Runtime: quay.io/astronomer/astro-runtime:12.6.0
  • Airflow Version: 2.10.4+astro.1
  • Spark 사용 방식:
    • Airflow 컨테이너 내부에 pyspark 설치
    • DAG Task에서 PythonOperator를 통해 Spark 로직 실행

[2] 사전 준비

2.1 필수 도구

  • Docker Desktop (Windows)
  • Python (로컬 venv용)
  • Astro CLI

2.2 Astro CLI 설치

pip install astro-cli

[3] Airflow 프로젝트 생성

astro dev init airflow-spark
cd airflow-spark

생성되는 주요 구조:

airflow-spark/
├─ dags/
├─include/
├─ Dockerfile
├─ requirements.txt

[4] Dockerfile 커스터마이징 (Java + PySpark 설치)

4.1 핵심 포인트

  • PySpark는 Java 의존성 필요
  • Airflow Runtime 이미지는 기본적으로 Java 미포함
  • USER airflow 전환 시점 주의 (없는 유저일 수 있음)

4.2 최종 Dockerfile

FROM quay.io/astronomer/astro-runtime:12.6.0

USER root

# Java 17 및 필수 도구 설치
RUN apt-get update && \
    apt-get install -y --no-install-recommends openjdk-17-jdk wget && \
    rm -rf /var/lib/apt/lists/*

# MSSQL JDBC 드라이버 (Spark 연동 대비)
RUN mkdir -p /opt/airflow/jars && \
    wget -O /opt/airflow/jars/mssql-jdbc-12.4.2.jre11.jar \
    https://repo1.maven.org/maven2/com/microsoft/sqlserver/mssql-jdbc/12.4.2.jre11/mssql-jdbc-12.4.2.jre11.jar && \
    chmod 644 /opt/airflow/jars/mssql-jdbc-12.4.2.jre11.jar

ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
ENV PATH=$PATH:$JAVA_HOME/bin

# PySpark 설치
RUN pip install --no-cache-dir pyspark

4.3 최종 docker-compose.yml 파일

version: "3.1"
services:
  scheduler:
    environment:
      - JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
      - SPARK_HOME=/home/airflow/.local/lib/python3.11/site-packages/pyspark
    volumes:
      - ./jars:/opt/airflow/jars

[5] 최종 DAG 코드 핵심 포인트

Variable 안전 처리

api_key = Variable.get(
"weather_decoding_api_key",
    default_var=os.getenv("WEATHER_DECODING_API_KEY")
)
ifnot api_key:
raise ValueError("Missing API key")

data_interval_end 사용 방식

deffetch_ultra_srt_ncst(**context):
    data_interval_end = context["data_interval_end"]

start_date는 반드시 고정값

[*] Airflow 설치 TroubleShooting

문제 1: airflow user 관련 에러

에러

unableto finduser airflow:no matching entriesin passwd file

원인

  • USER airflow가 Dockerfile에 있으나,
  • 해당 Runtime 이미지에는 airflow 유저가 존재하지 않음

해결

  • PySpark 설치는 root에서 수행
  • 명시적 USER airflow 제거
  • Runtime 기본 유저에 맡김

문제 2: Webserver health check timeout

증상

webserver healthcheck timedoutafter1m0s

로그 핵심

ERROR: You needto upgrade the database.
AttributeError: execution_date

원인

  • 기존 Postgres 볼륨에 이전 Airflow 메타DB 스키마가 남아 있음
  • 현재 Airflow 2.10.x 스키마와 불일치

해결 (로컬 개발 기준 정답)

  1. Astro 스택 종료
astro dev stop
  1. 컨테이너 및 볼륨 완전 삭제
docker ps -aq --filter"name=airflow-spark" | ForEach-Object { dockerrm -f$_ }
docker volumels --format"{{.Name}}" | findstr airflow-spark | ForEach-Object { docker volumerm$_ }
  1. 재기동
astro dev start --wait 5m

문제 3. DAG Import Error 해결

  1. 잘못된 import 경로

에러

ModuleNotFoundError: airflow.providers.standard
ModuleNotFoundError: airflow.sdk

원인

  • DAG 코드가 다른 Airflow 버전 기준으로 작성됨

수정 기준 (Airflow 2.10.x 호환)

from airflow.operators.pythonimport PythonOperator
from airflow.decoratorsimport dag, task
from airflow.datasetsimport Dataset

문제 4. DAG 실행 중 Runtime 에러 (Variable)

에러

KeyError:'Variable weather_decoding_api_key does not exist'

원인

  • Airflow Variable이 등록되지 않은 상태에서 Variable.get() 호출

해결

  • Admin → Variables
  • Key: weather_decoding_api_key
  • Value: 실제 API Key
astro dev run airflow airflow variablesset weather_decoding_api_key"<API_KEY>"

start_date=pendulum.datetime(2026,1,16, tz=local_tz)

0개의 댓글