Aller au contenu principal

Introduction sur Apache Airflow

Apache Airflow est un outil incontournable dans le monde du DevOps, reconnue pour sa flexibilité et sa puissance dans la gestion et l'automatisation des workflows complexes. Airflow se distingue par son approche basée sur des graphes acycliques dirigés (DAGs). Ces DAGs définissent des séquences de tâches où chaque tâche est exécutée après la complétion des tâches précédentes nécessaires, éliminant ainsi les dépendances inutiles et optimisant les temps d'exécution.

Historique d'Apache Airflow

Apache Airflow a une histoire fascinante, reflétant l'évolution des besoins en gestion de workflows dans l'industrie du logiciel. L'outil a été initialement conçu par Maxime Beauchemin chez Airbnb en 2014. À cette époque, Airbnb rencontrait des défis croissants en matière de gestion de données et avait besoin d'un système plus robuste que les solutions existantes pour orchestrer ses workflows complexes.

En 2015, Airflow a été open-sourcé, permettant à des développeurs du monde entier de contribuer et d'améliorer l'outil. Cette décision a été un tournant, ouvrant la voie à des innovations et des extensions continues.

En 2016, Airflow a rejoint l'Apache Software Foundation (ASF), en tant que projet incubateur, marquant un autre jalon important dans son histoire. L'association avec l'ASF a renforcé la crédibilité d'Airflow et a élargi sa communauté d'utilisateurs et de contributeurs. En 2019, il est devenu un projet de premier niveau sous l'égide d'Apache, confirmant sa maturité, sa stabilité et sa popularité au sein de la communauté open-source.

Tout au long de son évolution, Airflow a connu plusieurs mises à jour majeures, chacune apportant de nouvelles fonctionnalités, des améliorations de performances et une meilleure intégration avec d'autres outils et systèmes. Les contributions continues de la communauté ont également enrichi son écosystème, offrant une gamme étendue de plugins et d'extensions.

Le parcours d'Apache Airflow est un exemple remarquable de la manière dont un projet open-source peut évoluer et s'adapter aux besoins changeants de l'industrie.

Concepts Clés d'Apache Airflow

Apache Airflow repose sur plusieurs concepts fondamentaux qui définissent son fonctionnement et son approche en matière de gestion de workflows. Comprendre ces concepts est essentiel pour tirer le meilleur parti d'Airflow.

Directed Acyclic Graphs (DAGs)

Le cœur d'Airflow est le DAG, un graphe acyclique dirigé. Un DAG dans Airflow représente l'ensemble des tâches à exécuter, organisées de manière à refléter leurs dépendances et leur ordre d'exécution. Chaque nœud du DAG représente une tâche et les arêtes indiquent les dépendances entre ces tâches. Cette structure assure qu'une tâche ne s'exécute que lorsque ses dépendances sont satisfaites, apportant clarté et efficacité dans la gestion des workflows.

Operators

Les Operators sont les blocs de construction d'un DAG. Ils définissent ce qu'une tâche doit faire. Airflow propose une variété d'Operators intégrés pour des tâches courantes comme exécuter une commande Python, un script Bash, ou interagir avec des bases de données et des systèmes de fichiers. La personnalisation et la création d'Operators spécifiques permettent d'étendre les fonctionnalités d'Airflow pour répondre aux besoins spécifiques d'un workflow.

Tasks et Task Instances

Une tâche (Task) dans Airflow est une instance d'un Operator. Lorsqu'un DAG est exécuté, Airflow crée des instances de tâches (Task Instances) pour chaque tâche définie dans le DAG. Ces instances de tâches sont les éléments qui sont réellement exécutés par les workers d'Airflow. Le suivi de l'état de chaque instance de tâche (comme réussi, échoué, en cours etc.) est crucial pour la gestion et le dépannage des workflows.

Workflow Scheduling

