developpeurs-bureau-ecrans-ordinateurs
Blog, Tutoriels

Apache Airflow : Qu’est-ce que c’est et à Quoi ça Sert ?

Vous cherchez un outil pour gérer et automatiser des tâches complexes ? Vous entendez parler d’Apache Airflow mais ne savez pas par où commencer ?

Ce guide complet vous explique ce qu’est Airflow, à quoi ça sert et comment l’utiliser, même si vous êtes débutant.

Qu’est-ce que Apache Airflow ? Une présentation complète

Apache Airflow est une plateforme open source pour créer, planifier et superviser des workflows. En clair, c’est un outil qui vous aide à automatiser des séries de tâches, surtout dans le domaine de la data.

Le principe de base est la « configuration as code ». Au lieu de cliquer sur des boutons dans une interface graphique pour construire un flux de travail, vous écrivez tout en Python. Cette approche rend vos workflows plus faciles à maintenir, à versionner (avec Git, par exemple) et à partager.

L’histoire d’Apache Airflow : de Airbnb à la fondation Apache

Pour bien comprendre Airflow, il faut connaître son origine. L’outil n’est pas sorti de nulle part, il répondait à un vrai besoin.

  • 2014 : Le projet démarre chez Airbnb, initié par Maxime Beauchemin. L’entreprise avait besoin d’un outil pour gérer ses pipelines de données (ETL) de plus en plus complexes.
  • 2015 : Airbnb décide de rendre le projet open source. Le code devient public et une communauté commence à se former autour.
  • 2016 : Airflow rejoint l’Apache Software Foundation (ASF) comme projet « incubateur ». C’est une étape importante qui garantit une gouvernance neutre et solide.
  • 2019 : Après avoir fait ses preuves, Airflow devient un projet de premier niveau (Top-Level Project) de l’ASF. C’est la reconnaissance de sa maturité et de sa popularité.

Aujourd’hui, Apache Airflow est devenu le standard de l’industrie pour l’orchestration de workflows, utilisé par des centaines d’entreprises dans le monde.

Les concepts clés pour comprendre Airflow

Pour utiliser Airflow, il faut comprendre son vocabulaire. Au début, ça peut paraître un peu abstrait, mais c’est assez logique une fois qu’on a saisi l’idée. Voici les 4 briques de base.

1. DAG (Directed Acyclic Graph)
C’est le concept central d’Airflow. Un DAG est un fichier Python qui décrit l’ensemble de vos tâches et leurs dépendances. C’est la « recette » de votre workflow.

  • Graph : Il s’agit d’un ensemble de tâches.
  • Directed (Dirigé) : Les tâches ont un ordre précis. La tâche A doit se terminer avant que la B ne commence.
  • Acyclic (Acyclique) : Il n’y a pas de boucle. Une tâche ne peut pas revenir en arrière. Le flux de travail va toujours de l’avant.

En résumé, un DAG Airflow est une collection de tâches avec un ordre d’exécution bien défini. Par exemple : « Télécharge le fichier », PUIS « Nettoie les données », PUIS « Charge les données en base ».

2. Operators
Les Operators sont les briques de construction de votre DAG. Un Operator définit ce qu’une tâche doit faire. Airflow vient avec une tonne d’Operators prêts à l’emploi.

  • BashOperator : pour exécuter une commande bash.
  • PythonOperator : pour appeler une fonction Python.
  • EmailOperator : pour envoyer un email.
  • SimpleHttpOperator : pour faire une requête API.

Si aucun Operator existant ne correspond à votre besoin, vous pouvez créer le vôtre. C’est là toute la flexibilité d’Airflow.

3. Tasks et Task Instances
Il faut bien faire la différence entre ces deux termes.

  • Une Task est une instance d’un Operator dans votre DAG. C’est une étape de votre recette. Par exemple, `task_download_file = BashOperator(…)`.
  • Une Task Instance est une exécution concrète d’une tâche à un moment précis. Si votre DAG tourne tous les jours, la tâche `task_download_file` du 25 octobre à 10h est une Task Instance.

