ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Apache Airflow, ETL Workflow 개념
    Python 2021. 9. 8. 23:43

    ETL Workflow 개념

    ETL(Extract, Transform, Load)에 관해 들어보신 적 있나요? 쉽게 큰 조직에서 데이터를 정제하는데 쓰는 방법을 말합니다. 조직이 크다는 의미는 다시 말해 데이터의 소스가 한군데가 아니라는 뜻입니다. ETL은 여러 곳에 퍼져있는 정제되지 않은 데이터를 추출(Extract)하고 용도에 맞게 변형(Transform)하고 그렇게 정제된 데이터를 한곳에 로드(Load)하는 프로세스를 의미합니다. 

     

     

     

    Apache Airflow

    Apache Airflow는 위에서 설명한 ETL 워크플로우를 편리하게 해주는 도구이며 파이썬으로 작성됐습니다. 공식 홈페이지 설명에 따르면 "에어플로우는 워크플로우를 프로그래밍적으로 작성하고 스케줄링하고 모니터링하는 플랫폼입니다." 라고 소개합니다. 또한 이름에서 알 수 있듯 Apache 프로젝트입니다. 2014년 10월에 에어비엔비(Airbnb)에서 Maxime Beauchemin이 프로젝트를 시작했고 2015년 6월에 에어비엔비 Github에 오픈소스로 공개했습니다. 이후 2016년 3월 아파치 소프트웨어 제단 인큐베이터 프로그램에 들어가게 되었습니다. 그리고 2019년 1월에 아파치 탑레벨 프로젝트로 승격되었죠.

     

    에어플로우에서는 작업뭉치를 DAG(Directed Acyclic Graphs)라는 것을 통해 작성합니다. DAG 안에 여러 Task(작업)을 비순환적으로 연결시켜 스케줄링하게됩니다. 즉 어떤 작업이 완료되면 어떤 작업을 실행시키겠다라는 작업 순서를 짜는거죠. 대략 아래와 같이 DAG를 작성합니다.

    with DAG(
        'tutorial',
        default_args=default_args,
        description='A simple tutorial DAG',
        schedule_interval=timedelta(days=1),
        start_date=days_ago(2),
        tags=['example'],
    ) as dag:
        t1 = BashOperator(
            task_id='print_date',
            bash_command='date',
        )
    
        t2 = BashOperator(
            task_id='sleep',
            depends_on_past=False,
            bash_command='sleep 5',
            retries=3,
        )
        t1 >> t2

     

    위에서 작성한 DAG 보시면 대략 이해가실거라 생각합니다. t1 작업이 완료된 후에 t2 작업이 시작되고 실행간격은 1일입니다. 좀 더 자세히보면 t1, t2 둘 다 BashOperator라는 것을 사용했는데 bash 명령어를 실행시키는 Operator입니다. t1는 현재 일시를 출력할 것이고 t2는 5초 동안 sleep 상태를 유지할 것입니다. 별거 없죠? DAG작성 자체는 어렵지 않습니다. 하지만 저 DAG가 일정한 간격으로 작동해야 하고 안에 포함된 작업들이 정의된 순서대로 작동해야 합니다. 그리고 작업이 중간에 실패하면 어떻게 해야하는지도 고민해봐야 할 것입니다. 이런 고민을 해결하기 위해 Apache Airflow의 구조를 살펴봅시다.

     

     

     

    Apache Airflow 구조

    https://airflow.apache.org/docs/apache-airflow/stable/concepts/overview.html

     

    • Scheduler: 정의된 스케줄에 따라 해당 작업 실행 명령을 내립니다. 실행할 작업을 executor에게 제출합니다.
    • Webserver: 어떤 작업들이 있고 작업들이 어떻게 돌아가고 있고 어떻게 정의되어있는지 웹 UI를 통해 확인할 수 있습니다. 또한 여기서 작업을 강제로 Trigger할 수도 있습니다.
    • Worker: 실제로 작업을 수행합니다. 
    • Metadata Database: DAG 수행 기록 등 메타데이터를 저장하는 데이터베이스입니다. 

    웹서버는 아래와 같은 UI를 제공합니다.

    Airfow UI

     

    Airflow를 구성하는 컴포넌트가 많죠? 처음 접하면 복잡할 수 있습니다. 각 컴포넌트가 하나의 머신에서 돌아갈 수도 있고 여러 대에서 돌아갈 수도 있습니다. 저같은 경우는 Kubernetes에서 돌리는데 Helm Chart로도 공개되어 있어서 본인 환경에 맞게 잘 변형하면 쉽게 배포해서 쓸 수 있습니다. 

     

     

     

    지금까지 Apache Airflow에 관해 대략적으로 알아봤습니다. 좀 더 상세한 내용은 다른 글로 찾아뵙도록 하겠습니다!!

     

    반응형

    댓글

Designed by Tistory.