데이터 노트

[Airflow/설치] Docker로 Airflow 설치 본문

Data Engineering/Airflow

[Airflow/설치] Docker로 Airflow 설치

돌돌찐 2024. 5. 29. 18:30

사용할 Airflow 버전 : 2.6.0

실행 환경 : Mac


 

설치

1. docker-compose.yaml 파일 다운로드

curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.6.0/docker-compose.yaml'

 

yaml 파일이 생긴 걸 확인할 수 있다.

 

포함된 내용은 엄청 길어서 그 중 확인이 필요한 서비스 목록 및 내용만 확인해보았다.

  • airflow-scheduler : 모든 task와 DAG를 모니터링
  • airflow-webserver : 에어플로우 웹 서버. http://localhost:8080
  • airflow-worker : 스케줄러로부터 부여된 테스크들을 실행하기 위한 워커
  • airflow-init : 서비스 이니셜라이제이션
  • postgres(DB) : 데이터 베이스
  • redis : 스케줄러에서 워커로 메시지를 보내는 브로커
    * 서비스는 Celery Executor로 실행됨
  • airflow 컨테이너 내부의 마운트되는 디렉토리 경로
volumes:
    - ${AIRFLOW_PROJ_DIR:-.}/dags:/opt/airflow/dags
    - ${AIRFLOW_PROJ_DIR:-.}/logs:/opt/airflow/logs
    - ${AIRFLOW_PROJ_DIR:-.}/plugins:/opt/airflow/plugins

 

2. 컨테이너 띄우기

docker compose up -d

 

BUT 이대로 docker compose up 하면 warning 발생

WARN[0000] The "AIRFLOW_UID" variable is not set. Defaulting to a blank string.

 

docker-compose.yaml 파일 내에서 환경 변수를 사용하는데, AIRFLOW_UID 변수가 설정되지 않았기 때문에 발생.

 

** AIRFLOW_UID 설정 이유

더보기

- Docker 컨테이너 내부에서 생성된 파일과 디렉토리는 기본적으로 root 사용자(UID 0)에 의해 생성된다.

그러나 호스트 시스템에서 이 파일들을 접근하고 수정하려면 파일 소유자가 호스트 시스템의 사용자와 일치해야 하므로, 이를 위해 AIRFLOW_UID 변수를 사용하여 컨테이너 내부에서 파일을 생성할 때 사용할 사용자 ID를 지정할 수 있다.

- UID(User ID), GID(Group ID)

해당 프로세스를 실행한 사용자의 정보를 나타냅니다.
UID는 사용자의 아이디를 나타내며 0~32767의 숫자로 나타내고 0은 슈퍼(root)유저를 나타냅니다.
그리고 리눅스에서는 사용자를 그룹으로 묶을 수 있는데 이 그룹을 구분지을 수 있는 ID가 GID입니다.

 

vim .env

AIRFLOW_UID=50000

 

mkdir -p ./dags ./logs ./plugins ./config
echo -e "AIRFLOW_UID=$(id -u)" > .env

 

데이터베이스 초기화

docker compose up airflow-init

 

 

까지 완료하고 나서 컨테이너를 띄운다.

docker compose up -d

 

3. 보다 쉽게 실행하기 위한 스크립트 생성

curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.6.0/airflow.sh'

chmod +x airflow.sh

 

쉘 스크립트 확인해 보면 이렇게 적혀있는데, 나는 매번 삭제 되지 않게 하기 위해 --rm 커맨드는 삭제했다.

if [ $# -gt 0 ]; then
    exec $dc run --rm airflow-cli "${@}"
else
    exec $dc run --rm airflow-cli
fi

 

4. 컨테이너 올리고 내리기

# 컨테이너 올리기
./airflow.sh up

# 컨테이너 내리기
./airflow.sh up

Ref.

- https://airflow.apache.org/docs/apache-airflow/stable/howto/docker-compose/index.html