Airflow n'est pas seulement un système d'exécution de tâches, mais aussi un planificateur de tâches. Il permet de définir des plannings complexes pour l'exécution des workflows, en utilisant des expressions cron ou des intervalles personnalisés. Cette fonctionnalité rend Airflow particulièrement puissant pour les ETL (Extract, Transform, Load), où les données doivent être traitées et déplacées à des intervalles réguliers.

En assimilant ces concepts clés, on peut commencer à apprécier la flexibilité et la puissance d'Apache Airflow. Il ne s'agit pas seulement d'exécuter des tâches, mais de les orchestrer de manière intelligente, en tenant compte des dépendances et des exigences temporelles.

Installation et Configuration d'Apache Airflow

Ici je vais détaller comment installer et configurer Apache Airflow pour se former sur cet outil. J'utiliserai une base de données SQLITE. En production, il faudra utiliser un autre système de base de données comme postgres par exemple.

Installation d'Airflow

L'installation et la configuration initiale d'Apache Airflow sont essentielles pour une utilisation efficace. Voici comment je procède.

Prérequis Système : Assurez-vous que votre système est compatible avec Airflow, avec une version récente de Python et des ressources adéquates (CPU, mémoire).

Installation d'Airflow : Airflow s'installe via pip. La commande standard est :

pip install apache-airflow

Création du fichier de configuration d'airflow

On va commencer par définir la variable d'environnement AIRFLOW_HOME :

export AIRFLOW_HOME=${PWD}

Construisons le fichier de configuration :

airflow config list --defaults > "${AIRFLOW_HOME}/airflow.cfg"

Dans le fichier dé commentez les lignes suivantes :

dags_folder = /home/bob/Projects/perso/airflow/dags

load_examples = False

base_log_folder = /home/bob/Projects/perso/airflow/logs

On crée les deux répertoires :

mkdir dags logs

Passons à la création de la base de données.

Création de la base de données

Airflow nécessite une base de données pour stocker les métadonnées. Utilisez la commande suivante pour initialiser ou migrer la base de données :

airflow db migrate

Création de l'utilisateur

Création d'un Utilisateur : Pour accéder à l'interface Web d'Airflow, créez un utilisateur avec :

airflow users create --username admin --password admin --firstname FIRST_NAME --lastname LAST_NAME --role Admin --email EMAIL_ADDRESS

Création d'un Workflow Simple

Après avoir installé et configuré Apache Airflow, l'étape suivante consiste à créer un workflow (ou DAG). Voici un exemple simple pour illustrer comment définir un DAG dans Airflow.

Exemple de Workflow

Supposons que nous voulions créer un workflow quotidien qui exécute une tâche de script Python. Ce workflow peut être défini comme suit :

  1. Définition du DAG : Tout d'abord, nous devons définir le DAG dans Airflow. Créez un fichier Python dans le répertoire dags d'Airflow. Nommons ce fichier simple_dag.py.

  2. Importation des Modules : Commencez par importer les modules nécessaires :

    from datetime import timedelta
    from airflow import DAG
    from airflow.operators.python_operator import PythonOperator
    from airflow.utils.dates import days_ago
    
  3. Définition de la Fonction de la Tâche : Définissez une fonction Python pour la tâche que vous voulez exécuter. Par exemple :

    def my_simple_task():
        print("Exécution de ma tâche simple")
    
  4. Paramètres du DAG : Définissez les paramètres de votre DAG, comme l'identifiant du DAG, le calendrier et les paramètres par défaut :

    default_args = {
        'owner': 'airflow',
        'depends_on_past': False,
        'start_date': days_ago(1),
        'email_on_failure': False,
        'email_on_retry': False,
        'retries': 1,
        'retry_delay': timedelta(minutes=5),
    }
    
    dag = DAG(
        'simple_dag',
        default_args=default_args,
        description='Un exemple de DAG simple',
        schedule_interval=timedelta(days=1),
    )
    
  5. Création de l'Operator : Créez un operator pour exécuter la fonction de tâche. Dans cet exemple, nous utilisons un PythonOperator :

    t1 = PythonOperator(
        task_id='simple_task',
        python_callable=my_simple_task,
        dag=dag,
    )
    
  6. Démarrage du scheduler : Lancez le scheduler d'Airflow, qui surveille les DAGs et exécute les tâches :

