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>
'Tech > Airflow' 카테고리의 다른 글
[Airflow] ValueError: unsupported pickle protocol: 5 (1) | 2022.12.13 |
---|---|
Airflow 멀티테넌시 환경 구축하기 (2) | 2022.10.09 |
[Airflow] catchup, depends_on_past, wait_for_downstream (0) | 2022.05.08 |
[Airflow] Airflow 학습(3) (0) | 2022.05.01 |
[Airflow] Airflow 학습 (1) (0) | 2022.04.24 |