Une Task Instance a un état : `running`, `success`, `failed`, `skipped`… C’est ce que vous suivez dans l’interface web pour voir si votre workflow s’est bien passé.

4. Scheduler
Le Scheduler (planificateur) est le moteur d’Airflow. C’est un service qui tourne en permanence, scanne le dossier où se trouvent vos DAGs et décide quand déclencher les tâches.

Il vérifie les dépendances entre les tâches et les plannings que vous avez définis (par exemple, « tous les jours à 5h du matin »). Quand les conditions sont réunies, il envoie les tâches aux workers (les exécutants) pour qu’elles soient lancées.

Le principe du « Configuration as Code »
Contrairement à des outils plus anciens où l’on configure les workflows via des fichiers XML ou des interfaces graphiques, avec Airflow, tout est du code Python. Ça offre une flexibilité énorme : vous pouvez utiliser des boucles, des conditions, et toutes les bibliothèques Python pour créer des pipelines dynamiques.

Architecture et fonctionnalités principales

Airflow a une architecture modulaire conçue pour être scalable. C’est-à-dire qu’elle peut gérer aussi bien 10 workflows que 10 000. Voici les points forts de son architecture.

  • Architecture distribuée : Airflow utilise une file de messages (comme RabbitMQ ou Redis) pour distribuer les tâches à un ensemble de workers. Vous pouvez ajouter plus de workers pour gérer plus de tâches en parallèle.
  • Pipelines dynamiques : Comme les DAGs sont en Python, vous pouvez générer des tâches et des workflows de manière dynamique. Par exemple, créer une tâche pour chaque fichier présent dans un dossier.
  • Extensibilité : Vous pouvez facilement créer vos propres Operators, Hooks et Sensors pour vous connecter à n’importe quel service.
  • Écosystème riche : Il existe des centaines de connecteurs (« providers ») pour interagir avec des services cloud comme Amazon Web Services (AWS), Google Cloud Platform (GCP) ou Microsoft Azure.
  • Paramétrisation : Airflow utilise le moteur de templates Jinja. Ça vous permet de passer des informations dynamiques à vos tâches, comme la date d’exécution.

Guide pratique : Démarrer avec Apache Airflow

Assez de théorie, passons à la pratique. Voici comment installer et lancer votre premier workflow Airflow en quelques étapes.

Installation et configuration initiale

L’installation se fait via pip, le gestionnaire de paquets Python. Assurez-vous d’avoir Python 3.7+ installé sur votre machine.

1. Installer Airflow
Ouvrez un terminal et tapez la commande suivante :

pip install apache-airflow

Cette commande installe le cœur d’Airflow. Vous ajouterez des dépendances supplémentaires (comme `postgres`, `google`, etc.) plus tard selon vos besoins.

2. Initialiser la base de données
Airflow a besoin d’une base de données pour stocker les métadonnées (la liste des DAGs, l’historique des exécutions, etc.). Par défaut, il utilise SQLite, ce qui est parfait pour tester en local.

Exécutez cette commande pour créer les tables nécessaires :

airflow db migrate

Pour la production, n’utilisez pas SQLite. Préférez une base de données plus robuste comme PostgreSQL ou MySQL. La configuration se fait dans le fichier `airflow.cfg`.

3. Créer un utilisateur
Vous avez besoin d’un compte administrateur pour accéder à l’interface web.

airflow users create --username admin --password admin --firstname John --lastname Doe --role Admin --email [email protected]

Remplacez les informations par les vôtres.

4. Lancer les services Airflow
Airflow a deux composants principaux à lancer :

  • Le serveur web (webserver) : c’est l’interface utilisateur graphique.
  • Le planificateur (scheduler) : c’est le moteur qui déclenche les workflows.

Ouvrez deux terminaux distincts. Dans le premier, lancez le serveur web :