Airflow scheduler
  1. Exécution du Workflow : Une fois le fichier enregistré dans le répertoire dags, Airflow détectera automatiquement le nouveau DAG. Vous pouvez alors l'activer et le surveiller via l'interface utilisateur web.

Cet exemple montre comment un DAG simple peut être défini et exécuté dans Airflow. Il illustre les concepts de base, comme la création d'un DAG, la définition de tâches et l'utilisation d'operators. Bien sûr, les workflows réels peuvent être beaucoup plus complexes, impliquant plusieurs tâches avec des dépendances variées.

Les principaux Opérateurs d'Apache Airflow

Apache Airflow se distingue par sa riche bibliothèque d'opérateurs, qui permettent d'exécuter une grande variété de tâches dans différents contextes. Chaque opérateur dans Airflow est conçu pour réaliser une tâche spécifique, simplifiant ainsi la création de workflows complexes et leur intégration avec divers systèmes et services.

SSHOperator

  • Permet d'exécuter des commandes sur des serveurs distants via SSH.
  • Idéal pour les tâches d'automatisation qui nécessitent l'interaction avec des systèmes externes.

PythonOperator

  • Exécute une fonction Python définie.
  • Parfait pour les workflows qui nécessitent une logique de programmation personnalisée.

BashOperator

  • Utilisé pour exécuter des commandes Bash.
  • Convient aux scripts shell et aux opérations de système d'exploitation.

HttpOperator et SimpleHttpOperator

  • Permettent d'effectuer des requêtes HTTP.
  • Utiles pour intégrer des APIs web dans les workflows.

EmailOperator

  • Envoie des emails.
  • Idéal pour les alertes et les notifications automatiques.

DockerOperator

  • Lance des tâches dans des conteneurs Docker.
  • Parfait pour les environnements conteneurisés.

Sensors

  • Des opérateurs spéciaux qui attendent un certain état ou une condition.
  • Exemples : HttpSensor, S3KeySensor.

Operators pour Bases de Données

  • Tels que MySqlOperator, PostgresOperator, SqliteOperator.
  • Exécutent des requêtes dans des bases de données spécifiques.

FileTransfer Operators

  • Comme SFTPOperator, GoogleCloudStorageToS3Operator.
  • Utilisés pour déplacer des fichiers entre différents systèmes de stockage.

Utilisation des Opérateurs

L'utilisation d'opérateurs dans Airflow est relativement simple. Chaque opérateur est généralement initialisé avec des paramètres spécifiques à sa tâche et est ensuite intégré dans un DAG. Par exemple, pour utiliser le SSHOperator, vous définiriez la commande à exécuter, les détails de la connexion SSH et d'autres paramètres pertinents.

Interface Utilisateur d'Airflow

Démarrage du Serveur Web : Enfin, démarrez le serveur Web et le scheduler avec :

airflow webserver

L'interface utilisateur web d'Apache Airflow offre une visibilité et un contrôle complets sur les workflows. Dès que vous avez configuré et lancé le serveur web Airflow, vous pouvez accéder à cette interface via votre navigateur à l'adresse http://localhost:8080. Connectez-vous avec le user admin créé précédement.

Dashboard Principal

Le tableau de bord principal affiche une liste de tous les DAGs disponibles. Pour chaque DAG, vous pouvez voir son état (actif ou non), la fréquence d'exécution, la dernière exécution et d'autres détails utiles. C'est le point de départ pour surveiller et gérer vos workflows.

Visualisation et Gestion des DAGs

En cliquant sur un DAG spécifique, vous accédez à une page détaillée où vous pouvez visualiser la structure du DAG, le statut des tâches, les journaux et bien plus. Cette vue est essentielle pour comprendre le flux de travail et diagnostiquer les problèmes.

