데이터 공부/Apache Airflow

Apache Airflow 처음부터 빌드해보기 + 1

한소희DE 2021. 8. 16. 15:50
Airflow를 사용해본 경험은 꽤 되지만, 이는 누군가가 Docker로 사용하기 좋게 build해놓은 것을 썼기 때문에 온전히 내 것이라는 느낌이 들지 않았다. 따라서 이번 프로젝트를 진행하면서 Airflow를 처음부터 직접 설치하며 실행해보고 기초를 완전히 다져보고자 Udemy 수업을 수강하고 구글링을 하는 등 공부를 해보았다.

오늘은 지난 주 배운 내용을 온전히 내 것으로 만들기 위해 복습을 해보았다.

 

 

1. airflow란 무엇인가

https://eng-sohee.tistory.com/80

 

01. Airflow 개념 + Docker를 통한 Airflow 설치

01. Airflow란 무엇인가? Airflow는 에어비앤비에서 개발한 워크플로우 스케줄링 및 모니터링 플랫폼이다. 이는 동작 순서 및 방식과 같은 파이프라인을 파이썬 코드를 이용해 구성하기 때문에 동적

eng-sohee.tistory.com

위 블로그에도 적었듯, airflow는 배치 잡의 워크 스케줄러다.

 

🔥 Cron이 아닌 airflow를 사용하는 이유는 아래와 같다.

 

 1) 백필 용이 - 시간과 날짜를 지정하면 지정한 부분의 백필이 용이하다.

 2) 편한 UI로 모니터링 용이 - 어떤 job이 문제가 있는지 쉽게 캐치할 수 있다.

 3) 스케줄링 및 파이프라인 설계 용이 - UI에서 설계한 그래프의 형태 등을 쉽게 파악할 수 있다.

 

 

 

2. airflow의 핵심 구성

 

2-1. 웹서버

에어플로우 서버. 서버가 실행되면 메타스토어에 전달된다.

 

2-2. 스케줄러

어떻게 진행할지 계획이 세워져 있다.

 

2-3. 메타스토어

수행기록 및 데이터가 저장되어 있다.

 

2-4. 익스큐터

실제로 실행하는 역할을 맡는다.

 

 

단일노드의 기본 형식은 아래와 같다.

 

하지만 여기에서 노드는, 여러 개가 될 수 있다. 이때 노드 별로 구성하는 것들은 다를 수 있다는 점을 참고해야 한다.

또한 여기서 생성된 여러 노드는 시스템 간에서 분산된다.

이렇게 익스큐터에 생성된 대기열이 다수의 워커노드로 분산되어 업무가 처리된다.

 

 

그렇다면 DAG 파일을 생성하면 어떻게 될까?

스케줄러와 웹서버 모두에게 파싱이 된다. 이는 메타스토어에 전달이 되고 작업이 트리거될 준비가 되면 인스턴스가 생성된다. 이 인스턴스는 익스큐터에 전달된다.

 

 

 

3. airflow 설치

 

3-1. 파이썬 개발 환경 망칠 수 있으니 가상환경 생성

python3 -m venv sandbox

 

 

3-2. 가상환경에 airflow 필요한 라이브러리 설치

 

1) pip install wheel

여기서 잠깐 ! wheel 이란?

컴파일된 바이너리 모듈이 압축(zip)된 파일. (확장자 whl)
pip install로 온라인에 등록된 패키지가 정상적으로 설치되지 않을 경우 wheel 파일을 다운받아 설치할 때 쓰인다. 따라서 아래 pip 설치 파일이 제대로 설치되지 않을 것을 우려해 설치한다.

 

2) pip3 install apache-airflow==2.1.0 --constraints https://gist.githubusercontent.com/marclamberti/742efaef5b2d94f44666b0aec020be7c/raw/21c88601337250b6fd93f1adceb55282fb07b7ed/constraint.txt

 

이를 통해 각종 라이브러리 및 오퍼레이터, 센서 등을 설치한다.

제약조건을 설치하는 이유?

다른 라이브러리 설치로 인해 버전이 막힐 것을 우려

 

 

3) airflow db init

메타스토어 생성. 이곳에 메타데이터 및 필요한 파일이 생성된다.

airflow db init 이후 생성된 파일을 확인해보면, 새로운 airflow 폴더가 생긴 것을 알 수 있다.

 

이제 airflow 폴더에 뭐가 생겼는지 확인해보자.

 

 

  • airflow.cfg - airflow 관련 설정을 담당하는 파일
  • airflow.db - 데이터가 저장되는 장소. 참고로 여기서는 설정 전 기본 db로 SQLite가 설정된다.
  • logs - 작업 로그를 확인할 수 있다.
  • webserver_config.py - 웹서버 구축을 용이하게 한다.

 

(참고) 2.0.0b3 버전에서는 unittest.cfg 파일이 있어서 일부 구성 테스트할 수 있도록 했는데 그것이 사라졌다. airflow 파이프라인에 영향 주지 않고 데모로 설정할 수 있는 기능이었다고 하는데, 왜 없어졌는지 궁금....다른데에 기능이 합쳐졌을 수 있으니 찾아보자!

 

 

 

4) airflow webserver

airflow webserver 명령을 하면 webserver가 run 된다. 따라서 이렇게 server를 켜준 뒤 localhost:8080 접속하면 airflow UI가 뜬다.

 

 

여기서 잠깐! 에러 발견

 

에러 살펴보기

페이지가 작동하지 않습니다. localhost에서 전송한 데이터가 없습니다. ERR_EMPTY_RESPONSE

 

 

해결 방법

구글링하니, localhost를 직접 명시해주면 해결된다고 한다. 따라서 vscode에 live server 설치 후 ipconfig - 나의 IPv4 주소에 있는 IP 주소를 입력하면 된다고 한다.