VT2021 ApacheAirflow fiche

Résumé
Apache Airflow est une plate-forme de gestion de flux Open Source. Le projet initialement lancé par Airbnb en 2014 à rejoint la fondation Apache d’abord sous la forme d’un projet incubateur puis d’un projet de niveau supérieur grâce une demande de plus en plus grande. Ce projet a été conçu en Python et supporte l’utilisation de fichiers Python uniquement, ce qui permet d’utiliser les bibliothèques déjà existantes et permettre l’utilisation d’Apache Airflow pour beaucoup de projets variés. Ce dernier repose sur l’utilisation de graphes orientés acycliques composés de tâches pour gérer les différents flux. L’une des fonctionnalités phare d’Apache Airflow est la planification de tâches dans le temps, c'est-à-dire qu’une suite de tâche peut être lancée périodiquement à un écart de temps défini. Les tâches peuvent varier du plus simple au plus complexe, avec l’exécution de commande bash basique à l’entraînement d’intelligence artificielle. Cette plateforme polyvalente conviendra donc à tout type de personne.

Abstract
Apache Airflow is an open source workflow management platform. The project initially launched by Airbnb in 2014 joined the Apache Foundation first as an incubator project and then as a higher level project thanks to growing demand. This project was designed in Python and supports the use of python files only, which allows the use of existing python libraries and enables the use of Apache Airflow for many different projects. Apache Airflow relies on the use of a directed acyclic graph to manage the different flows. One of the key features of Airflow is the scheduling of tasks over time, i.e. a sequence of tasks can be run periodically at a defined time interval. Tasks can range from simple to complex, with basic bash command execution or artificial intelligence training. This versatile platform is therefore suitable for all types of people.

Définition et utilité
Apache Airflow est une solution permettant de mettre en place un ensemble de services pour organiser, créer, superviser et lancer périodiquement un ensemble de tâches plus ou moins complexes. Ces tâches peuvent suivre un flot d'exécution parallèle ou séquentiel. De plus, ces tâches sont représentées par des DAGs (Directed Acyclic Graph) que l'on peut penser comme un regroupement. Ces regroupements peuvent être exécutés périodiquement de manière asynchrone ainsi, de nombreuses utilisations complexes personnelles ou professionnelles peuvent être imaginées.

Ce projet innovant à initialement été pensé par Maxime Beauchemin à Airbnb en 2014, a rejoint la fondation Apache en 2016 et a été annoncé officiellement en 2019. C'est donc un projet récent totalement Open Source permettant de faciliter la création de flux de travail. Par définition, un flux de travail est la représentation d'une suite de tâches ou d'opérations effectuées par une personne, un groupe de personnes, un organisme, etc. Le terme flow(« flux ») renvoie au passage du produit, du document, de l'information, etc., d'une étape à l'autre. Ce qui est remarquable, c'est qu'il s'agit d'un projet entièrement réalisé en Python, un langage abordable pour tout type d'utilisateurs. Grâce à cela Apache Airflow permet de facilement réaliser un ensemble de fonctionnalités complexes.

Installation
Apache Airflow est un service qui peut s’installer localement ou avec Docker, ce qui facilite grandement l’installation. Il est disponible sur la plupart des plateformes Linux, Mac ou Windows 10 bien que l’installation sur cette dernière nécessite d’activer l’intégration native Ubuntu (Linux).

En installant Apache Airflow, on installe un ensemble de composants ayant tous une fonction prédéfinie. On retrouve notamment :
 * Une base de donnée PostgreSQL
 * Un ordonnanceur permettant d’organiser et programmer les différentes tâches dans le temps et les donne au worker.
 * Un worker, le composant qui exécute les tâches données par l’ordonnanceur.
 * Un broker Redis permettant la transmission de message entre l’ordonnanceur et le worker.
 * Un serveur web élégant utile pour notamment visualiser les différents DAGs et leur exécution.
 * Une application Flower pour avoir une supervision des tâches exécutées ainsi qu’obtenir des statistiques sur ces dernières.

Pour que l’installation soit complète il est nécessaire de créer une hiérarchie de fichier pour stocker les différents scripts Python. On retrouve :
 * Un dossier dags : Contenant les scripts représentant les différentes tâches.
 * Un dossier plugins : Contenant les scripts permettant d’ajouter des fonctionnalités à Apache Airflow comme une nouvelle page sur le serveur web.
 * Un dossier logs : Contenant l’ensemble des logs d’exécution des tâches.

Directed Acyclic Graph (DAG)
DAG est un terme qui revient souvent car il s’agit de la base d’Apache Airflow, mais concrètement comment cela fonctionne-t-il ? Un DAG est, dans la théorie des graphes, un graphe particulier qui est orienté et acyclique, c’est-à-dire sans boucle et représente graphiquement l’exécution des tâches et leurs dépendances dans Apache Airflow. Par exemple, le graphe ci-contre représente trois tâches qui seront exécutées dans l'ordre suivant : d'abord  puis une fois terminée Apache Airflow pourra exécuter les deux autres tâches concurremment.

Cependant, Apache Airflow utilise ce terme autant pour définir la représentation graphique de l’organisation des différentes tâches mais représente aussi le script Python permettant de définir le comportement des tâches et leur ordonnancement. En termes de code, Apache Airflow fournit une multitudes d’imports et de librairies faciles d’utilisation. La complexité d’implémentation des tâches est donc proportionnelle à la complexité des tâches elles-mêmes.

