[Airflow] 2. XCom?

2024. 11. 10. 18:00·데이터/Airflow

출처 : https://marclamberti.com/blog/airflow-xcom/

XCom

  • Apache Airflow에서 사용되는 개념으로, Task 간에 데이터를 전달하는 방법 제공
  • Airflow에서 Task는 서로 독립적으로 실행되므로, 각 Task 간에 데이터를 공유하거나 전달하기 위해 XCom 활용

주요 기능

  • 데이터 공유 : Task 간에 데이터를 전달, 공유 가능하게 하는 기능 제공
  • Push & Pop
    • Push : Task에서 데이터를 Xcom으로 저장
      -> 명시적으로 xcom_push하는 것이 아닌 return으로 자동 push 지원!
    • Pop : 다른 Task에서 Push된 데이터를 꺼내서 사용

장점

  • 간편한 데이터 공유 : 데이터를 전역 변수나 파일 시스템에 저장할 필요 없이, Airflow의 메타 데이터베이스에 저장하여 빠르고 안전한 데이터 공유 가능
  • 비동기 작업 처리 : Task가 병렬로 실행되더라도, XCom을 통해 각 Task 간의 데이터를 동기화하여 Task 실행 가능
  • 디버깅 및 로깅 : XCom을 사용하여 중간 데이터를 기록할 수 있어, 문제 발생 시 디버깅에 유리
  • 유연한 데이터 형식 처리 : XCom은 데이털르 문자열 형식으로 저장하지만, 복잡한 객체도 pickle을 통해 저장 가능

예시

from airflow import DAG
from airflow.operators.python import PythonOperator
from datetime import datetime

def push_data_to_xcom(**kwargs):
    kwargs['ti'].xcom_push(key='my_key', value='some_value')
    # 명시적으로 xcom_push 하는 것이 아닌 return으로 자동 push 가능
    # return some_value

def pull_data_from_xcom(**kwargs):
    value = kwargs['ti'].xcom_pull(task_ids='push_data_task', key='my_key')
    # value = kwargs['ti'].xcom_pull(task_ids='push_data_task', key='return_value')
    print(f"Pulled value: {value}")

default_args = {
    'owner': 'airflow',
    'start_date': datetime(2024, 11, 10),
}

dag = DAG('xcom_example', default_args=default_args, schedule_interval=None)

push_data_task = PythonOperator(
    task_id='push_data_task',
    python_callable=push_data_to_xcom,
    provide_context=True,
    dag=dag,
)

pull_data_task = PythonOperator(
    task_id='pull_data_task',
    python_callable=pull_data_from_xcom,
    provide_context=True,
    dag=dag,
)

push_data_task >> pull_data_task
저작자표시 (새창열림)

'데이터 > Airflow' 카테고리의 다른 글

[Airflow] 6. Slack Alert  (0) 2024.11.18
[Airflow] 5. Backfill?  (1) 2024.11.12
[Airflow] 4. Airflow.cfg?  (1) 2024.11.11
[Airflow] 3. Python Operator / Task Decorator  (1) 2024.11.10
[Airflow] 1. Airflow?  (1) 2024.11.07
'데이터/Airflow' 카테고리의 다른 글
  • [Airflow] 5. Backfill?
  • [Airflow] 4. Airflow.cfg?
  • [Airflow] 3. Python Operator / Task Decorator
  • [Airflow] 1. Airflow?
김줘
김줘
김줘와 같이 데이터, 컴퓨터, IT 공부
  • 김줘
    초보개발자 김줘의 코딩일기
    김줘
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 데이터 엔지니어링 데브코스
      • 데이터
        • Airflow
        • Spark
        • Kafka
        • dbt
      • TroubleShooting
      • Docker
      • AWS
      • 크롤링, 스크래핑, 시각화
        • Selenium
        • 시각화
      • 코딩테스트
        • 프로그래머스
        • 입출력과 사칙연산
        • 정렬
      • Django
      • 자바 공부
      • 끄적끄적
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    aws
    Python
    데이터 엔지니어링 데브코스 4기
    자바
    파이썬
    티스토리챌린지
    cloud
    Airflow
    데이터 엔지니어링 데브코스
    초보개발자
    프로그래밍
    부트캠프
    TiL
    Azure
    에어플로우
    데브코스
    Java
    프로그래머스
    데이터 엔지니어
    오블완
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
김줘
[Airflow] 2. XCom?
상단으로

티스토리툴바