가짜연구소 내 Python - Data Engineering 스터디를 위해 작성했습니다.
https://www.notion.so/chanrankim/PseudoLab-c42db6652c1b45c3ba4bfe157c70cf09
(가짜연구소 링크)
https://www.notion.so/chanrankim/Data-Engineer-Python-83c206a662004120a8211a800581e124
(스터디상세 링크)
0. DAG란?
Directed Acyclic Graph의 약자이다.
여기서, 가장 중요한 단어는 acyclic = 비순환이 아닐까 생각한다.
It defines four Tasks - A, B, C, and D - and dictates the order in which they have to run
왜냐하면, "비순환"이기 때문에 하고자 하는 작업에 순서가 보장되기 때문이다. 예를 들어, 서머리 테이블을 만드는 작업과 서머리 테이블을 만들기 전 데이터를 전처리하는 테스크를 분리하고 싶을 수 있다. 이렇게 테스크를 분리하면, 전처리 테이블을 이용해 추후 다른 배치 작업을 실행할 수 있다.
그런데, 이렇게 하기 위해서는 "작업의 순서"가 보장되어야 한다. 즉, 전처리 테이블을 먼저 생성후 -> 서머리 테이블이 생성되어야 하는 것이다.
https://gibles-deepmind.tistory.com/118?category=954919
얼마전에, 크론탭과 카카오API를 이용해서 나에게 메시지 보내는 배치를 실행해봤는데 크론탭의 경우 작업의 순서를 인과적으로 보장할 수 없기 때문에 여러 테스크들을 연이어 실행하는 경우 굉장히 불편할 수도 있겠다는 생각이 들었다. 물론, 시간상 순서를 정할 수는 있다. 하지만, 만약 앞단 작업에서 장애가 발생하면 어떻게 할 것인가? Airflow의 DAG는 이러한 문제들을 손쉽게 해결해준다.
1. 강력한 웹 인터페이스
Airflow의 또 다른 장점 중 하나는 강력한 웹 인터페이스가 아닐까 생각한다.
지금 보이는 이미지는 Tree View인데 왼쪽에는 DAG가 정의되어 있고, 오른쪽에는 작업 실행 내역이 나와있다. Tree View를 통해, 나처럼 ETL/엔지니어링에 대한 지식이 부족한 분석가도 손쉽게 배치 작업을 제어할 수 있다.
위 이미지는 불곰님의 블로그 스샷을 참고했다. Tree View에서 초록색 알갱이들을 클릭하면 위와 같은 뷰를 볼 수 있는데, 작업이 실패했을 경우 해당 작업만 재시작 할수 있다. 또한, 특정 시기를 기점으로 데이터에 문제가 생긴 경우 특정 시기 이후의 배치 작업만 다시 재처리 할 수도 있어서 매우 편리했다.
2. Airflow 설치
설치 방법은 공홈의 Installation from PyPI 문서를 참조했다.
https://airflow.apache.org/docs/apache-airflow/stable/installation/installing-from-pypi.html
우선, 가상환경을 먼저 실행해주었다.
pip install "apache-airflow[celery]==2.3.0" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.3.0/constraints-3.7.txt"
그런 다음, Airflow를 설치해준다.
aiflow db init
db를 초기화 해주고
airflow users create --username admin --firstname dm --lastname j --role Ademin --email dongmin@zzang.co.kr --password blar
admin user를 생성해준다.
여기까지 하고나면 홈 디렉토리에 airflow 폴더가 생성된 것을 확인할 수 있다.
export AIRFLOW_HOME=~/airflow
한번 더 홈 환경변수를 설정해주자.
airflow webserver -p 8080
webserver를 실행하고 다른 shell에서
airflow scheduler
airflow scheduler를 실행해준다.
그리고 나서 localhost:8080을 웹에서 실행하면 위와 같은 로그인 화면을 볼 수 있는데, username과 password를 차례대로 입력해준다. 참고로, GCP VM인스턴스에서 localhost는 외부 IP주소이다.
이후 로그인 하면 위와 같은 화면을 볼 수 있다.
가끔, 에어플로우 강제 종료가 안되는 경우가 있는데, 그럴 때는 sudo lsof -i tcp:8080 으로 8080포트로 실행되고 있느 프로세스들을 확인한 다음
sudo lsof -i tcp:8080 | grep 'user' | awk '{print $2}' | xargs kill -9 로 프로세스를 죽이고 다시 실행하면 된다.
'딥상어동의 딥한 프로그래밍 > 엔지니어링' 카테고리의 다른 글
[ubuntu]에서 jupyterlab background 서버 구축하기 (0) | 2022.05.24 |
---|---|
[Airflow] 리눅스 도커를 이용한 설치 삽질기 (1) | 2022.05.10 |
[linux] Python과 crontab을 이용하여 카카오톡 메시지 보내는 배치 실행하기(카카오 API) (2) | 2022.04.10 |
[Linux] Python 가상환경 세팅하기 (bdist_wheel 에러 해결) (0) | 2022.04.10 |
[GCP] VM Instance 생성하기 (0) | 2022.04.08 |
제 블로그에 와주셔서 감사합니다! 다들 오늘 하루도 좋은 일 있으시길~~
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!