에어플로우 이전의 ETL 기반 파이프라인은 시간을 기반으로 코드를 돌리는 스케쥴을 작업하는 원리로 이루어졌었다. 그러니까 예를 들어서, 어떤 회사의 데이터를 수집하는 코드가 A, B, C 테스크가 있다고 가정하면, A 테스크가 끝날 것으로 예상되는 시간에 B 테스크가 돌아가게끔 프로그래밍을 하는게 ETL 이라고 생각하면 된다.
이 방법은 단순하게만 생각해봐도 단점이 어마어마하게 많다
만약, 무슨일이 생길지 모르는 코드세상에 약간의 이슈가 생겨 A 테스크가 늦게 끝난다면? 근데 B 테스크가 실행되어 버렸다면..? A 가 잘 끝났는지 에러가 난건지 에러가 안 나고 적재가 이상하게 된건지 알 수 있는 방법은...?
그러다가 데이터 엔지니어링의 세계에... Airflow 라는 놈이 등장했다고... 한다 ㅎ
분석가인 나도 팀 엔지니어분이 작업하는걸 보니 배워두면 좋은 프로그램인거같아 공부를 시작했을 정도니~
1. Airflow 는 뭐냐...
- python 기반의 batch 형 workflow scheduler 이다. 그러니까 쉽게 말해 어떤 작업의 흐름을 스케쥴링하는것이다.
- 에어플로우의 워크플로우를 구성하는 단위는 DAG 와 task 라는 단위로 이루어진다
- 자세한 작동 방법은 아래 아키텍쳐를 보며 이해해보자
- 먼저 가운데 위치한 스케쥴러는 제일 중요한 아이다. 아래 있는 Executor 에게 DAG 라는 워크플로우를 실행시키고 모든 task 와 DAG 를 조건에 맞을 시 trigger 하는 역할을 하게 된다. 조건이 맞으면 DAG 파일을 실행시키는거다 ㅎ
- Executor 는 여러가지 종류 중에 선택해서 이 Airflow 파일을 어디에서 어떻게 실행시킬지 정해준다고 보면 된다
Local Executor, Celery Executor, Kubernetes Executor 등등 다양한 환경을 선택할 수 있다 !^^ 주로 두번째걸 쓴다고 한다. 얘를 뭘로 선택하는지에 따라 세부 구성 요소가 달라지니.. 환경을 볼 때 유심히 보도록 하시오!
*오늘의집 테크블로그에 가면 얘네가 Executor 를 바꾸면서 환경이 어떻게 뭐가 달라졌는지를 설명해준다(https://www.bucketplace.com/post/2021-04-13-%EB%B2%84%ED%82%B7%ED%94%8C%EB%A0%88%EC%9D%B4%EC%8A%A4-airflow-%EB%8F%84%EC%9E%85%EA%B8%B0/
- Webserver 는 유저가 뭔가 웹에서 액션을 하는.. 하면 그걸 확인할 수 있는 서버고, 그 데이터가 메타데이터 데이터베이스로 모이게 된다. 그러니까 DB 에 대한 접근성이 있어야하죠!
- Metadata Database 이 해당 작업에 대한 모든 기록이 저장되는 곳이다. 역시 종류가 여러개가 있는데 MySQL 이나 PostgreSQL 등등을 지원한다
-Workers 는 할당된 태스크를 실행하는 애다
Airflow 이용의 장단점!
- 개발시간도 단축, 유지관리 비용도 적다! 당연함 스케쥴링을 해주는거니깐 자동화 너무좋아요 ~
- web ui 툴로 이루어져있어서 시각화나 디버깅이 쉬움!
- operator 를 이용해 다양하게 외부 리소스들간의 확장이 가능하다. 파일을 가져오거나 업로드하거나 조건을 설정하는 등의 작업을 할 수 있다
물론 너무 무거운 고부하의 작업이거나 지연을 허용하지 않은 (반드시 그 시간에 돌아가야하는) 작업이라면 피하는게 좋다고 한다. 대신 가벼운 작업을 연속적으로 돌리기에 배우기도 쉽고 응용도 쉬운 툴이라고 생각하면 될듯하다. 필자는 회사에서 쓰고있는 코드를 자동으로 주기적으로 돌아가게 하기 위해 에어플로우를 배우기 시작했는데, 에어플로우를 구축해두고 클라우드에 올려두면 손 하나 까딱 안 해도 설정한 주기에 맞게 돌아간다고 함 ^^! 업무 자동화의 끝판왕!
2. 리눅스 및 에어플로우 설치
운영체제로 윈도우를 쓰고 있다면 에어플로우를 직접 깔 수 없다. 필자는 Ubuntu 20.04.06 LTS 를 MS store 에서 깔고, 그 위에 에어플로우를 install 했는데 도중에 상당한 에러로 고생을 좀 했다.. 도움 받은 유튜브 영상들과 블로그 링크를 걸어둘테니 부디 이 글을 보는 다른 이는 설치 0단계를 잘 이겨내길...
(도커 이용해서 까는것도 있는데 비추한다 일단 세개나 깔아야 하니 더 귀찮고 시스템에 깔아야 로컬로 돌릴 수 있음.. 첫번째 링크 인강 선생님이 도커 이용해서 까는거 알려주시는데 ㄴㄴㄴ 리눅스에 바로 깔자.. )
https://www.youtube.com/watch?v=H4kYGJfTWCQ&list=RDCMUC5FvzLMVNrTMW-ycrW-4KyA&index=3
https://www.youtube.com/watch?v=RKASf-XmPSw&t=194s
https://lsjsj92.tistory.com/631
3. 첫 DAG 스켈레톤 만들어보기 실습
인강 아저씨가 설명을 너무 어렵게 하길래 이 영상 저 노트 참조하다가 나름대로 이해한 것들을 좀 쉽게 적어두겠다 ㅎㅋ 나처럼 유치원생 눈높이 설명이 필요한 중생들을 구제해주길...
우선 처음으로 만들어 줄 것은 DAG 스켈레톤이다. 이는 쉽게 말해 DAG 의 틀과 기본 설정을 잡아주는 껍데기라고 생각하면 된다. 우선 스켈레톤을 만들고 업로드하는 방법부터 처음엔 헷갈리는데, 우분투 창에서 위 명령어를 각각 다른 터미널들에 입력해주면 된다. 저기에서 에러가 나고 실행이 안되면 에러 번호를 gpt 한테 물어보면서 에러를 깨나가보자.
각기 다른 터미널에 입력해서 웹서버와 스케쥴러를 먼저 작동시켜주면 된다
airflow webserver
airflow scheduler
혹시 만약에 에러가 나는 경우! The webserver is already running under PID 101 같이 이미 웹서버가 돌아가고 있다고 말하는 경우에는 ㅇ해당 포트를 지워주자 kill 101 을 터미널에 입력해주고 다시 실행시키면 된다.
그 상태로 localhost:8080 에 접속하면 에어플로우 로컬 로그인 화면이 뜬다. 잘 되었는지 확인해주고 다시 터미널로 돌아오자.
정상적으로 두개가 실행되면 새로운 터미널을 열고아래 명령어들을 이용해 airflow 폴더 안에 dags 라는 폴더를 만들어주자. 기본 경로라고 하니 파일명 맘대로 바꾸지 말고 저걸로 해주시길...!!
#현재 디렉토리 확인
pwd
#뒤로가기
cd
#특정 폴더로 가기
cd airflow
#특정 폴더 생성하기
mkdir
#폴더 내 모든 디렉토리, 리스트 출력
ls
그리고 나서 vs code 로 dags 폴더를 열고
py 확장자명으로 새로운 파일을 만든 뒤에 아래 코드를 입력해주면 된다
from datetime import datetime
from airflow import DAG
default_args = {
'start_date' : datetime(2021,1,1)}
with DAG(dag_id = 'myfirstpipeline',
schedule_interval = '@daily',
default_args = default_args,
tags = ['nft'],
catchup = False) as dag:
pass
저게 제일 간단한 설정이다. 시작날짜는 과거 언젠가로, dag id 랑 tags 는 원하는대로 설정해주면 된다. 이 코드를 받아적었다면 상단에 온갖 에러가 뜰 것이다. 왜냐면 완벽히 못 적으니깐..... 필자는 오타가 많았음... ^^ 어디가 오타인지 발견 못하고 삽질하다 보면 세상 본인이 미워질 수 있다.. (경험담) 잘 수정해주면 된다. GUI 에 반영되기까지 시간이 몇십초 정도 걸리니깐 답답해도 참아가면서 ~
여기까지 만들었으면 스켈레톤 하나를 만든거다. 아직 DAG 만 만들고 그 안에 task 는 하나도 없기 때문에 암것도 뜨지 않는 것... ㅎ 들어가보면 다음과 같은 텅 빈 DAG 가 나와있다.
그럼 다음 포스팅에서 본격적으로 오퍼레이터를 사용해서 task 들을 넣어보도록 하겠다
'데이터 엔지니어링 > 파이프라인 뚝딱뚝딱' 카테고리의 다른 글
[DE] IT 기업들의 Kafka 활용 사례집 모음 (0) | 2023.07.25 |
---|---|
[DE] Kafka 작동 원리부터 기본 개념 세상 제일 쉬운 설명 (0) | 2023.07.25 |
[DE] 웹 스크래핑 자동화 솔루션 BrightData 튜토리얼 실습해보기 (2) | 2023.06.10 |