Airflow 설치
환경 : Docker가 설치된 Ubuntu 20.04 LTS
과정
1. 먼저 home 아래에 airflow라는 폴더를 만들고, 다음 파일들을 생성한다.
- 1) contraints-3.8.txt
: airflow를 다운로드 받기 위해 필요한 requirement file이 필요함. 아래 명령어로 내용을 가져올 수 있다.
wget https://raw.githubusercontent.com/apache/airflow/constraints-2.0.2/constraints-3.8.txt
- 2) Dockerfile
: Docker image를 만들기 위한 설정 내용이 적혀있음 (강의 참고)
# Base Image FROM python:3.8-slim LABEL maintainer="MarcLamberti" # Arguments that can be set with docker build ARG AIRFLOW_VERSION=2.0.2 ARG AIRFLOW_HOME=/opt/airflow # Export the environment variable AIRFLOW_HOME where airflow will be installed ENV AIRFLOW_HOME=${AIRFLOW_HOME} # Install dependencies and tools RUN apt-get update -yqq && \ apt-get upgrade -yqq && \ apt-get install -yqq --no-install-recommends \ wget \ libczmq-dev \ curl \ libssl-dev \ git \ inetutils-telnet \ bind9utils freetds-dev \ libkrb5-dev \ libsasl2-dev \ libffi-dev libpq-dev \ freetds-bin build-essential \ default-libmysqlclient-dev \ apt-utils \ rsync \ zip \ unzip \ gcc \ vim \ locales \ && apt-get clean COPY ./constraints-3.8.txt /constraints-3.8.txt # Upgrade pip # Create airflow user # Install apache airflow with subpackages RUN pip install --upgrade pip && \ useradd -ms /bin/bash -d ${AIRFLOW_HOME} airflow && \ pip install apache-airflow[postgres]==${AIRFLOW_VERSION} --constraint /constraints-3.8.txt # Copy the entrypoint.sh from host to container (at path AIRFLOW_HOME) COPY ./entrypoint.sh ./entrypoint.sh # Set the entrypoint.sh file to be executable RUN chmod +x ./entrypoint.sh # Set the owner of the files in AIRFLOW_HOME to the user airflow RUN chown -R airflow: ${AIRFLOW_HOME} # Set the username to use USER airflow # Set workdir (it's like a cd inside the container) WORKDIR ${AIRFLOW_HOME} # Create the dags folder which will contain the DAGs RUN mkdir dags # Expose ports (just to indicate that this container needs to map port) EXPOSE 8080 # Execute the entrypoint.sh ENTRYPOINT [ "/entrypoint.sh" ]
- 3) entrypoint.sh
: Dockerfile에서 설정 시 사용되는 파일로, airflow 초기화하고 사용자를 생성하는 등의 코드가 적혀있음
#!/usr/bin/env bash # Initiliase the metastore airflow db init # Run the scheduler in background airflow scheduler &> /dev/null & # Create user airflow users create -u admin -p admin -r Admin -e admin@admin.com -f admin -l admin # Run the web server in foreground (for docker logs) exec airflow webserver
2. 현재 디렉토리 위치에서 Dockerfile로부터 도커 이미지를 생성한다.
docker build -t airflow-basic .
docker image ls 명령어를 통해 만든 airflow-basic 이미지를 확인할 수 있다.
3. 만든 도커 이미지를 실행한다.
docker run --rm -d -p 8080:8080 airflow-basic
docker ps 명령어로 실행된 도커 이미지를 확인한다.
4. localhost:8080/ 에 접속하여 admin (pw: admin)으로 로그인 하면 잘 접속된다.
CLI 실행 방법
docker ps 명령어로 CONTAINER ID를 얻은 후,
docker exec -it 명령어로 /bin/bash로 실행한다.
sudo docker exec -it (CONTAINER_ID) /bin/bash
명령어 설명
airflow db init
데이터베이스를 초기화하고 필요한 파일과 폴더들을 생성함. airflow 설치하고 처음 사용하는 명령어
airflow db reset
데이터 베이스를 초기화하는 명령어로, 함부로 명령어를 사용해서는 안 됨
airflow db upgrade
meta 데이터베이스에 있는 스키마들을 업그레이드 함
airflow webserver
airflow scheduler
웹 서버 실행
스케줄러 실행
airflow dags list
dag 리스트로 id 등을 확인할 수 있음
airflow dags trigger (dag_id) -e 2021-01-01
dag를 trigger하기
airflow dags list-runs -d (dag_id)
실행중인 dag 리스트 보는 명령어로,
dag_id, run_id, state, execution_date, start_date 등을 볼 수 있음
airflow dags backfill -s 2022-01-01 -e 2022-01-05 --reset-dagruns
시작 날짜와 끝나는 날짜를 설정할 수 있음
--reset 옵션 사용 시 이미 trigger 된 것도 다시 할 수 있음
airflow task list (dag_id)
dag의 task를 확인할 수 있는 명령어
airflow tasks test (dag_id) (task_id) (execution date)
task가 잘 작동되는지 검증하기 위한 명령어
dependencies, metadata를 db에 저장하는 것과 무관하게 단지 task가 잘 작동되는지 테스트할 때 사용
dag에 task 추가하고 테스트할 때 유용하게 쓰임
본 내용은 Udemy의 'Apache Airflow: The Hands-On Guide' 강의를 듣고 정리한 글 입니다.
'#️⃣ Data Engineering > Airflow' 카테고리의 다른 글
Airflow 실습_OpenAPI와 Upsert를 이용한 DAG (0) | 2023.06.08 |
---|---|
Airflow 실습_기본코드 정리 및 ETL 코드 개선하기 (0) | 2023.06.07 |
Airflow 설치(Docker-compose)와 간단한 실습 (0) | 2023.06.07 |
Airflow란? 구성요소 알아보기 (0) | 2023.06.07 |
데이터 파이프라인(ETL) 정의 및 설계 시 고려할 점 + 실습 (0) | 2023.06.05 |