본문 바로가기
BigData/Project

[Project] ETL Daily batch project(공공데이터 코로나 API, Python, PySpark, Airflow, AWS)

by 스파이디웹 2022. 2. 17.
728x90

이번 포스트에는 정해진 시간에 EC2를 띄우는 EC2 image builder 생성 및 결론과 보완할 점, 추가로 해볼 기능을 정리하겠습니다.

어떤 프로젝트인지 잘 모르시는 분은 아래의 링크를 참고해주세요.
2022.02.17 - [BigData/Project] - [Project] ETL Daily batch project(공공데이터 코로나 API, Python, PySpark, Airflow, AWS) 1. 프로젝트 개요
EC2에 환경 구성이 되지 않으신 분은 아래의 링크를 참고해주세요
2022.02.17 - [BigData/Project] - [Project] ETL Daily batch project(공공데이터 코로나 API, Python, PySpark, Airflow, AWS) 4. EC2 서버 생성 및 pyspark, airflow,MySQL 설치
EC2 환경 구성 및 airflow dags 구성이 안 되신 분은 아래의 링크르 참고해주세요.
2022.02.17 - [BigData/Project] - [Project] ETL Daily batch project(공공데이터 코로나 API, Python, PySpark, Airflow, AWS) 5. aws cli configure, airflow dag 구성 및 S3로 데이터 보내기, ec2 자동으로 종료하기


1. EC2 Image builder 생성

EC2를 정해진 시간에 띄우는 방법은 여러가지 있습니다.
그 중에 추가 비용을 내지 않고, 단일 인스턴스를 띄울 수 있는 EC2 Image builder를 사용하겠습니다.

  • Image Builder 자체에 대한 과금은 없음
  • 로그 저장, 이미지 생성, 저장, 공유에 사용되는 AWS 리소스에 대한 부분만 과금

먼저 image recipe를 생성해야합니다.

이름 및 버전, 그리고 생성한 이미지 ID를 넣습니다.
이후 build component는 필수라서
aws cli를 선택합니다.


이후 image pipeline을 생성합니다.
UTC 시간에 맞춰 9시간 늦게(한국시간으론 9:55)에 EC2를 build할 수 있게 cron을 설정합니다.

생성한 recipe를 선택합니다.

infrastructure 도 미리 생성해야되는데, t2.large, securitygroups(22, 8080포트) key-pair 유무, IAM role에 유의하여 생성

distribution detail 또한 마찬가지로 설정하여 생성합니다.

이후 enabled로 설정하게 되면 원하는 설정대로 동작하게됩니다.(매일 9시 55분에 실행)


2. 결론 및 보완할 점

이렇게 6개의 포스트를 통해 간단한 ETL작업으로 코로나 데이터를 S3에 저장하고 서버 자동 종료, 생성까지 완료했습니다.

부족한 점도 많고, 새로운 기능 혹은 다듬어야할 부분을 테스트 하지 못해 최소화시킨 가장 간단하게 만들어본 ETL이라 이 6개의 포스트 이외에도 새로운 기능을 테스트해보고 가지치기 하듯이 subversion들을 만들어 포스트하고 링크를 달겠습니다.


보완할 점

1.
배치로 돌리게 될 때, pyspark dataframe을 직접 s3에 쓰는 것이 아니다 보니,매일 돌리는 job에 생성된 파일명이 매번 달라져 그날 그날 파일이 디렉토리별로 S3에 하나씩 추가되게 된다.
-> pyspark를 s3에 직접 쓰는 config 및jar파일을 설정하고 직접 쓰기


2.
airflow랑 pyspark를 같은 ec2에 몰아놓으니(계정 구분도없이) 관리가 어렵기도 하고 airflow를 통해 airflow자체도 내렸다 띄웠다하니 불안정한 느낌
->airflow를 따로 서버에 구축하여 24시간 띄워두기


3.
airflow dags에 BashOperator로만 SSHOperator python file 및 ec2 서버 관리를 했는데, 다른 Operator를 쓸 순 없는지
->sparksubmit operator 검토해보기


4.
aws cli, ec2 image builder를 통해 ec2를 관리하는 것이아닌(관리하더라도 airflow를 따로둔 ec2에서 aws cli를 통해 pyspark가 깔린 ec2를 제어) lambda+boto3+cloudwatch, cloud formation, terraform를 통해 제어해보기
-> lambda로 제어하기+cloudwatch+boto3
->cloud formation으로 제어하기
->terraform으로 제어하기


5.
airflow log를 s3에 생성하지않고 ec2에 생성된 파일을 복사하는 점
-> 직접 s3에 airflow 로그 생성하기

airflow dag trigger rule에 대해 잘 모르고 dag를 짜서 의도한데로 명확히 흘러갔는지에 대한 의문
-> airflow dag trigger rule 정리하기

airflow dag를 함수로써 구현해보기(script가 아닌) 모듈로써 구현
-> 역할 별로 나눈 함수를 구현하여 main 함수에서 실행시키게끔 refactoring

공공데이터를 lxml로 변환하지않고 json으로써 데이터를 다뤄보기
-> bs4 lxml이 아닌 json형태로써 바꿔서 다뤄보기

cache()의 이점이 되는 상황과 이후에 release해줘야 하는지에 대한 테스트
-> cache() 내용 정리와 release유무 차이 정리

saveDataAsCSV(getTodayCovidAffectedNumbers()) 3번 데이터가 불려지는 이유 찾기
-> 해당 함수가 covid19api를 3번 호출하게되는 이유(과정에 대해서 찾아서 정리하기)

728x90

댓글