-
내가 문제를 해결하는 방법(feat. 모든 답은 코드에 있다@_@)개발Tip 2023. 5. 27. 12:43728x90
데이터 엔지니어링 업무에서 갑작스럽게 예기치 않은 에러들을 만났을 때,
문제를 해결하는 방법에 대해 짧게나마 생각을 정리해보려고 한다.
문제상황 case:
- airflow에서 센서(정확히는 ExternalTaskSensor)로 dependency가 걸려있는 두 개의 dag에서 에러 발생
- A DAG -> B DAG의 순서로 돌아야하지만 B가 A가 끝나기도 전에 먼저 돌아감
- 센서 작동이 잘 안되거나/ 앞 DAG의 task 결과에 따른 dependency가 반영이 안됨
- 한마디로 스케줄이 꼬여버림
해결방법 고민:
- 문제를 정확히 파악했으면 어떻게 해결해야할까 잠시 고민
- rewind 기법으로 코드를 돌아가보며 머릿속으로 전체 시나리오 시뮬레이션해보기
해결방안 :
- 코드를 돌아가보니 센서는 가장 최신의 dag_run id를 찾아가는데, 해당일에 돌아간 dag를 찾을 수가 없음
- 두개 DAG의 스케줄을 보니 B DAG가 더 뒤에 스케줄이 걸려있음 => 전날의 task 결과를 센싱하고 있었음!
- 즉, 사실상 센싱 기능과 상관없이 B 자체 스케줄에 맞춰 돌아가고 있었던 것
- 따라서 해결책은 두개 DAG의 스케줄 동일하게 바꿔주기
결론:
- 결국 모든 문제의 원인과 정답은 코드에 있다@_@
- 코드는 잘못이 없다. 잘못은 내가 했다.
'개발Tip' 카테고리의 다른 글
[Linux] ec2 방화벽 port 설정 명령어(feat. firewall-cmd) (0) 2024.02.01 나의 인생 첫 오픈소스 컨트리뷰트 성공 후기 (1) 2023.12.17 파일 싱크 자동화를 위한 incrontab 스크립트 개발(feat. git->s3) (0) 2022.12.26 S3/Athena DB명 하이픈 포함 시 이스케이프 문자 처리 (0) 2022.09.16 UnicodeEncodeError: 'ascii' codec can't encode characters (0) 2022.03.06