Luigi est un package Python (testé 3.7, 3.8, 3.9, 3.10, 3.11, 3.12) qui vous aide à créer des pipelines complexes de tâches par lots. Il gère la résolution des dépendances, la gestion des flux de travail, la visualisation, la gestion des échecs, l'intégration de la ligne de commande et bien plus encore.
Exécutez pip install luigi
pour installer la dernière version stable de PyPI. La documentation de la dernière version est hébergée sur readthedocs.
Exécutez pip install luigi[toml]
pour installer Luigi avec la prise en charge des configurations basées sur TOML.
Pour le code de pointe, pip install git+https://github.com/spotify/luigi.git
. Une documentation de pointe est également disponible.
L'objectif de Luigi est de traiter toute la plomberie généralement associée aux processus par lots de longue durée. Vous souhaitez enchaîner de nombreuses tâches, les automatiser, et des échecs se produiront. Ces tâches peuvent être n'importe quoi, mais il s'agit généralement d'activités de longue durée comme des tâches Hadoop, le transfert de données vers/depuis des bases de données, l'exécution d'algorithmes d'apprentissage automatique ou toute autre chose.
Il existe d'autres progiciels qui se concentrent sur les aspects de niveau inférieur du traitement des données, comme Hive, Pig ou Cascading. Luigi n'est pas un framework pour les remplacer. Au lieu de cela, il vous aide à assembler de nombreuses tâches, chaque tâche pouvant être une requête Hive, une tâche Hadoop en Java, une tâche Spark en Scala ou Python, un extrait de Python, le vidage d'une table d'une base de données ou toute autre chose. Il est facile de créer des pipelines de longue durée comprenant des milliers de tâches et prenant des jours, voire des semaines. Luigi s'occupe d'une grande partie de la gestion du workflow afin que vous puissiez vous concentrer sur les tâches elles-mêmes et leurs dépendances.
Vous pouvez créer à peu près toutes les tâches de votre choix, mais Luigi est également livré avec une boîte à outils contenant plusieurs modèles de tâches courants que vous utilisez. Il inclut la prise en charge de l'exécution de tâches Python mapreduce dans Hadoop, ainsi que des tâches Hive et Pig. Il est également livré avec des abstractions du système de fichiers pour HDFS et des fichiers locaux qui garantissent que toutes les opérations du système de fichiers sont atomiques. Ceci est important car cela signifie que votre pipeline de données ne plantera pas dans un état contenant des données partielles.
Le serveur Luigi est également livré avec une interface Web, vous permettant ainsi de rechercher et de filtrer parmi toutes vos tâches.
Juste pour vous donner une idée de ce que fait Luigi, ceci est une capture d'écran de quelque chose que nous exécutons en production. En utilisant le visualiseur de Luigi, nous obtenons un bel aperçu visuel du graphique de dépendances du workflow. Chaque nœud représente une tâche qui doit être exécutée. Les tâches vertes sont déjà terminées tandis que les tâches jaunes doivent encore être exécutées. La plupart de ces tâches sont des tâches Hadoop, mais certaines tâches s'exécutent également localement et créent des fichiers de données.
Conceptuellement, Luigi est similaire à GNU Make dans lequel vous avez certaines tâches et ces tâches peuvent à leur tour avoir des dépendances sur d'autres tâches. Il existe également certaines similitudes avec Oozie et Azkaban. Une différence majeure est que Luigi n'est pas uniquement conçu spécifiquement pour Hadoop, et qu'il est facile de l'étendre avec d'autres types de tâches.
Tout dans Luigi est en Python. Au lieu d'une configuration XML ou de fichiers de données externes similaires, le graphique de dépendances est spécifié dans Python . Cela facilite la création de graphiques de dépendances complexes de tâches, où les dépendances peuvent impliquer une algèbre de dates ou des références récursives à d'autres versions de la même tâche. Cependant, le flux de travail peut déclencher des choses qui ne sont pas en Python, comme l'exécution de scripts Pig ou la création de fichiers scp.
Nous utilisons Luigi en interne chez Spotify pour exécuter des milliers de tâches chaque jour, organisées dans des graphiques de dépendances complexes. La plupart de ces tâches sont des tâches Hadoop. Luigi fournit une infrastructure qui alimente toutes sortes de choses, notamment des recommandations, des toplists, des analyses de tests A/B, des rapports externes, des tableaux de bord internes, etc.
Étant donné que Luigi est open source et sans aucun mur d'enregistrement, le nombre exact d'utilisateurs de Luigi est inconnu. Mais compte tenu du nombre de contributeurs uniques, nous nous attendons à ce que des centaines d’entreprises l’utilisent. Certains utilisateurs ont écrit des articles de blog ou fait des présentations sur Luigi :
D'autres entreprises utilisent Luigi mais n'ont pas encore eu l'occasion d'écrire à ce sujet :
Nous sommes plus qu'heureux que votre entreprise soit ajoutée ici. Envoyez simplement un PR sur GitHub.
Luigi a été construit chez Spotify, principalement par Erik Bernhardsson et Elias Freider. De nombreuses autres personnes ont contribué depuis l'open source fin 2012. Arash Rouhani a été le responsable de la maintenance de 2015 à 2019, et désormais l'équipe de données de Spotify gère Luigi.