Exécution des Tâches

L'interface utilisateur permet de déclencher des tâches manuellement, de les rejouer en cas d'échec, ou de les mettre en pause. Cette flexibilité est particulièrement utile dans les environnements de test ou lors de la mise au point de nouveaux workflows.

Visualisation des Journaux

Pour chaque tâche exécutée, Airflow stocke des journaux détaillés. Ces journaux sont accessibles via l'interface utilisateur et sont indispensables pour le débogage. Ils fournissent des informations précieuses sur le déroulement des tâches et les erreurs éventuelles.

Gestion des Utilisateurs et des Accès

Airflow permet également de gérer les utilisateurs et leurs droits d'accès. Vous pouvez configurer des rôles et des permissions pour contrôler qui peut voir ou modifier les DAGs, assurant ainsi la sécurité et la conformité de vos workflows.

L'interface utilisateur d'Airflow est un outil puissant qui augmente considérablement l'efficacité et la facilité de gestion des workflows. Elle permet une interaction intuitive avec vos DAGs, offrant une visibilité en temps réel et des outils de dépannage efficaces.

Programmation et Planification des Tâches

Dans Apache Airflow, la programmation et la planification des tâches sont des éléments fondamentaux pour automatiser et orchestrer efficacement les workflows. Airflow offre une grande flexibilité pour définir quand et comment les tâches doivent être exécutées. Voici comment je procède pour planifier des tâches dans Airflow.

Utilisation d'Expressions Cron

Airflow permet de programmer les tâches en utilisant des expressions cron, offrant une précision minutieuse pour la planification. Par exemple, pour exécuter une tâche tous les jours à minuit, vous pouvez définir le schedule_interval dans le DAG comme suit :

dag = DAG('mon_dag', schedule_interval='0 0 * * *', ...)

Cette méthode est idéale pour des planifications régulières et précises.

Intervalles Temporels Personnalisés

Pour une flexibilité accrue, vous pouvez également définir des intervalles temporels personnalisés. Par exemple, pour exécuter un DAG toutes les 5 heures, utilisez :

from datetime import timedelta

dag = DAG('mon_dag', schedule_interval=timedelta(hours=5), ...)

Cette approche est utile lorsque les intervalles ne correspondent pas à des schémas cron standards.

Déclenchement Manuel et Automatique

Outre la planification automatique, Airflow permet également le déclenchement manuel des tâches via l'interface utilisateur. Cette fonction est particulièrement utile pour tester ou déboguer des tâches individuelles.

airflow dags trigger mon_dag

Dépendances entre les Tâches

Un aspect crucial de la planification dans Airflow est la définition des dépendances entre les tâches. Vous pouvez configurer des tâches pour qu'elles s'exécutent seulement après la réussite d'autres tâches, en utilisant des opérateurs comme >> ou <<. Par exemple :

tache1 >> tache2

Ici, tache2 ne s'exécutera que si tache1 s'est terminée avec succès.

Gestion des Retards et des Échecs

Airflow offre des options pour gérer les retards et les échecs de tâches, telles que la configuration de reprises (retries) et de délais entre les reprises (retry_delay). Ceci assure que les workflows sont robustes et résilients face aux imprévus.

Monitoring et Logging

Le monitoring et le logging sont des aspects essentiels de la gestion des workflows dans Apache Airflow. Ils permettent non seulement de suivre l'état d'exécution des tâches, mais aussi de diagnostiquer et de résoudre les problèmes qui peuvent survenir. Voici comment j'aborde ces deux aspects importants dans Airflow.

Monitoring des Workflows

