Работали ли вы с Apache Airflow?

«Работали ли вы с Apache Airflow?» — вопрос из категории Apache Airflow, который задают на 33% собеседований Data Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, я использовал Apache Airflow для оркестрации ETL/ELT-пайплайнов и планирования задач. Вот ключевые аспекты моего опыта:

1. Разработка DAG-ов:

  • Создание Directed Acyclic Graphs для описания зависимостей задач.
  • Использование различных операторов: PythonOperator, BashOperator, DockerOperator, а также кастомных операторов для интеграции с внутренними API.
  • Пример DAG для ежедневной загрузки данных:
    
    from airflow import DAG
    from airflow.operators.python import PythonOperator
    from airflow.providers.google.cloud.transfers.gcs_to_bigquery import GCSToBigQueryOperator
    from datetime import datetime, timedelta

def _process_data():

Логика предобработки данных

import pandas as pd
df = pd.read_csv('/tmp/data.csv')
df['processed_at'] = datetime.now()
df.to_parquet('/tmp/data_processed.parquet')

default_args = { 'owner': 'data_team', 'retries': 3, 'retry_delay': timedelta(minutes=5) }

with DAG( dag_id='daily_data_pipeline', default_args=default_args, start_date=datetime(2023, 1, 1), schedule_interval='0 2 *', # Каждый день в 02:00 catchup=False ) as dag:

process = PythonOperator(
    task_id='process_raw_data',
    python_callable=_process_data
)

load = GCSToBigQueryOperator(
    task_id='load_to_bigquery',
    bucket='my-data-bucket',
    source_objects=['processed/data_*.parquet'],
    destination_project_dataset_table='project.dataset.daily_sales',
    write_disposition='WRITE_APPEND',
    source_format='PARQUET'
)

process >> load  # Определение зависимости


**2. Мониторинг и управление:**
*   Настройка алертирования при падении задач (интеграция с Slack, Email).
*   Использование **пулов (pools)** для ограничения параллельного выполнения ресурсоемких задач.
*   Работа с **XCom** для передачи небольших данных между задачами.

**3. Развертывание и инфраструктура:**
*   Запуск Airflow в **Docker** для локальной разработки.
*   Развертывание в продакшене на **Kubernetes** с использованием официального Helm-чарта для масштабирования и отказоустойчивости.

Airflow стал центральным инструментом для обеспечения надежности, повторяемости и мониторинга наших фоновых процессов.