Tag: airflow, orchestration, python, dag, data-pipeline, etl, scheduler
Livello: intermedio
TL;DR: Apache Airflow orchestra pipeline dati complesse come grafi aciclici diretti (DAG) in Python. Gestisce dipendenze di esecuzione, scheduling, retry e monitoraggio di workflow eterogenei.
none, scheduled, queued, running, success, up_for_retry o failed.R: Evito XCom per dati pesanti; salvo il dataset su object storage come S3 o GCS e trasmetto tramite XCom soltanto il path dell'oggetto.
R: Un Operator esegue attivamente un'elaborazione, mentre un Sensor resta in polling su un evento esterno prima di sbloccare i nodi a valle.
R: Configuro il sensore con mode='reschedule' invece del default poke, consentendo al task di cedere lo slot tra un controllo e l'altro.
R: Scelgo Celery se ho worker fissi con overhead minimo; scelgo Kubernetes se ho task con dipendenze isolate o carichi altamente elastici.
datetime.now() in start_date: l'uso di date dinamiche impedisce il calcolo deterministico delle esecuzioni passate e future.catchup=True su un DAG storico genera centinaia di esecuzioni contemporanee non previste.from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.python import PythonOperator
from airflow.sensors.filesystem import FileSensor
default_args = {
"owner": "umberto",
"retries": 2,
"retry_delay": timedelta(minutes=5),
}
with DAG(
dag_id="daily_orders_pipeline",
default_args=default_args,
start_date=datetime(2026, 1, 1),
schedule_interval="@daily",
catchup=False,
max_active_runs=1,
) as dag:
wait_for_input = FileSensor(
task_id="wait_for_input",
filepath="/data/raw/orders.csv",
mode="reschedule",
poke_interval=60,
timeout=1800,
)
def extract_and_clean(ti, **context):
execution_date = context["ds"]
return f"s3://datalake/cleaned/{execution_date}/orders.parquet"
clean_data = PythonOperator(
task_id="clean_data",
python_callable=extract_and_clean,
)
wait_for_input >> clean_data
Bash
# Validazione sintattica del file DAG
python path/to/daily_orders_pipeline.py
# Test locale di un task senza avviare lo scheduler
airflow tasks test daily_orders_pipeline clean_data 2026-03-01
# Trigger manuale con passaggio di parametri
airflow dags trigger -c '{"backfill_flag": true}' daily_orders_pipeline
# Ispezione dello stato delle esecuzioni
airflow dags list-runs -d daily_orders_pipeline --state running
[ ] TaskFlow API con decoratori @dag e @task per una gestione trasparente degli XCom
[ ] Implementazione e configurazione di Cluster Policies per enforcement degli standard
[ ] Differenze tra Data Interval, Execution Date e Logical Date in Airflow 2.x
[x] Differenza tra CeleryExecutor e KubernetesExecutor
[x] Utilizzo della modalità reschedule sui sensori per liberare slot worker
Documentazione ufficiale Apache Airflow (airflow.apache.org)
Airflow Architecture and Core Concepts Guide
Best Practices for DAG Writing in Apache Airflow