크롤링 자동화를 위해 알고 넘어가야하는 Airflow
Apache Airflow?
- AirBnB에서 만든 workflow management tool
- workflow를 programming 방식으로 작성, 예약 및 모니터링하는 플랫폼
- workflow를 코드로 정의하면 유지 관리, 버전 관리, 테스트 및 협업이 용이해짐
- Airflow를 사용하여 workflow를 DAG로 작성함
DAG 설명 글은 여기로!!
- DAG를 활용하면 복잡한 작업을 쉽게 수행할 수 있음
- Airflow의 사용자 인터페이스를 통해 실행 중인 파이프라인을 쉽게 시각화, 모니터링하여 문제를 쉽게 해결할 수 있음
- Apache에서 관리하기 때문에 Apache의 license 고지 필요
(근데 로고가 에버랜드같당...)
DAG
- DAG는 연결 된 화살표 방향으로 순차적으로 작업 실행
- 분기 실행과 병렬 실행이 가능함
- 기존의 DAG의 경우, 각 작업들이 하나의 어플리케이션으로 구현되었으며 조건이 바뀌거나 Task 수정 시, 전체 어플리케이션을 수정 후 배포해야하는 번거로움이 존재했었음
- Airflow의 경우 각 Task가 독립적으로 존재하기에 단위 별로 나눠서 개발하는 등의 모듈화가 가능함
- Airflow는 실행할 순서에 따라 DAG 배치 후, 술행 주기와 분기 조건을 반영하면 됨
- 일반적인 Python 코드로 정의하며, $AIRFLOW_HOME/dags 폴더에 위치함
- 해당 폴더의 파이썬 파일에 "airflow" 혹은 "dag" 단어가 포함되어있으면 Webserver에 표시됨
Airflow 아키텍처
Airflow는 4가지의 구성요소로 이루어져있음.
1. Webserver
2. Scheduler
- DAG, Task에 대하여 모니터링 및 관리
- 실행해야 할 Task 스케줄링
3. Executor
- 작업자들에게 작업을 실행시키는 역할
- SequentialExecutor, LocalExecutor, CeleryExecutor, KubernetesExecutor 등이 있음
- LocalExecutor는 병렬처리까지만 가능하고 클러스터 형으로 작업을 나눌수는 없음
- CeleryExecutor, KubernetesExecutor는 클러스터를 구성해야함
4. Workers
- 실제 Task 실행 주체
- Executor 종류에 따라 동작 방식이 다름
Python DAG를 읽고, Scheduler가 Task를 스케줄링하면, Worker가 Task를 가져가 실행. 실행결과는 Database에 저장되고, Webserver로 실행 상태, 성공 여부 등을 알 수 있음
BackFill
- 과거 특정 시점부터 현재까지 몰아서 작업 처리
- 크롤링 자동화에 매우 유용하게 쓰일 것이라 생각됨
Airflow Operator
- Airflow의 DAG는 여러 Task로 이루어져있으며, operator나 sensor가 하나의 Task로 만들어짐.
- 아래는 Airflow가 기본적으로 제공하는 Operator이며 이외에도 수많은 operator들이 존재함
- BashOperator : bash command 실행
- PythenOperator : python 함수 실행
- EmailOperator : email 발송
- MysqlOperator : sql 쿼리 실행
- Sensor : 시간, 파일, db row 등을 기다리는 센서
refer
이수진님의 블로그
Airflow documentation
Airflow github
곰탱이푸우님의 블로그
오늘의집 기술블로그