개요
- 현재 데이터를 크롤링하여 적재하고, 적재된 데이터를 이용하여 서비스하고 있는 프로젝트가 세 가지가 되었다.
- 이 모든 과정을 단순히 Amazon EC2의 크론잡(Cronjob)을 이용하여 진행하고 있다.
- 모든 데이터 적재가 셀레니움(Sellenium)을 통한 동적 크롤링(Crawling)으로 진행되고 있는데, 생각보다 많은 에러를 직면하게 된다.
- 앞으로도 많은 크롤러 프로그램을 제작하고 스케쥴링하게 될텐데, 점점 복잡도가 올라감에 따라 에어플로우(Airflow)를 도입하려 한다.
EC2 위에 에어플로우 구축
- 24시간 돌아가야하는 작업이 많기 때문에 클라우드상에 구축을 진행한다.
- AMI를 우분투(Ubuntu)로 사용하고, 인스턴스 사이즈는 기존 크롤링 서버와 동일하게 t3a.xlarge로 선택하여 여유롭게 진행한다.
파이썬 설치
1 |
|
- 위 명령어를 통해 최신 파이썬(Python) 버전을 설치한다.
에어플로우 및 기타 모듈 설치
1 |
|
- sqlalchemy의 경우 로우 버전을 다운 받았더니 오류가 났다. 최신 버전을 다운로드 한다.
에어플로우 계정 생성
- 우분투(Ubuntu) root 계정이 아닌 airflow user를 생성하여 작업을 진행한다.
1 |
|
- 루트 디렉토리는
/var/lib/airflow/
이다.
PostgreSQL 설치
1 |
|
에어플로우 초기화
1 |
|
에어플로우 cfg 파일 수정
1 |
|
에어플로우 웹 서버, 스케쥴러 서비스 등록
1 |
|
에어플로우 웹 서버 로그인 어카운트 생성
1 |
|
최종
[hostname]:8080
으로 접속하여 확인한다.- EC2 보안 그룹에 8080 포트를 추가한다.
- 에어플로우 실행까지 완료했다.
에어플로우 DAG 예제
- 예제 코드를 작성한다.
- 단순 ‘Hello World!’ 작업 흐름을 만들 것이다.
- DAG 정의 파일이
AIRFLOW_HOME/dags
에 저장되게dags_folder
를 만들고 이 디렉터리에hello_world.py
파일을 만든다.
1 |
|
- dag는 간단하게
BashOperater
를 이용하여 두가지로 구성한다.
1 |
|
- ubuntu 메인 디렉토리에 실행할 파일을 작성한다.
1 |
|
- 슬랙 API를 통해 메세지를 전송하는 프로세스를 작성한다.
1 |
|
- 모든 작성이 끝나고 조금의 시간이 흐르면 에어플로우 GUI에서 작업을 확인할 수 있다.
- 버튼을 통해 작업을 살행하면 정상적으로 동작하는 것을 확인할 수 있다.