Docker

Docker - Airflow

Developer trainee_J ^~^ 2023. 4. 12. 18:28

이번에는 Docker위에 Airflow를 띄워보려고한다. 

우선 Airflow란? 

- airbnb에서 만든 워크플로우 오픈소스 플랫폼이다. 

- python 코드로 구성되어 동적 파이프라인 생성이 가능하다. 

 

Airflow 구성요소

- webserver : 웹 UI로 DAG를 시각화하고 DAG를 실행시키거나 중단, 결과 로그를 확인할 수 있는 인터페이스를 제공한다.

- scheduler : DAG에 설정된 스케줄에 맞춰 worker에  DAG 실행을 예약해둔다.

- worker : DAG의 Task를 실질적으로 실행하는 곳 Executor에 따라 확장이 가능하다.

- Metastore : Airflow에 있는 DAG, Task, 실행 log등을 저장하는 곳 

- Executor : 스케쥴러와 같이 동작하는 구성요소이며 여러 종류가 있다. *본인은 Celery Executor를 사용할 계획

 

Airflow 동작 원리

1. DAG를 python으로 작성

2. webserver가 작성된 py파일을 읽고 UI에 추가함

3. Scheduler가 DAG run 오브젝트를 만든다. 

4. Scheduler가 DAG run object의 instance를 스케쥴링함

5. Worker가 Task를 수행 후 MetaStore에서 DAG run의 상태를 변경 

6. MetaStore가 webserver에 업데이트 

 

이렇게 보면 굉장히 복잡해 보이지만 사실 Docker를 이용해서 Airflow만 띄우면 크게 어려운 것은 없다. 

게다가 아주 친절하게도 Airflow 공식 Docker image가 있고 Airflow의 구성요소들을 하나로 묶어서 실행가능한 docker-compose.yaml파일까지도 제공하기 때문이다. 

 

* docker-compose란 

여러 컨테이너를 가지는 애플리케이션을 통합적으로 Docker 이미지를 만들고, 실행하는 순서를 자동으로 관리하여 

관리는 편하게 해주는 기능이고 컨테이너를 동시에 여러개 생성하는게 가능하다. 

 

우선 Airflow에서 제공하는 docker-compose파일을 다운받아야한다. 

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

 

Running Airflow in Docker — Airflow Documentation

 

airflow.apache.org

 

링크 접속 후

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

명령어를 입력하여 파일을 다운로드 받거나 아니면 url주소로 가서 코드롤 복사한 후 docker-compose.yaml 이름의 파일을 만들어 붙여넣기를 해도된다. 

 

파일을 다운로드 받았으면 터미널로 파일이 있는 경로까지 이동한 후 

docker-compose up

#파일명을 변경했을 경우 
docker-compose -f {파일이름.yaml} up

명령어를 입력해주면된다. 터미널에 컨테이너들이 생성되면서 출력되는 메세지들이 잔뜩 나오고 기다리다 보면 실행이 완료된다. 

 

** webserver 포트 에러가 발생한다면 포트를 변경해줘야한다. 

이제 localhost:8081 주소로 들어가보면

로그인화면이 나오는데  아이디와 비밀번호 둘다 airflow를 치면된다. 만약 바꾸고싶다면 yaml파일을 수정하면된다. 

로그인 후 이런 UI가 나오면 성공적으로 Airflow를 띄운것이다. yaml파일을 변경하지 않고 그대로 띄웠으면 샘플 DAG가 있어야 정상이다 본인은 샘플 DAG 옵션을 False로 변경해서 없음! 

 

최종적인 나의 목표는 Airflow를 이용하여 

http://www.statiz.co.kr/main.php

 

STATIZ

순 팀 G 승 패 무 승차 승률 득점 실점 1 SSG 7 6 1 0 - 0.857 34 23 2 LG 9 6 3 0 1.0 0.667 46 34 2 NC 9 6 3 0 1.0 0.667 45 24 2 두산 9 6 3 0 1.0 0.667 41 37 5 KT 6 3 3 0 2.5 0.500 37 26 6 롯데 7 3 4 0 3.0 0.429 28 37 7 KIA 6 2 4 0 3.5 0.333 2

www.statiz.co.kr

에 있는 데이터를 크롤링하여 DB에 저장하는 DAG를 만들것이고 ,배치 스케쥴은 월요일을 제외한 나머지 요일로 할 것 이고 해당 데이터를 토대로 월요일마다 지난주의 BEST 타자, BEST투수를 받아와서 slack으로 전달받는 파이프라인을 구성해보려고 한다.

 

airflow를 활용해서 뭘 할 수 있을까 생각을 해봤는데 내가 좋아하는 야구의 데이터를 받아서 활용해보자는 생각이 들어서 진행하게 되는 프로젝트이다.

 

우선 다음포스팅은 DB연결!

 

'Docker' 카테고리의 다른 글

Docker Swarm 이란 무엇인가?  (0) 2023.09.07
Docker 환경에서 크롤링하기(동적 웹)  (0) 2023.06.30
Docker 환경에서 크롤링하기  (0) 2023.04.16
Docker 환경 구성 (2)  (0) 2023.04.11
Docker 환경 구성 (1)  (0) 2023.04.03