본문 바로가기

Tech/Airflow

[Airflow] Airflow 학습 (2)

Airflow는 그럼 어떻게 설치하나? 아래 docker-compose.yml를 참고하자.

https://airflow.apache.org/docs/apache-airflow/stable/docker-compose.yaml

 

 

Airflow를 Docker로 실행하고, 웹 서버를 접속해보면 다음과 같은 화면을 볼 수 있다.

Pause/Unpause DAG: 비활성/활성 버튼이다.

DAG: DAG 이름이다.

Owner: DAG 파일을 만든 소유자이다. 생성자 추적시 사용된다.

Runs: DAG 파일의 실행 상태를 나타낸다. (Success, Running, Failed)

Schedule: DAG 파일의 실행 주기이다.

Last Run: DAG 파일이 가장 최근으로 동작한 시간이다.

Recent Tasks: 현재 진행 중인 DAG Run 상태를 볼 수 있다. 실행했던 작업의 기록은 알 수 없다.

Action: 실행/재실행/삭제 (삭제 시, 메타데이터만 삭제된다. 파일이 삭제되지는 않는다.)

 

 

해당 DAG을 클릭하여 Tree View에 들어가 DAG을 Unpause하면 아래처럼 보인다.

왼쪽은 DAG의 트리거된 작업 순서를 Tree view로 보여주는 것이고,

오른쪽은 DAG이 실행되고 난 후, 작업들의 상태를 보여주는 것이다.

오른쪽의 각 네모들은 왼쪽 트리의 작업 하나를 뜻한다.

초록색으로 전부 색칠된 것은 Success를 뜻한다.

 

 

다음으로 Graph View를 보면 DAG 파일에 정의된 순서를 좀 더 시각적으로 볼 수 있다.

오른쪽의 Auto-refresh의 경우 활성화 하면, 작업의 진행 상태, 순서를 라이브하게 볼 수 있다.

 

 

각 작업을 좀 더 세부적으로 확인하고 관리할 수 있다.

위 작업 중 하나를 클릭하면 (ex. runme_0) 아래 처럼 보인다.

Instance Details: 해당 작업이 어떤 작업인지 세부적으로 알 수 있다.

Rendered: 해당 ****작업이 실행되는 시점에서 주입된 데이터를 확인 할 수 있다.

Log: 작업이 어떻게 실행되었는지에 대한 로그를 확인 할 수 있다. (중요)

All Instance: 작업에 해당하는 모든 인스턴스를 표시한다.

Filter Upstream: 해당 작업 전의 작업까지 모두 필터하여 본다.

Task Actions에서는 종속성, 상태를 무시하고 실행할 수 도 있고

특정 작업을 다시 실행시킬 수 도 있다.

 

 

다음으로는 Gantt이다.

각 작업들이 언제 어떤 순서로 실행됬는지 볼 수 있다.

지금 보는 DAG의 경우는 순서대로 실행되었지만,

여러개가 병렬적으로 수행되는 경우에는 동일한 시간대에 중복된 위치의 블록들이 여러개 생길 수 있다.

 

 

다음으로는 Code이다.

내가 작성한 DAG File이 잘 수정 되었는지, 생성되었는지 확인 하는데 활용한다.

 

 

UI로 모든 것을 해결할 수는 없다.

필요에 따라서는 CLI가 필요하다.

# airflow -h

 

DAG 실행이 잘못된 경우 다시 실행하는 명령어

airflow dags backfill -s <start day. ex.)2021-01-01> -e <end day. ex.)2021-01-05> --reset-dagruns

 

DAG의 작업 리스트를 확인 할 수 있는 명령어

새로 추가 시, 재대로 적용되었는지 확인하는데 쓰인다.

airflow tasks list <DAG Name. ex.)example_bash_operator>

 

이부분이 CLI의 가장 중요한 부분이다

새로운 DAG을 추가했을 시,

해당 DAG의 작업들이 제대로 동작하는지 테스트를 할 필요가 있다.

해당 명령어를 통해 실행해도 메타스토어에 저장되지 않는다!

테스트 코드를 별도로 짤 필요없이, 해당 커맨드를 잘 활용한다면 Airflow DAG File을 작성하는데 있어서 엄청난 퍼포먼스를 낼수 있을 것 같다.

airflow tasks test <DAG Name. ex.)example_bash_operator> <Task Name. ex.)runme_0> <Task Start Day. ex.)2021-01-01>
반응형