본문 바로가기
동굴 속 정보

AirFlow Manual on Docker (2)

by 도시형닌자 2020. 12. 21.

[ Airflow 용어 정리 ]

Airflow를 이해하기 위해서는 아래와 같은 용어들을 잘 이해하고 있어야 한다. 그 중에 DAG와 Task 그리고 Operator를 이해하면 거의 다 이해했다고 보면 된다. DAG는 Airflow에서 동작하는 워크플로우라고 보면 된다. DAG 안에는 여러개의 Task가 있고 각각의 Task가 조건에 따라 순서대로 동작된다. Task 안에는 Operator가 있고 Operator에 따라 Bash shell, Python, DB 등으로 명령을 할 수 있다.

용어 내용
DAG : 유향 비순환 그래프 Directed Acyclic Graph. 실행하고 싶은 일(task)들의 실행 순서를 구조화하고 실행 context를 제공
Task Dag 안에 하나의 일(Task)의 단위
Task instance 각 Task의 개별 상태를 의미하며 ‘running’, ‘success’, ‘failed’, ‘skipped’, ‘up for retry’ 등의 상태값 보유
Operator 실제 Task 가 어떻게 동작해야하는지에 대한 표현한 구현체
Hook 외부 플랫폼(aws, slack 등),  데이터베이스(mysql, hive 등)를 쉽게 사용할 수 있는 오퍼레이터의 한 종류
Sensor 지정된 행동이 성공했는지 주기적으로 확인하는데 쓰이는 오퍼레이터
backfill 스케쥴 시작 시간이 과거일 경우, 과거부터 현재까지 실행되어야 할 DAG를 실행

 

 

[ 실행자 Executor ]

 

LocalExecutor는 기본 설정이나 워크로드가 적거나 또는 대부분의 작업이 AWS 또는 Azure 서비스와 같은 클라우드 서비스에서 실행할 경우 사용한다. 왜냐하면 이때는 Airflow가 Executor를 실제로 실행하지 않기 때문이다. Airflow가 다른 서비스와 대화하는 중개자 역할만 한다면, LocalExecutor도 고려 가능한 선택이다. SequentialExecutor 및 DebugExecutor는 로컬 테스트 용으로 보면 된다. 현업에서는 CeleryExecutor 및 KubernetesExecutor가 훌륭한 선택이 될 것이다.

 

Executor는 Airflow 설정 파일인 "/usr/local/airflow/airflow.cfg" 에서 "executor = LocalExecutor" 와 같은 방식으로 설정 가능하다. Default는 "SequentialExecutor"이고 RMQ를 설치하여 "CeleryExecutor"를 사용하면 airflow의 기능을 100% 사용할 수 있다.

용어 내용
SequentialExecutor(기본) 이름에서 알 수 있듯이 작업은 순차적으로 실행됩니다. 분기 연산자가 있어도 작업은 ’branch_a’, ‘branch_b’, ‘branch_c’, ‘branch_d’ 순서대로 하나씩 실행된다. SequentialExecutor는 SQLite와 함께 사용 가능하다.
LocalExecutor LocalExecutor는 소규모 프로덕션 환경에서 작업을 수행하면서 Airflow 여러 작업을 병렬로 테스트하는 데 탁월하다. LocalExecutor는 Airflow 스케줄러와 동일한 노드에서 작업을 실행하지만 프로세서는 다르다. 실제 작업을 배포하는 동안, 다른 유형을 사용하는 실행자가 있다. 예를 들어 KubernetesExecutor는 각 노드 내에서 LocalExecutor를 사용하여 작업을 실행한다.

LocalExecutor는 메타 데이터 데이터베이스가 SQLite가 아닌 MySQL 또는 PostgreSQL이어야 한다. LocalExecutor가 설정되면 Airflow Executor 기능의 90 %를 사용할 수 있다. Executor의 다른 10 % 기능은 분산 방식으로 Airflow를 실행하는 것이다.
CeleryExecutor 작업자들이 메시지 큐 플랫폼인 Celery를 통해 작업을 할당한다. 대부분의 초기 Airflow에서 CeleryExecutor를 사용하기 때문에 Airflow의 가장 성숙한 옵션이다. Celery를 사용하면 Airflow는 작업을 여러 작업자로 확장하여 작업을 더 빨리 완료 할 수 있다.
MesosExecutor Kubernetes는 Mesos보다 널리 채택되기 때문에 Airflow 커뮤니티에서도 MesosExecutor의 사용 중단을 논의하고 있습니다. 사용하지 않는 것이 좋다.
DaskExecutor 사용 및 지원이 적기 때문에 안타깝게도 DaskExecutor를 선택하지 않는 것이 좋다.
KubernetesExecutor KubernetesExecutor는 버전 1.10.0에서 도입되었으며 Bloomberg가 기여했다. 그래서 Airflow가 Kubernetes 에코 시스템과 통합하게 되었다. 처음 몇 개의 부 버전은 버그가 있지만 최근 버전은 안정적이다.

Kubernetes를 사용할 경우 KubernetesExecutor가 가장 적합할 수 있다. KubernetesExecutor는 작업에 대해 다양한 도커 이미지를 사용할 수 있어 유연성이 좋다.
DebugExecutor DebugExecutor는 1.10.8에서 도입되었다. Executor로 분류되지 않을 수도 있다. 이 DebugExecutor의 목적은 IDE로 실행하는 것이다. 한 번에 하나의 작업을 실행하는 SequentialExecutor와 유사하며 센서 작업을 지원한다.

 

 

[ Airflow Interface ]

아래 명령어로 Airflow가 실행되면 웹으로 접근할 수 있다. Docker로 설치되었다면 "http://localhost:8080" 으로 접속이 된다. 접속하면 명령어가 잘 수행 되었다면 Airflow Bar 를 볼 수 있다. 이 Bar는 사용자가 사용하기 편하도록 여러 도구들을 제공한다. 

airflow webserver -p 8080

DAGs에서는 DAG tutorial 을 확인할 수 있고 사용자가 생성한 DAG도 확인할 수 있고 실행도 가능하다. Data Profiling은 간단한 쿼리를 작성할 수 있는 도구를 제공한다. Browse는 Airflow 동작 관련 내용의 기록들을 확인할 수 있다. Admin 에서는 사용자 생성이나 설정 같이 관리 기능을 수행할 수 있다. 

 

DAG를 수행하면 아래처럼 워크플로우를 확인할 수 있다. 파이썬에서 Operator를 생성하고 ">>"와 "<<" 로 작업의 순서를 정해서 순차적으로 진행할 수 있다. 또한 각 작업에 대한 로그들을 확인할 수 도 있고 개별적으로 Run하여 실행도 가능하다. 그 외 작업이 만들어 낸 결과들을 Clear한다던가 잘 볼 수 있게 표시해 놓는 기능도 존재한다.

 

 

3번째 Airfolw 이야기에서는 핵심 Operator를 사용한 DAG를 파이썬으로 직접 만들어 보고 결과를 확인해 보도록 하겠다. 로컬과 도커간의 공유폴더 안에 DAG를 넣고 웹을 통해 실행하고 사용된 핵심 기능들을 살펴본다.

'동굴 속 정보' 카테고리의 다른 글

SCI 논문을 탐해보자  (0) 2020.12.27
AirFlow Manual on Docker (3)  (0) 2020.12.22
AirFlow Manual on Docker (1)  (0) 2020.12.20
강남 성지 중에서 가장 강력한 성지  (6) 2020.12.19
미니멀 But 소리는 맥시멀 B&O P2  (0) 2020.12.18