airflow webserver --port 8080

Dans le second, lancez le scheduler :

airflow scheduler

Voilà ! Vous pouvez maintenant ouvrir votre navigateur à l’adresse http://localhost:8080 et vous connecter avec l’utilisateur que vous venez de créer.

Créer son premier workflow (DAG) simple

Maintenant qu’Airflow est installé, créons un premier DAG. Par défaut, Airflow cherche les fichiers Python dans le dossier `~/airflow/dags`.

Créez un fichier nommé `simple_dag.py` dans ce dossier et copiez-y le code suivant.

Explication du code :

  • On importe les classes nécessaires : `DAG`, `PythonOperator`, et `days_ago`.
  • On définit une fonction Python simple, `print_hello`, qui affiche juste un message.
  • On définit des arguments par défaut (`default_args`) pour notre DAG. C’est une bonne pratique.
  • On instancie notre `DAG`. On lui donne un `dag_id` (un nom unique), des arguments, une description, une date de début (`start_date`), et un intervalle d’exécution (`schedule_interval`). Ici, `@daily` signifie qu’il tournera tous les jours.
  • On crée une tâche `hello_task` en utilisant le `PythonOperator`. On lui dit d’exécuter notre fonction `print_hello`.

Le code du fichier `simple_dag.py` :

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

def print_hello():
    print("Hello from Airflow!")

with DAG(
    dag_id='simple_hello_dag',
    description='A simple DAG that prints a message',
    start_date=datetime(2023, 1, 1),
    schedule_interval='@daily',
    catchup=False,
    tags=['example'],
) as dag:
    hello_task = PythonOperator(
        task_id='hello_task',
        python_callable=print_hello,
    )

Sauvegardez le fichier. Après quelques instants, vous devriez voir le DAG `simple_hello_dag` apparaître dans l’interface web d’Airflow. Vous pouvez l’activer et le déclencher manuellement pour tester.

Les principaux Opérateurs à connaître

La force d’Airflow réside dans sa large gamme d’Operators. Voici ceux que vous utiliserez le plus souvent.

  • BashOperator : Pour exécuter des scripts shell. Très utile pour lancer des programmes existants ou des commandes simples.
  • PythonOperator : Pour exécuter une fonction Python. C’est le plus flexible, car il vous permet de faire tout ce que vous voulez en Python.
  • DockerOperator : Pour lancer une commande à l’intérieur d’un conteneur Docker. Idéal pour isoler les dépendances de vos tâches.
  • SSHOperator : Pour exécuter une commande sur une machine distante via SSH.
  • HttpOperator : Pour envoyer une requête HTTP, par exemple pour interroger une API.
  • EmailOperator : Pour envoyer des emails, souvent utilisé pour les notifications en cas d’erreur.
  • Opérateurs de bases de données : Il en existe pour presque toutes les bases de données (`MySqlOperator`, `PostgresOperator`, `SqliteOperator`) pour exécuter des requêtes SQL.
  • Opérateurs de transfert : Permettent de déplacer des données entre différents systèmes (`S3ToGCSOperator`, `MySqlToGoogleCloudStorageOperator`, etc.).

Il existe aussi une catégorie spéciale d’Operators appelés Sensors. Un Sensor est un Operator qui attend qu’une condition soit remplie avant de continuer. Par exemple, `S3KeySensor` attend qu’un fichier apparaisse dans un bucket Amazon S3.

Gérer et superviser ses workflows

Une fois vos workflows en place, le travail n’est pas terminé. Il faut les superviser pour s’assurer que tout fonctionne correctement.

L’interface utilisateur web

