Apache Airflow 2.10.0의 특징들

Apache Airflow 2.10.0이 출시된 지 어느덧 4개월이 다되어 갑니다.
Airflow한국사용자모임에서도 해당 버전을 이미 쓰고 계신 분들도 많을 것이고, 다가오는 3.0 버전을 기대하고 계신분들도 많을 것으로 예상됩니다.

아래는 Airflow 2.10.0 버전의 특징에 대해 정리된 글입니다.

이미 해당 사용 중이시라면, 이 버전에서 특히 유용하거나 만족스러웠던 기능은 무엇인가요? 아니면, 여전히 개선이 필요하다고 느껴지는 부분은 어떤 것인지 같이 공유하며 이야기 나누면 재밌겠네요 :wink:


Apache Airflow 2.10.0은 강력한 데이터셋 개선과 획기적인 Hybrid Excutor를 탑재하여 워크플로우 기능을 새롭게 정의할 획기적인 버전입니다.


Apache Airflow 2.10.0이 출시되어 기쁘네요. 이 버전은 우리 커뮤니티에 큰 도움이 될 다양한 주목할 만한 개선 사항과 새로운 기능을 제공합니다.

세부사항:
:package: PyPI: apache-airflow · PyPI
:books: 문서: What is Airflow®? — Airflow Documentation
:hammer_and_wrench: 릴리스 노트: Release Notes — Airflow Documentation
:whale: Docker 이미지: “docker pull apache/airflow:2.10.0”
:busstop: 제약 조건: GitHub - apache/airflow at constraints-2.10.0

이제 Airflow는 기본적으로 원격 측정 데이터를 수집합니다.

Airflow 2.10.0이 출시되면서 여기에 설명된 대로 기본 원격 측정 데이터 수집을 도입했습니다 . 이 데이터는 Airflow 유지 관리자가 다양한 배포에서 Airflow가 어떻게 활용되는지 더 깊이 이해하는 데 중요한 역할을 할 것입니다. 이 정보에서 도출된 인사이트는 패치, 마이너 릴리즈 및 보안 수정의 우선 순위를 정하는 데 매우 유용합니다. 또한 이 데이터는 개발 로드맵과 관련된 주요 의사 결정에 정보를 제공하여 Airflow가 커뮤니티의 요구 사항에 따라 계속 발전할 수 있도록 합니다.

데이터 수집에 참여하지 않으려는 배포의 경우 [usage_data_collection] enabled 옵션을 False 로 설정하거나 SCARF_ANALYTICS=false 환경 변수를 사용하여 쉽게 거부할 수 있습니다.

Multiple Executor Configuration (이전 “Hybrid Execution”)

각 executor에는 고유한 장단점이 있으며, 일반적으로 지연 시간, 격리 및 컴퓨팅 효율성을 균형있게 조절합니다. 기존에는 Airflow 환경이 단일 executor로 제한되어 있고, 모든 유형의 작업에 완벽하게 적합한 executor는 없기 때문에 사용자가 trade-off를 고민해야 했습니다.

단일 Airflow 환경 내에서 여러 executor를 동시에 사용할 수 있는 새로운 기능을 소개합니다.
이러한 유연성을 통해 사용자는 다양한 작업에 대해 다른 executor의 특정 강점을 활용하여 전반적인 효율성을 개선하고 약점을 완화할 수 있습니다. 사용자는 전체 환경에 대한 기본 executor를 설정하고 필요한 경우 특정 실행자를 개별 DAG 또는 Task에 할당할 수 있습니다.

[core]
executor = 'LocalExecutor,CeleryExecutor'

dag 작성자의 작업을 더 쉽게 하기 위해 executor 구성에서 지정할 수 있는 executor에 대한 별칭을 지정할 수도 있습니다.

[core]
executor = 'LocalExecutor,KubernetesExecutor,my.custom.module.ExecutorClass:ShortName'

DAG 작성자는 Task에서 사용할 executor를 지정할 수 있습니다.

BashOperator(
    task_id="hello_world",
    executor="ShortName",
    bash_command="echo 'hello world!'",
)

@task(executor="KubernetesExecutor")
def hello_world():
    print("hello world!")

DAG 수준에서 executor를 지정할 수도 있습니다.

def hello_world():
    print("hello world!")

def hello_world_again():
    print("hello world again!")

with DAG(
    dag_id="hello_worlds",
    default_args={"executor": "ShortName"},  # DAG의 모든 task에 적용
) as dag:
    # 모든 task는 자동으로 기본 인수의 executor를 사용합니다.
automatically
    hw = hello_world()
    hw_again = hello_world_again()

DatasetAlias를 통한 동적 데이터셋 스케줄링

Airflow 2.10에는 outlets, task의 inlets 및 DAG의 schedule 의 값으로 전달될 수 있는 DatasetAlias 클래스가 제공됩니다 . DatasetAlias의 인스턴스는 실제 데이터셋으로 동적으로 확인됩니다. 다운스트림은 확인된 데이터셋 또는 별칭에 따라 달라질 수 있습니다.

DatasetAlias 데이터 세트를 고유하게 식별하는 인자name 이 하나 있습니다 . task는 먼저 별칭을 outlet으로 선언하고 outlet_events 또는 yield Metadata를 사용하여 이벤트를 추가해야 합니다.

outlet_events를 통해 task 실행 중 데이터셋 이벤트를 내보냅니다.

from airflow.datasets import DatasetAlias

@task(outlets=[DatasetAlias("my-task-outputs")])
def my_task_with_outlet_events(*, outlet_events):
    outlet_events["my-task-outputs"].add(Dataset("s3://bucket/my-task"))

