Encore-final-team-project / Dynamic-Indices-cluster

Bigdata Clustering with Blanace Sheet and Stocks
Eclipse Public License 2.0
2 stars 1 forks source link

Airflow EC2 동작관련 이슈 #30

Open sq1017 opened 1 year ago

sq1017 commented 1 year ago

현상 :

해당 로그 내역 :

[2023-09-15T12:16:55.911+0900] {local_task_job_runner.py:205} ERROR - Heartbeat time limit exceeded!
[2023-09-15T12:16:55.948+0900] {process_utils.py:131} INFO - Sending Signals.SIGTERM to group 5487. PIDs of all processes in the group: [5487]
[2023-09-15T12:16:55.948+0900] {process_utils.py:86} INFO - Sending the signal Signals.SIGTERM to group 5487
[2023-09-15T12:16:55.948+0900] {process_utils.py:79} INFO - Process psutil.Process(pid=5487, status='terminated', exitcode=<Negsignal.SIGKILL: -9>, started='11:44:15') (5487) terminated with exit code Negsignal.SIGKILL
[2023-09-15T12:16:55.952+0900] {standard_task_runner.py:172} ERROR - Job 12 was killed before it finished (likely due to running out of memory)
[2023-09-15T12:17:01.948+0900] {taskinstance.py:1149} INFO - Dependencies not met for <TaskInstance: outsider_airflow_stock.Stock_yf_to_db manual__2023-09-15T02:40:38.003726+00:00 [running]>, dependency 'Task Instance State' FAILED: Task is in the 'running' state.
[2023-09-15T12:17:01.949+0900] {taskinstance.py:1149} INFO - Dependencies not met for <TaskInstance: outsider_airflow_stock.Stock_yf_to_db manual__2023-09-15T02:40:38.003726+00:00 [running]>, dependency 'Task Instance Not Running' FAILED: Task is in the running state
[2023-09-15T12:17:01.960+0900] {local_task_job_runner.py:154} INFO - Task is not able to be run

로그 중 [2023-09-15T12:16:55.952+0900] {standard_task_runner.py:172} ERROR - Job 12 was killed before it finished (likely due to running out of memory) 내용 확인 결과 해당 dag가 실행하는 python 스크립트 동작에 ec2 서버의 memory가 부족한 것으로 보임

저희가 다루는 data가 크지 않아서 ec2서버 스펙을 너무 최소한으로 잡았나 봅니다😂

sq1017 commented 1 year ago

aws 콘솔 내의 airflow ec2 서버 모니터링 로그로도 확인할 수 있었어요

스크린샷 2023-09-15 오후 2 39 19

해당 서비스 중단이 발생한 시점에 airflow 서버가 CPU 사용률 100%를 찍었네요. RAM Memory Usage는 기본 모니터링 플랜으로 확인할 수 없지만, CPU와 함께 수치가 높이 뛰었을 것으로 생각됩니다.

airflow 홈페이지 안의 dag operation fail log에서도 확인 가능해요.

스크린샷 2023-09-15 오후 2 46 13

현재 ec2 airflow 서버 메모리는 약 1G 입니다.

스크린샷 2023-09-15 오후 2 52 49
sq1017 commented 1 year ago

예상되는 해결방안?

  1. ec2 서버 스펙 높이기
    • 가장 쉽지만 비용 발생이 걱정됩니다
  2. dag의 로직 개선으로 해결할 수 있을지 고민해보기
    • 저희가 사용하는 재무제표 데이터의 특성 상, 연간 데이터를 사용하기 때문에 연 1회만 aifrlow가 올바로 동작하면 됩니다.
    • dag가 한 번에 사용하는 memory 단위를 작게 쪼개서 DB에 쌓을 데이터를 조금씩 덜어낼 수 있도록 하는 방법에 대한 고민이 필요합니다.
    • 활용해볼 수 있으면 좋을 것 같은 방법에 대한 포스트가 있어요 : airflow task MEM 사용 최적화에 대한 글입니다 :) https://velog.io/@jskim/Airflow-Task-Memory-%EC%82%AC%EC%9A%A9-%EC%B5%9C%EC%A0%81%ED%99%94%ED%95%98%EA%B8%B0
sq1017 commented 1 year ago

230915 강사님 TIP

  1. ec2 서버 스펙 높이기
    • airflow 이미지 작성 후 RAM 용량을 3~4G로 올리고 같은 작업 실행하기
  2. DAG가 실행하는 python script에서 pandas module을 사용하는 작업 크기 줄여보기
    • keyword : pandas modin, dask
sq1017 commented 1 year ago

230918 Airflow EC2 서버 upgrade

저희가 사용한 기간 동안의 크레딧을 확인해보니 ec2 서버의 스펙을 더 높이는 방향으로 충분히 가능할 것 같아, airflow ec2 서버를 vCPU 2, RAM 4GB로 업그레이드해 보았습니다. 문제가 발생하던 DAG#1에서의 dataframe 작업이 한결 안정화 되었네요!

스크린샷 2023-09-18 오후 4 01 45