L’interface utilisateur web d’Airflow est votre centre de contrôle. C’est là que vous passerez le plus de temps.

  • Vue des DAGs : Le tableau de bord principal affiche tous vos DAGs, leur statut, la dernière exécution, et le planning. Vous pouvez activer ou désactiver un DAG en un clic.
  • Vue Graph : Affiche la structure de votre DAG sous forme de graphes acycliques, ce qui aide à visualiser les dépendances entre les tâches.
  • Vue Grid : Montre l’historique des exécutions de votre DAG, avec le statut de chaque tâche pour chaque run. C’est parfait pour repérer les erreurs.
  • Logs : Pour chaque exécution de tâche, vous pouvez accéder aux logs détaillés. C’est indispensable pour le débogage.
  • Déclenchement manuel : Vous pouvez lancer un DAG manuellement à tout moment depuis l’interface, avec des paramètres personnalisés si besoin.

La puissance de la ligne de commande (CLI)

En plus de l’interface web, Airflow propose une interface en ligne de commande (CLI) très complète. Elle est souvent utilisée pour l’automatisation et l’intégration continue (CI/CD).

Voici quelques commandes utiles :

  • airflow dags list : Liste tous les DAGs disponibles.
  • airflow dags test [dag_id] [execution_date] : Teste un DAG sans enregistrer l’état dans la base.
  • airflow dags trigger [dag_id] : Déclenche un DAG manuellement.
  • airflow tasks run [dag_id] [task_id] [execution_date] : Exécute une seule tâche.
  • airflow db ... : Commandes pour gérer la base de données.
  • airflow users ... : Commandes pour gérer les utilisateurs.

Monitoring et logging : les clés de la fiabilité

Un workflow qui tourne en production doit être fiable. Airflow fournit les outils pour ça. Le monitoring via l’interface web est essentiel pour vérifier la santé de vos pipelines de données.

Les logs sont votre meilleur ami quand une tâche échoue. Ils vous diront exactement ce qui n’a pas fonctionné. Pensez à configurer des alertes (par exemple, par email avec `EmailOperator`) pour être prévenu immédiatement en cas d’échec.

Bonnes pratiques pour travailler avec Apache Airflow

Pour éviter les problèmes à long terme, il est bon de suivre quelques règles simples.

  • Gardez vos DAGs simples : Un DAG doit faire une seule chose, mais la faire bien. Évitez les DAGs de plusieurs centaines de tâches. Préférez plusieurs petits DAGs qui s’enchaînent.
  • Rendez vos tâches idempotentes : Une tâche idempotente peut être exécutée plusieurs fois avec le même résultat. C’est crucial, car vous aurez souvent à relancer des tâches qui ont échoué.
  • Utilisez les Variables et Connections d’Airflow : Ne mettez jamais de mots de passe ou de clés d’API en dur dans votre code. Stockez-les de manière sécurisée dans l’interface d’Airflow.
  • Versionnez votre code : Mettez vos DAGs dans un dépôt Git. C’est la base pour un travail d’équipe et un suivi des modifications.
  • Séparez la logique du DAG de l’orchestration : Le fichier du DAG doit se contenter de définir la structure du workflow. Le code métier (la logique complexe) doit être dans des modules Python séparés que vous importez.

Pourquoi et quand choisir Apache Airflow ?

Apache Airflow est un outil extrêmement puissant, mais il n’est pas forcément adapté à tous les cas d’usage. Il brille particulièrement quand vous avez des workflows complexes avec de nombreuses tâches et dépendances.

Voici pourquoi vous devriez le choisir :

  • Flexibilité : Le fait que tout soit en Python vous donne une liberté totale.
  • Scalabilité : L’architecture est conçue pour gérer une grande charge de travail.
  • Communauté : En tant que projet de la Apache Software Foundation, il bénéficie d’une communauté très active et d’un développement constant. La dernière release est toujours attendue.
  • Écosystème : Les intégrations avec les services cloud (Google, AWS, Azure) et de nombreux autres outils sont un atout majeur.

C’est la solution de choix pour les data engineers, les data scientists et les équipes DevOps qui ont besoin d’automatiser et de fiabiliser leurs pipelines de données. C’est une application devenue un standard dans le monde de la data.

Ressources officielles pour aller plus loin :

Vous pourriez également aimer...