task 실행 중에 메타데이터를 생성하여 데이터셋 이벤트를 내보냅니다.

from airflow.datasets.metadata import Metadata

@task(outlets=[DatasetAlias("my-task-outputs")])
def my_task_with_metadata():
    s3_dataset = Dataset("s3://bucket/my-task}")
    yield Metadata(s3_dataset, alias="my-task-outputs")

데이터셋 별칭을 기반으로 스케줄링하는 데는 두 가지 옵션이 있습니다. DatasetAlias 또는 실제 데이터셋을 기준으로 스케줄합니다.

with DAG(dag_id="dataset-alias-producer"):
    @task(outlets=[DatasetAlias("example-alias")])
    def produce_dataset_events(*, outlet_events):
        outlet_events["example-alias"].add(Dataset("s3://bucket/my-task"))

with DAG(dag_id="dataset-consumer", schedule=Dataset("s3://bucket/my-task")):
    ...

with DAG(dag_id="dataset-alias-consumer", schedule=DatasetAlias("example-alias")):
    ...

데이터셋 별칭 UI 향상

이제 사용자는 각 교차 종속성 그래프의 범례에서 해당 아이콘/색상과 함께 데이터셋 별칭을 볼 수 있습니다.

Airflow UI의 다크 모드

Airflow 2.10에는 새로운 다크 모드 기능이 포함되어 있으며, 특히 조명이 어두운 환경에서 눈에 더 편안한 대체 시각적 테마를 제공하여 사용자 경험을 향상하도록 설계되었습니다. 네비게이션 바 오른쪽에 있는 초승달 아이콘을 토글하여 밝은 모드와 어두운 모드 사이를 전환할 수 있습니다.


Task 인스턴스 기록

Apache Airflow 2.10.0에서 task 인스턴스가 재시도되거나 지워지면 실행 기록이 유지됩니다. 그리드 뷰에서 작업 인스턴스를 클릭하면 이 기록을 볼 수 있으며, 로그, 실행 기간, 실패와 같은 각 시도에 대한 정보에 액세스할 수 있습니다. 이 기능은 작업 실행 프로세스에 대한 투명성을 개선하여 DAG를 더 쉽게 문제 해결하고 분석할 수 있도록 합니다.

기록은 각 특정 실행에 대한 Task 인스턴스 속성의 최종 값을 표시합니다. 로그 페이지에서 작업 인스턴스의 각 시도에 대한 로그에 액세스할 수도 있습니다. 이 정보는 디버깅 목적으로 유용합니다.

데이터셋 UI 향상

데이터셋 페이지가 개편되어 추가 세부 정보(추가 기능, DAG 소비, 작업 생성 등)를 담은 집중적인 데이터 세트 이벤트 섹션이 포함되었습니다.

이제 새 탭에서 별도의 종속성 그래프와 데이터셋 목록 페이지가 있어 사용자 경험이 향상되었습니다.

이제 데이터셋 이벤트는 각 DAG 실행의 ‘세부 정보’ 탭과 DAG 그래프에 모두 표시됩니다.

그래프에서 데이터셋 전환

이제 DAG 그래프에서 데이터셋을 전환할 수 있습니다.


DAG 그래프 뷰의 데이터 세트 조건

이제 논리 게이트가 있는 그래프 뷰를 표시합니다. 실제 이벤트가 있는 데이터셋은 다른 테두리로 강조 표시되어 선택한 실행을 트리거한 원인을 더 쉽게 볼 수 있습니다.

DAG 그래프의 데이터셋 이벤트 정보

DAG 실행의 경우 이제 사용자는 그래프 보기에서 직접 연결된 데이터셋 이벤트를 볼 수 있습니다.

On-demand DAG Re-parsing

2.10에서는 이제 사용자가 DAG 목록 및 DAG 세부 정보 페이지에서 아래 버튼을 사용하여 필요에 따라 DAG를 다시 구문 분석할 수 있습니다.

추가된 새로운 기능

모든 기능을 다 나열하기에는 너무 많기 때문에 흥미로운 새로운 기능 중 몇 가지만 소개합니다.

  • 지연 가능한 operator는 이제 worker를 거치지 않고도 triggerer에서 직접 실행할 수 있습니다. 이는 sensor와 같은 특정 operator에게 특히 효율적이며 팀의 시간과 비용을 모두 절약하는 데 도움이 될 수 있습니다.
  • 중요한 executor 로그가 이제 task 로그에 통합되었습니다. executor가 task를 시작하지 못하면 관련 오류 메시지를 task 로그에서 확인할 수 있어 디버깅 프로세스가 간소화됩니다.

기여자

이번 릴리즈에 기여해주신 모든 분들께 감사드립니다. 특히 Andrey Anshin, Brent Bovenzi, Daniel Standish, Ephraim Anierobi, Hussein Awala, Jarek Potiuk, Jed Cunningham, Jens Scheffler, Tzu-ping Chung, Vincent 와 63명 이상의 다른 분들께도 감사의 말씀을 전합니다.

Apache Airflow 2.10.0을 사용해 보시기 바랍니다!


본문: https://airflow.apache.org/blog/airflow-2.10.0/

1개의 좋아요

저는 디버깅부분에서 편해진 것이 저는 이번 버전에서 가장 좋게 느꼈졌습니다.
task에 로그가 남는다던가 데이터 셋을 편하게 활용할 수 있게된게 좋았어요ㅎㅎ

하지만 개인적으로 다크모드가 들어가서 좋긴한데 디자인이 좀 구린거 같은…

2개의 좋아요