Airflow offre une interface utilisateur complète pour le monitoring des workflows. Cette interface affiche des informations détaillées sur l'état des tâches, les échecs, les reprises et les délais d'exécution. Voici les éléments clés pour le monitoring :

  1. Vue d'Ensemble des DAGs : Le tableau de bord principal montre l'état actuel de tous les DAGs, offrant une vue d'ensemble rapide de vos workflows.
  2. Détails des Tâches : En cliquant sur un DAG spécifique, vous pouvez voir le statut de chaque tâche individuelle, y compris les tentatives de reprise et les échecs.
  3. Graphiques et Calendriers : Airflow fournit des graphiques temporels et des vues calendaires pour suivre les performances et l'historique des tâches sur de longues périodes.

Logging

Les logs sont cruciaux pour comprendre ce qui se passe dans vos workflows. Airflow stocke des journaux détaillés pour chaque exécution de tâche, ce qui est vital pour le débogage. Voici comment accéder et utiliser les logs :

  1. Accès aux Journaux via l'UI : Pour chaque tâche, vous pouvez accéder aux journaux directement depuis l'interface utilisateur. Cela vous permet de voir rapidement ce qui s'est passé lors de chaque exécution.
  2. Informations Détailées : Les journaux fournissent des informations détaillées, y compris les messages d'erreur, les avertissements et les informations de débogage.
  3. Configuration des Logs : Airflow permet de configurer le niveau de détail des logs, ce qui peut être ajusté en fonction de vos besoins.

Le monitoring et le logging dans Airflow jouent un rôle crucial dans l'optimisation de vos workflows et la résolution rapide des problèmes. En utilisant ces outils efficacement, vous pouvez assurer une exécution fluide et réussie de vos tâches d'automatisation.

La CLI d'Apache Airflow

La ligne de commande (CLI) d'Apache Airflow est un outil puissant pour gérer et interagir avec Airflow. Elle offre une variété de commandes pour effectuer des tâches telles que la gestion des DAGs, la manipulation des bases de données et la surveillance des tâches. Voici une sélection des commandes principales de la CLI Airflow, y compris comment afficher l'aide.

Affichage de l'Aide

Pour obtenir une aide générale sur la CLI Airflow, exécutez :

airflow --help

Pour obtenir de l'aide sur une commande spécifique, utilisez :

airflow <commande> --help

Par exemple, pour l'aide sur la commande dags, utilisez :

airflow dags --help

Les Commandes Principales

  1. airflow dags : Gère les DAGs. Permet, par exemple, de lister, de tester, ou de déclencher des DAGs.
  2. airflow tasks : Interagit avec les tâches d'un DAG. Permet de visualiser et d'exécuter des tâches individuelles.
  3. airflow webserver : Lance le serveur web d'Airflow.
  4. airflow scheduler : Démarre le scheduler d'Airflow.
  5. airflow db : Gère la base de données d'Airflow. Permet d'initialiser, de mettre à niveau ou de réinitialiser la base de données.
  6. airflow users : Crée, supprime ou gère les utilisateurs pour l'interface web.
  7. airflow pools : Gère les pools de ressources d'Airflow.
  8. airflow connections : Gère les connexions à d'autres services et systèmes.
  9. airflow variables : Gère les variables d'environnement utilisées dans Airflow.
  10. airflow plugins : Affiche les informations sur les plugins installés.
  11. airflow info : Affiche des informations sur le système et l'environnement Airflow.
  12. airflow version : Affiche la version d'Airflow installée.

Exemple :

airflow info

Apache Airflow
version                | 2.8.0
executor               | SequentialExecutor
task_logging_handler   | airflow.utils.log.file_task_handler.FileTaskHandler
sql_alchemy_conn       | sqlite:////home/bob/Projects/perso/airflow/airflow.db
dags_folder            | /home/bob/Projects/perso/airflow/dags
plugins_folder         | /home/bob/Projects/perso/airflow/plugins
base_log_folder        | /home/bob/Projects/perso/airflow/logs
remote_base_log_folder |


System info
OS              | Linux
architecture    | x86_64
uname           | uname_result(system='Linux', node='internal', release='5.15.0-91-generic', version='#101-Ubuntu SMP Tue Nov 14 13:30:08 UTC 2023',
                | machine='x86_64')
