Luigi es un paquete de Python (3.7, 3.8, 3.9, 3.10, 3.11, 3.12 probado) que le ayuda a crear canales complejos de trabajos por lotes. Maneja la resolución de dependencias, la gestión del flujo de trabajo, la visualización, el manejo de fallas, la integración de la línea de comandos y mucho más.
Ejecute pip install luigi
para instalar la última versión estable de PyPI. La documentación de la última versión está alojada en readthedocs.
Ejecute pip install luigi[toml]
para instalar Luigi con soporte para configuraciones basadas en TOML.
Para obtener el código de vanguardia, pip install git+https://github.com/spotify/luigi.git
. También está disponible documentación de última generación.
El propósito de Luigi es abordar todas las tuberías típicamente asociadas con procesos por lotes de larga duración. Quiere encadenar muchas tareas, automatizarlas y se producirán fallas. Estas tareas pueden ser cualquier cosa, pero suelen ser cosas de larga duración, como trabajos de Hadoop, volcar datos hacia/desde bases de datos, ejecutar algoritmos de aprendizaje automático o cualquier otra cosa.
Existen otros paquetes de software que se centran en aspectos de nivel inferior del procesamiento de datos, como Hive, Pig o Cascading. Luigi no es un marco para reemplazarlos. En cambio, le ayuda a unir muchas tareas, donde cada tarea puede ser una consulta de Hive, un trabajo de Hadoop en Java, un trabajo de Spark en Scala o Python, un fragmento de Python, volcar una tabla de una base de datos o cualquier otra cosa. Es fácil crear procesos de larga duración que comprenden miles de tareas y tardan días o semanas en completarse. Luigi se encarga gran parte de la gestión del flujo de trabajo para que puedas centrarte en las tareas en sí y sus dependencias.
Puedes crear prácticamente cualquier tarea que desees, pero Luigi también viene con una caja de herramientas con varias plantillas de tareas comunes que puedes usar. Incluye soporte para ejecutar trabajos de reducción de mapas de Python en Hadoop, así como trabajos de Hive y Pig. También viene con abstracciones del sistema de archivos para HDFS y archivos locales que garantizan que todas las operaciones del sistema de archivos sean atómicas. Esto es importante porque significa que su canalización de datos no fallará en un estado que contenga datos parciales.
El servidor Luigi también viene con una interfaz web, para que puedas buscar y filtrar entre todas tus tareas.
Sólo para darte una idea de lo que hace Luigi, esta es una captura de pantalla de algo que estamos ejecutando en producción. Usando el visualizador de Luigi, obtenemos una buena descripción visual del gráfico de dependencia del flujo de trabajo. Cada nodo representa una tarea que debe ejecutarse. Las tareas verdes ya están completadas, mientras que las tareas amarillas aún no se han ejecutado. La mayoría de estas tareas son trabajos de Hadoop, pero también hay algunas cosas que se ejecutan localmente y crean archivos de datos.
Conceptualmente, Luigi es similar a GNU Make, donde tienes ciertas tareas y estas tareas, a su vez, pueden depender de otras tareas. También hay algunas similitudes con Oozie y Azkaban. Una diferencia importante es que Luigi no está diseñado específicamente para Hadoop y es fácil ampliarlo con otros tipos de tareas.
Todo en Luigi está en Python. En lugar de una configuración XML o archivos de datos externos similares, el gráfico de dependencia se especifica dentro de Python . Esto facilita la creación de gráficos de dependencia complejos de tareas, donde las dependencias pueden involucrar álgebra de fechas o referencias recursivas a otras versiones de la misma tarea. Sin embargo, el flujo de trabajo puede desencadenar cosas que no están en Python, como ejecutar scripts de Pig o archivos scp.
Usamos Luigi internamente en Spotify para ejecutar miles de tareas todos los días, organizadas en complejos gráficos de dependencia. La mayoría de estas tareas son trabajos de Hadoop. Luigi proporciona una infraestructura que impulsa todo tipo de cosas, incluidas recomendaciones, listas principales, análisis de pruebas A/B, informes externos, paneles internos, etc.
Dado que Luigi es de código abierto y no tiene muros de registro, se desconoce el número exacto de usuarios de Luigi. Pero según la cantidad de contribuyentes únicos, esperamos que cientos de empresas lo utilicen. Algunos usuarios han escrito publicaciones en blogs o han realizado presentaciones sobre Luigi:
Algunas empresas más están utilizando Luigi pero aún no han tenido la oportunidad de escribir sobre ello:
Estamos más que felices de que su empresa se agregue aquí. Simplemente envíe un PR en GitHub.
Luigi fue construido en Spotify, principalmente por Erik Bernhardsson y Elias Freider. Muchas otras personas han contribuido desde que se abrió el código a finales de 2012. Arash Rouhani fue el principal responsable de mantenimiento de 2015 a 2019, y ahora el equipo de datos de Spotify mantiene a Luigi.