데이터 엔지니어링 분야에서 각광받고 있는 플랫폼인 Airflow는 2014년 Airbnb 엔지니어링 팀에서 개발한 오픈소스 워크플로우 관리 플랫폼이다. 프로그래밍으로 ETL과 같은 워크플로우를 작성하고 예약 및 모니터링 할 수 있다.
Airflow 왜 배워야할까?
1. Automation: Extractaction > Transformation > Loading에 이르기까지 모든 과정을 자동화할 수 있다.
2. Orchestration: 데이터 추출, 가공, 저장, 분석 등의 파이프라인 관리용으로 가장 인기 많은 오픈소스 솔루션으로, Spark, Hadoop, Python, R 등 여러 플랫폼과 언어를 오가며 사용할 수 있다. (솔루션 간의 연계성이 좋음) 또한 공식적으로 지원하지 않는 플랫폼에 대해서도 직접 커스터마이징하여 사용할 수 있다. (확장성)
3. 워크플로우 제어 및 스케줄링하는 플랫폼 중 가장 인기가 많다.
4. 데이터 엔지니어의 필수 역량은 데이터 파이프라인 구성과 관리 = Airflow는 그 과정을 다루기에 좋은 도구이자 플랫폼이다. (Python, SQL, Cloud, Spark, HDFS 등..)
Airflow의 특징
- 파이썬으로 제작된 도구인만큼, 워크플로우 생성 시에도 파이썬으로 구현해야 함
- 하나의 워크플로우는 DAG(Directed Acyclic Graph)이라 부르며 DAG 안에는 1개 이상의 Task가 존재함.
- Task 간 선후행 연결이 가능하되 순환되지 않고 방향성을 가짐
- Cron 기반의 스케줄링 (주기적 실행)
- 모니터링 및 실패 작업에 대한 재실행 기능이 간편
Docker를 활용하여 Airflow 설치하기
우선 Docker 설치는 공식 페이지를 참고하자.
https://docs.docker.com/engine/install/ubuntu/
* 만약 'Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?' 과 같은 에러가 난다면, Windows Powershell에서 아래 명령어를 입력해 wsl 업데이트를 해보자. systemctl을 최신 버전의 wsl에서만 지원해주기 때문에 생긴 에러일 가능성이 크다.
wsl --update
이후 Airflow 설치는 아래 공식 문서를 따르면 된다.
https://airflow.apache.org/docs/apache-airflow/stable/howto/docker-compose/index.html
먼저 docker-compose.yaml 파일을 다운로드 받는다.
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.9.3/docker-compose.yaml'
그 뒤 airflow 관련 권한 설정을 위해 몇 개의 폴더를 만든 뒤 airflow uid를 설정해주는 작업을 아래 코드를 통해서 해준다.
# 권한설정
mkdir -p ./dags ./logs ./plugins ./config
echo -e "AIRFLOW_UID=$(id -u)" > .env
다음으로는 DB 설정 초기화(initialize)를 진행한다.
docker compose up airflow-init
# 완료 시 아래와 같은 메시지가 출력된다.
airflow-init_1 | Upgrades done
airflow-init_1 | Admin user airflow created
airflow-init_1 | 2.9.3
start_airflow-init_1 exited with code 0
위 설정까지 마쳤다면, airflow를 실행해볼 것이다. 아래 명령어로 airflow를 실행한다.
docker compose up
위 코드를 실행하면 http와 관련된 메시지가 쭉 올라오는 시점이 있는데, 그 시점에 airflow가 정상적으로 설치되었는지 확인할 수 있다. 주의할 점은 해당 터미널은 실행시킨 채로 다른 터미널을 열어 확인해야한다는 것이다. 아래 명령어로 확인할 수 있다.
docker ps
# 아래와 같이 메시지가 노출되면 정상이다.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
247ebe6cf87a apache/airflow:2.9.3 "/usr/bin/dumb-init …" 3 minutes ago Up 3 minutes (healthy) 8080/tcp compose_airflow-worker_1
ed9b09fc84b1 apache/airflow:2.9.3 "/usr/bin/dumb-init …" 3 minutes ago Up 3 minutes (healthy) 8080/tcp compose_airflow-scheduler_1
7cb1fb603a98 apache/airflow:2.9.3 "/usr/bin/dumb-init …" 3 minutes ago Up 3 minutes (healthy) 0.0.0.0:8080->8080/tcp compose_airflow-webserver_1
74f3bbe506eb postgres:13 "docker-entrypoint.s…" 18 minutes ago Up 17 minutes (healthy) 5432/tcp compose_postgres_1
0bd6576d23cb redis:latest "docker-entrypoint.s…" 10 hours ago Up 17 minutes (healthy) 0.0.0.0:6379->6379/tcp compose_redis_1
각 서비스와 연결된 '컨테이너'들이 보일 것이다.
에어플로우 서비스 접속
Airflow 설치까지 확인했다면, http://localhost:8080/ 도메인에 접속해 해당 서비스에 접속해볼 수 있다.
해당 도메인으로 접속한다면 아래와 같은 로그인 화면이 노출된다.
기본적으로 ID와 PW는 'airflow'로 동일하다. 입력해서 로그인하면,
위와 같은 화면이 노출된다. 아래의 리스트는 샘플로 만들어놓은 DAG리스트다. 리스트 중 하나의 샘플을 선택해보자.
선택하여 접속하면 해당 DAG에 대한 자세한 정보를 알 수 있다. 해당 페이지에 관해서는 추후 실습을 통해 더 자세히 기록하도록 하겠다.
'Minding's Programming > Airflow' 카테고리의 다른 글
[Airflow] Email 오퍼레이터 사용해보기 (Gmail 서버 사용) (0) | 2024.07.19 |
---|---|
[Airflow] Bash Operator로 쉘 스크립트 파일 실행하기 (0) | 2024.07.19 |
[Airflow] DAG 내 task 연결하기 (순서 지정) (0) | 2024.07.19 |
[Airflow/Cron] Cron 스케줄 개념 정리 (0) | 2024.07.19 |
[Airflow] Airflow DAG 만들기 & DAG 디렉토리 셋팅 (0) | 2024.07.19 |