locale          | ('fr_FR', 'UTF-8')
python_version  | 3.11.6 (main, Nov 13 2023, 13:57:17) [GCC 11.4.0]
python_location | /home/bob/.pyenv/versions/3.11.6/envs/airflow/bin/python3.11

Bonnes Pratiques avec Apache Airflow

L'utilisation efficace d'Apache Airflow repose sur l'adoption de bonnes pratiques. Ces pratiques ne se limitent pas seulement à la rédaction de code, mais s'étendent à la manière de concevoir et de gérer les workflows. Voici quelques conseils que j'ai trouvés utiles pour travailler avec Airflow.

Structuration des DAGs

  1. Simplicité et Clarté : Gardez vos DAGs aussi simples que possible. Un DAG bien structuré est facile à comprendre, à maintenir et à déboguer.
  2. Réutilisation des Composants : Utilisez des templates et des sous-DAGs pour réutiliser la logique commune entre différents workflows.
  3. Séparation des Concernes : Évitez d'imbriquer trop de logique dans un seul DAG. Séparez les tâches en sous-tâches si nécessaire pour maintenir la clarté.

Gestion des Dépendances

  1. Dépendances Explicites : Définissez clairement les dépendances entre les tâches pour éviter les confusions et les erreurs d'exécution.
  2. Éviter les Dépendances Cycliques : Assurez-vous que vos DAGs n'ont pas de dépendances circulaires, ce qui pourrait causer des blocages.

Performance et Scalabilité

  1. Optimisation des Ressources : Soyez attentif à l'utilisation des ressources. Une tâche gourmande en ressources peut affecter l'ensemble du système.
  2. Parallélisation : Profitez de la capacité d'Airflow à exécuter des tâches en parallèle pour améliorer les performances.

Surveillance et Débogage

  1. Monitoring Actif : Surveillez activement la santé de vos workflows. Réagissez rapidement aux échecs et aux alertes.
  2. Logging Détaillé : Assurez-vous que vos tâches génèrent des logs suffisamment détaillés pour faciliter le débogage.

Sécurité et Conformité

  1. Gestion des Accès : Contrôlez qui a accès à quoi dans Airflow. Utilisez des rôles et des permissions pour sécuriser vos workflows.
  2. Sécurisation des Données Sensibles : Utilisez les variables d'environnement et les secrets pour gérer les données sensibles, plutôt que de les coder en dur dans vos scripts.

En appliquant ces bonnes pratiques, vous pouvez non seulement améliorer la fiabilité et l'efficacité de vos workflows Airflow, mais également assurer leur maintenabilité à long terme.

Conclusion

En récapitulant notre exploration d'Apache Airflow, il est clair que cet outil offre une flexibilité, une puissance et une polyvalence remarquables pour l'orchestration de workflows. De sa conception intuitive basée sur les DAGs à sa capacité à s'intégrer avec une multitude de technologies et plateformes, Airflow se positionne comme un choix incontournable pour la gestion de workflows complexes.

Vers l'Avenir

L'avenir d'Apache Airflow semble prometteur. Avec l'évolution continue des besoins en matière de données et d'automatisation, Airflow est bien placé pour s'adapter et offrir des solutions encore plus robustes et intuitives. Que ce soit dans le cloud, dans le traitement des données en temps réel, ou dans l'automatisation des processus métier, Airflow continuera probablement à être un acteur majeur.

Pour ceux qui cherchent à automatiser leurs processus, à orchestrer des workflows complexes, ou simplement à améliorer la gestion de leurs tâches, Apache Airflow se présente comme une solution éprouvée.

En conclusion, Apache Airflow n'est pas seulement un outil pour les ingénieurs et les développeurs ; c'est une plateforme qui permet aux organisations de toutes tailles de rationaliser, d'automatiser et d'optimiser leurs opérations, les menant vers une efficacité et une productivité accrues.

Plus d'infos