Apache Airflow의 개념

hyeok2·2024년 3월 10일
0

Airflow_stu

목록 보기
5/5

Airflow가..뭐죠?

학원수강에서는 airflow가 Dag을 짜서 실행할 작업을 스케쥴에 맞춰서 실행할 수 있다 정도로 이해했다.

실제로 업무를 하면서 기성 기업(제조업기반이거나 안정성을 원하는)들에서는 이런 스케쥴링의 니즈가 엄청남에도 불구하고, 오픈소스에 대해서 알지 못하여 시도조차 해보지 못하는 상태였다. 또한 비용이 부담되어 Azure Data Factory와 같은 유료서비스를 사용하지도 못하며, 그냥 사람이 매일 배치작업을 수동으로 실행하는 현실이었다.

이런 상황을 보니 아.. 개념부터 구축 및 유지 등 다시 공부해서 기초를 탄탄하게 해야겠다고 느꼈고, 따라서 유데미에서 강의를 수강하게 되었다.

airflow란?

워크플로우를 모니터링 하는 툴이다.

AIRFLOW의 장점

  1. 파이썬에서 동적으로 파이프라인 설계가 가능하다.

    → 정적인 xml 등을 이용하지 않아도 된다.

    • airflow에서는 python으로 코드화 되어있어서 언어적 장점이 될 수 있다.
  2. 확장성이 크다 (scalability)

    → 많은 task를 실행 가능하다.

  3. UI를 제공하여 쉽게 다룰 수 있다.

  4. 확장성이 우수하여, 플러그인 추가하기가 쉽다.

핵심 요소(Core components)

에어플로우의 핵심 컴포넌트로는 웹서버, 스케쥴러, 메타스토어, 트리거로 구성되어있다.

메타데이터베이스 또는 메타스토어는 SQLAlchemy이다.

SQLAlchemy란? :  공통 데이타베이스 추상 계층이고 설정하는데 약간의 노력을 요하는 객체 관계형 맵퍼(mapper)이기 때문에, 여러분을 위해 그 역할을 해줄 Flask 확장(extension)이 있다.

  1. 웹서버 : 플라스크등으로 구성되어있다. UI등으로 동작
  2. 스케쥴러 : 태스크를 스케쥴링하는 것.
  3. 메타 데이터베이스는 파이프라인 tasks airflow user 등이 저장된다.
  4. 트리거는 특정한 태스크를 실행하기 위함이다.

-> 부끄럽게도 메타데이터베이스라는 것을 처음 접해보았다..

Executor

실행을 원하는 executor 클러스터를 사용하여 task를 실행해야한다.

  1. k8s 클러스터를 가지고 있다면, k8s 클러스터로 task를 실행시키고 싶을 것이다. 이때 쿠버네티스실행자를 사용하면 된다.

  2. 만약 셀러리 클러스터로 실행시키고 싶다면 셀러리 실행자를 사용하면된다.

    셀러리란? : 파이썬 프레임워크로 여러개의 task를 여러개의 머신으로 실행시키는 프레임워크이다.

celery executor

셀러리 클러스터를 사용한다면 큐와 워커라는 핵심요소가 있다.

  1. 큐는 tasks가 다음 order에게 push되고, 2. 워커는 task를 효과적으로 실행한다.

워커가 없다면, 어디서 task가 실행될 것인지 또는 k8s를 사용할 경우 어느 PODs로 될 것인지 서브 프로세스가 필요하다.

-> 에어플로우는 당연히 셀러리를 이용한다고 생각했지만 k8s executor라는 것도 있다는 것을 알게되었다.

핵심 컨셉(core concepts)

Workflow

워크플로우는 다음의 모든 컨셉의 모음으로 생각 할 수 있다.

1. DAG

댁은 비순환 그래프이다. 절대 순환 그래프이면 안된다.

순환그래프가 된다면 에러가 발생한다.

2. Operator

task라고 생각하면 된다.

하고 싶은 작업을 캡슐화(incapsulated) 한다고 생각하면 된다.

operator의 종류

operator의 종류에는 3가지가 있다.

Action Operators

action operator는 실행하는 오퍼레이터이다.

예를 들면 python 기능을 실행하는 pythonoperator나 bash 기능을 실행하는 bash operator가 있다.

Transfer Operators

migration 하듯 예를 들면 MySQL에서 Redshift로 데이터를 옮기는 작업이다.

Sensor Operators

센서는 어떤 일이 일어날때까지 기다렸다가 다음 task로 넘어가는 작업으로 매우 유용하다.

예를 들면 FileSensor가 있다. filesensor는 내가 사용할 파일을 기다리는 것이다.

-> operator를 세분화 할 수 있겠구나 생각할 수 있었다.

Airflow가 아닌 것.

에어플로우는 데이터 스트리밍 솔루션도 아니고, 데이터 프로세싱 프레임워크도 아니다.

데이터 스트리밍 솔루션

매 순간 데이터 파이프라인을 스케쥴링 할 수 없다는 뜻이다.

데이터 프로세싱 프레임워크

스파크와 같이 데이터를 프로세싱할 수 있는 프레임워크도 아니다.

간단한 프로세싱은 가능하겠지만 대용량의 데이터를 프로세싱하기 위한 툴이 아니며, 에어플로우는 트리거 툴로 사용해야한다. 즉, 고용량의 데이터 프로세싱은 스파크서밋잡오퍼레이터와 같은 오퍼레이터를 사용하여 데이터 프로세싱을 해야한다.

만약 에어플로우로 진행하게 된다면 메모리 누수가 발생할 것이다.

-> 실시간 작업과 데이터 프로세싱에는 적합하지 않다고 알고 있었지만, 에어플로우로 모든 작업을 할 수 있다고 생각할 수 있겠구나 라는 관점에서 생각해볼 수 있었다.

핵심 요소(Core components)
-> 부끄럽게도 메타데이터베이스라는 것을 처음 접해보았다..
메타 데이터베이스는 `파이프라인` `tasks` `airflow user` 등이 저장되는 관계형 db라고 생각하면 될듯하다.

operator의 종류
-> operator를 Action, Transfer, Sensor로 세분화 가능

Airflow가 아닌 것.
-> 실시간 작업과 데이터 프로세싱에는 적합하지 않다고 알고 있었지만, 에어플로우로 모든 작업을 할 수 있다고 생각할 수 있겠구나 라는 관점에서 생각해볼 수 있었다.
profile
땅을 파다보면 흙과 물을 보겠지만, 코드를 파다보면 답이 보일것이다.

0개의 댓글