[Airflow] AIRFLOW, DAG 그리고 Operator

HAHAHELLO·2024년 8월 5일

에어플로우

목록 보기
1/2

AIRFLOW

Apache Airflow는 데이터 파이프라인과 작업 워크플로우를 자동화하고 관리하기 위한 플랫폼이다. 주로 데이터 엔지니어링, ETL(Extract, Transform, Load) 작업, 작업 스케줄링 등에 사용된다.

주요 특징

  • 워크플로우 정의 : Airflow는 DAG을 사용하여 워크플로우를 정의한다. DAG은 일련의 작업(Task)을 정의하고 이들 사이의 의존성을 설정한다.
  • 모듈식 : Airflow는 다양한 오퍼레이터(Operators)를 제공하여 다양한 작업을 수행할 수 있다. 예를 들어, BashOperator, PythonOperator, PostgresOperator 등 다양한 작업을 쉽게 정의할 수 있다.
  • 스케줄링 : DAG은 스케줄에 따라 작업을 자동으로 실행하도록 설정할 수 있다. 매일, 매주, 특정 날짜 등 다양한 주기로 작업을 스케줄링할 수 있다.
  • 모니터링 : Airflow는 웹 UI를 통해 DAG과 작업의 상태를 모니터링할 수 있다. 성공, 실패, 진행 중인 작업의 상태를 실시간으로 확인할 수 있다.
  • 확장성 : Airflow는 클러스터링과 분산 처리에 적합하도록 설계되어 있어, 작업을 여러 노드에 분산하여 실행할 수 있다.
  • 플러그인 : Airflow는 사용자 정의 플러그인을 지원하여 기능을 확장할 수 있다. 커스텀 오퍼레이터, 센서, 후크 등을 추가할 수 있다.

DAG

DAG (Directed Acyclic Graph)는 Airflow에서 작업의 흐름과 의존성을 정의하는 구조다. DAG은 노드와 엣지로 구성된 그래프이며, 노드는 작업(Task)을 나타내고, 엣지는 작업 간의 의존성을 나타낸다.

DAG의 주요 구성 요소

  • DAG 객체 : Airflow의 DAG 객체는 전체 작업 흐름을 정의한다. DAG 객체는 작업 간의 순서와 의존성을 설정하며, DAG의 스케줄링 주기를 정의한다.
  • Task (작업) : DAG 내의 작업(Task)은 개별적으로 실행될 작업을 정하며 각 작업은 오퍼레이터를 사용하여 정의된다.
  • Task Dependencies (작업 의존성) : 작업 간의 실행 순서를 정의한다. >> 또는 << 연산자를 사용하여 작업 간의 의존성을 설정할 수 있다.
  • Schedule Interval (스케줄 간격) : DAG이 실행되는 주기를 정의한다. Cron 표현식, @daily, @hourly 등 다양한 방식으로 설정할 수 있다.
  • Default Arguments (기본 인자) : DAG과 각 작업에 공통적으로 적용할 기본 인자들을 정의한다. 예를 들어, start_date, retry 횟수, owner 등이 있다.

자주 사용하는 Operator

BashOperator
기능: 쉘 명령어를 실행한다.
용도: 간단한 스크립트 실행, 셸 명령어, 그리고 Unix 명령어를 사용할 때 유용하다.

PythonOperator
기능: 파이썬 함수를 실행한다.
용도: 파이썬 코드 또는 로직을 작업으로 실행할 때 사용한다.

EmptyOperator
기능: 아무 작업도 수행하지 않는다.
용도: DAG 내에서 작업 간의 의존성을 설정하거나, DAG의 흐름을 정의한다.

BranchPythonOperator
기능: 조건에 따라 실행할 작업을 결정한다.
용도: 특정 조건에 따라 여러 경로 중 하나를 선택하는 경우에 사용한다.

PythonVirtualenvOperator
사용: pip install virtualenv
기능: 작업 실행 전에 지정된 Python 패키지를 설치하고 독립적인 가상 환경을 설정한다. 가상 환경 내에서 필요한 파이썬 패키지 및 의존성을 관리한다. 가상 환경 내에서 지정된 파이썬 함수를 실행한다.
용도: 의존성을 격리하고 환경 일관성을 유지하며 패키지 관리가 필요할 때 사용한다.

  • python_callable: 사용할 함수명을 입력하여 task에서 함수를 사용한다.
  • requirements: pip install과 비슷한 개념으로 git+로 연결한 레파지토리 또는 브랜치의 환경설정을 가져오는 역할을 한다.
  • system_site_packages: Python의 가상 환경을 사용할 때, 시스템에 이미 설치된 python 패키지들을 가상 환경에서 접근할 수 잇도록 허용할지를 결정하는 설정이다. 기본값은 'False'이며 'True'로 설정하면 가상 환경에서 시스템 전역에 설치된 다른 패키지들도 사용할 수 있다.
profile
데이터 엔지니어가 되어 봅시다 🌈

0개의 댓글