ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Airflow] Executor의 종류와 사용가이드라인 알아보기(Sequential, Local, Celery, Kubernetes)
    데이터 엔지니어링/AirFlow 2022. 8. 18. 20:22
    반응형

    Airflow Executor란?

    • executor란 작업자들에게 작업을 실행 시키는 역할을 한다.
    • 종류로는 SequentialExecutor, LocalExecutor, CeleryExecutor, KubernetesExecutor등이 있다.
    • LocalExecutor는 병렬처리까지만 가능하고 클러스터 형으로 작업을 나눌수는 없다.
    • CeleryExecutor, KubernetesExecutor는 클러스터를 구성해야 한다.

     

    기본 제공 Executor

    Airflow 처음 설치를 하면 기본 제공되는 것이 바로 SequentialExecutor이다. 순차적으로 진행하는 것만 할 수 있다는 것이다. Executor에서 일어나는일을 순차적으로만 실행한다면 어떻게 될까 작업이 느려지거나 동시에 일어나서 진행해야하는 작업을 하지 못한다. 이렇게 하면 병렬처리는 하지 못한다. 현대 소프트웨어에서 병렬처리를 하지 못한다면 어떻게 될까? 작업 처리가 현저히 느려지고 원하는 시간에 작업을 처리하지 못해 문제가 될 수 있다. 그래서 SequentialExecutor는 사용하는데 문제가 되었다. 상용버전에는 거의 사용하지 않는다.

     

    다른 Executor

    병렬처리까지 진행하는 Executor가 따로 있는데 이것이 바로 LocalExecutor이다. 그리고 DB도 기본 제공인 SQLite를 사용하지 않고 다른 상용버전 DB를 사용하여야한다. 하지만, 이마저도 문제가 되었다. 병렬처리만 한다고 해서 되는 것이 아니라, 비동기 적으로 처리해야하는 업무도 있기 때문이다. 그래서 Celery, 와 Kubernetes Executor가 등장해서 상용버전에서는 주로 celery, kubernetes를 사용하게 된다. 아래는 Airflow에서 사용하는 Executor에 관해 알아 본다

     

     

     

    • default executor이다.
    • 클러스터를 구성하지 않고 작업은 순차적으로 진행된다.
    • scheduler와 같이 진행된다.
    • DB는 보통 Sqlite를 사용한다. 다른 db는 오버스펙인 듯
    • 쉽고 간결하다 기본 설정이라 고칠게 없다.
    • 스케일 인아웃 불가능
    • 순차 실행이라 병렬 처리 불가능
    • 테스트 디버깅용으로 좋다.

     

    • scheduler 와 함께 동작한다.
    • 병렬 처리 가능
    • 쉽게 셋팅 가능
    • 가졉고 싸다
    • 병렬처리 가능하다.
    • 스케일 인아웃을 할 수 없다.
    • 테스트 디버깅용으로 좋다 작은 스케일에서 사용하기 좋다.

     

    • rabbitMQ를 사용하여야 한다,
    • 분산 태스크 처리가 가능하다.
    • 수평 구조로 스케일링 할 수 있다
    • 내 결함성을 제공한다.
    • 자원 낭비가 있을 수 있다.
    • 비용 효율적이지 않다.
    • production에 적합하다.
    • worker가 항상 동작하고 있어야한다.

     

    • kubernetest API를 사용하여 매니지 된다.
    • 스케일러블 하기 쉽다.
    • 내 결함성을 가진다.
    • 자원을 개별적으로 태스크 돌릴수 있다.
    • k8s를 잘 알아야 사용 가능하다.
    • production에 적합하다.
    • 워커를 필요할 때 사용이 가능하다.

     

     

     

    사용가이드 라인 

    LocalExecutor 상용버전에는 적합하지 않다. 하지만, 작은 기업이나, 작은 업무의 orchestration에 이용한다면 상용버전에도 사용하여도 된다. DB 는 꼭 상용버전으로 교체하여야한다.

     

    Celery Executor는 상용버전에는 적합하나 Rabbimq나 Redis의 큐나 세션을 이용하여 Executor의 이중 작업을 꼭 방지 해야한다. 작업이 두번 실행 되면 안되기때문이다. 그리고 Celery에 경우 클러스터를 구축하여야 하기 때문에 Zookeeper나, etcd, consul을 사용하여 자기 자신이 replication을 하는 클러스터를 구축을 해야하는데, web ui, scheduler, rabbimq, 클러스터 broker3대, DB서버 등을 계산한다면 컴퓨터가 최소 4~5대 정도는 필요하다. orchestration툴에 5대의 컴퓨터는 조금 오버 스펙이라고 생각하여 잘 사용하지는 않는 것 같다. 제대로 관리 하고 싶다면 사용해보자.

     

    Kubernetes의 경우에는 Container를 만들고 작업을 실행한다음 바로 삭제 하기 때문에 Log를 제한적으로 볼수 밖에 없다. 그래서 K8s에 대해 다 아는 분이 꼭 사용하여야 한다. Celery보다 자유로운 구성을 할 수 있어 Celery보다 resource를 효율적으로 사용할 수 있다. 하지만 러닝커브가 큰 k8s를 잘 다뤄야 한다는 문제점이 있고, Task를 수행한 Executor를 바로 삭제하기 때문에 Log가 많은 정보를 담고 있지 않다.

     

     

     

     

     

    참고 자료

    https://www.youtube.com/watch?v=TQIInLmKM4k&t=4s

    반응형

    댓글

Designed by Tistory.