Tâches & Ordonnancement
Un graphe orienté acyclique (DAG) est constitué d’une ou plusieurs tâches liées entre elles. Une tâche peut se définir de deux façons différentes, soit en utilisant des opérateurs, soit en utilisant des décorateurs.

Il existe différents types d’opérateur, les plus simples sont les suivants :
 * Le  qui permet d’exécuter des commandes bash.
 * Le  qui permet d’exécuter des lignes de code Python.
 * Le  permettant d’envoyer un email.

Si les opérateurs natifs à Apache Airflow ne suffisent pas, il est possible de trouver des paquets contenant différents opérateurs comme :,  ,.

La seconde façon de définir une tâche est d’utiliser les décorateurs, pour cela il suffit d’ajouter le décorateur :   au-dessus de la définition d’une fonction Python. Cette façon de définir une tâche permet de prendre en compte les inputs et les outputs des tâches de manière plus dynamique. Cependant, la gestion des entrées et sorties de tâches reste très limitée sous Apache Airflow.

Une fois nos tâches définies il faut l' ajouter au DAG en les organisant selon le flux voulu, cela s’appelle les dépendances entre tâches. Il existe plusieurs façons d’agencer des tâches, les plus simples sont d’exécuter une tâche t1 avant une autre t2, pour cela, il faut écrire cela à l’intérieur du DAG :

ou  ou encore   ou

On peut également mettre une liste de taches en dépendance ce qui équivaut à avoir plusieurs branches à partir de la tâche t1, l’instruction à saisir est. (Exemple : voir graphe ci-dessus)

Cependant, il faut veiller à ne pas créer de boucle ou autrement dit de cycle dans la définition du DAG ce qui violerait la propriété du graphe et le système lèvera une exception.

Serveur web et ses fonctionnalités
Apache Airflow, comparé à certains de ses concurrents, fournit une interface Web récente et élégante permettant de visualiser et agir sur les différentes tâches. En effet, l’interface web nous permet d’activer ou désactiver les DAGs, voir les différentes exécutions et leur état (Réussite ou Échec), on peut facilement accéder aux logs des tâches, au code source Python associé etc.

De plus, cette interface Web ajoute certaines fonctionnalités intéressantes comme la gestion des clés (credentials) de manière sécurisée. Elle ajoute aussi la possibilité de créer des rôles et gérer les différentes permissions selon les utilisateurs (visualisation édition des DAGs, etc.) mais permet aussi l’enregistrement des informations de connexion à certains services comme Google ou PostgreSQL. Cela permet donc de faciliter le processus de connexion dans le code grâce aux différentes librairies Apache Airflow associées.

Critique
Apache Airflow est reconnu pour sa maturité, ses nombreuses fonctionnalités et son champ d’action inégalable. Cependant, sa généralité est aussi une faiblesse, car plus d’efforts sont nécessaires pour adapter le service qu’offre la plateforme à ses projets.

Les projets Open Source de gestion de flux se sont multipliés ces dernières années afin de répondre à une demande en hausse et de nombreux concurrents d’Apache Airflow sont apparus. Luigi by Spotify est un paquet Python Open Source qui répond aux mêmes problèmes qu’Apache Airflow. Ce paquet est plus simple à utiliser grâce à ses fonctionnalités très limitées. Luigi peut être intégré à des petits projets avec des usages très simples au contraire d’Apache Airflow qui permet une bonne maintenabilité et l'intégration sur d’ambitieux projets. Luigi conserve une place solide dans ce marché grâce à sa simplicité et à une communauté fidèle.

KubeFlow et MLflow sont des outils avec une utilisation en forte hausse due au développement du machine learning, ils se concentrent principalement sur l'exécution et le traçage des expériences, et la formation et déploiement des modèles d'apprentissage. En comparaison, Apache Airflow permet également de répondre à ces problèmes, mais avec plus de difficultés de mise en œuvre. Cependant, si l’objectif est d'avoir le plein contrôle sur le cycle de vie des IAs, ou que les besoins sont très spécifiques, Apache Airflow est l’outil adapté. KubeFlow et MLflow sont plus accessibles et correspondent entièrement au travail de Data Scientist.

Prefect s’installe sur le marché comme un outil permettant de résoudre les problèmes connus d’Apache Airflow comme la rigidité ou la complexité d’utilisation. Cet outil se veut plus accessible et cible le grand public, mais ce projet est moins polyvalent et n’est pas un projet complètement Open Source, il a un cœur Open Source et des fonctionnalités propriétaires. De ce fait, Prefect propose une version gratuite, mais limitée et nécessite un abonnement pour pouvoir exécuter des tâches sans limites.

Azkaban by Linkedin est la solution qui concurrence le mieux Apache Airflow. La solution proposée est codée en java et repose sur l'utilisation d'une interface graphique en ligne. De plus, Azkaban donne un accès à des serveurs en ligne ce qui permet de ne pas avoir besoin d'infrastructure pour l'utilisation du service (Machine Virtuelle). Cet argument est un point positif dans certains cas d’utilisation, cependant rester maître de son infrastructure est la meilleure option dans la majorité des cas même si cela nécessite plus de travail en amont.

Malgré un grand nombre de concurrents, Apache Airflow se positionne comme un des leaders de son domaine, notamment grâce à sa communauté très présente et sa maturité. L'un des plus gros défaut du projet est qu'il est nécessaire de se former avant de pouvoir utiliser le service correctement. Cette étape d'apprentissage peut être plus ou moins longue selon le public et peut en décourager certains qui se tourneront vers des solutions plus accessibles.

La force majeure d'Apache Airflow reste sa modularité et son champ d'application en étant le plus permissif possible.