Luigi é um pacote Python (3.7, 3.8, 3.9, 3.10, 3.11, 3.12 testado) que ajuda a construir pipelines complexos de trabalhos em lote. Ele lida com resolução de dependências, gerenciamento de fluxo de trabalho, visualização, tratamento de falhas, integração de linha de comando e muito mais.
Execute pip install luigi
para instalar a versão estável mais recente do PyPI. A documentação da versão mais recente está hospedada em readthedocs.
Execute pip install luigi[toml]
para instalar o Luigi com suporte a configurações baseadas em TOML.
Para o código mais recente, pip install git+https://github.com/spotify/luigi.git
. Documentação de ponta sangrenta também está disponível.
O objetivo do Luigi é resolver todos os problemas normalmente associados a processos em lote de longa duração. Você deseja encadear muitas tarefas, automatizá-las e falhas acontecerão . Essas tarefas podem ser qualquer coisa, mas normalmente são tarefas de longa duração, como trabalhos do Hadoop, despejo de dados de/para bancos de dados, execução de algoritmos de aprendizado de máquina ou qualquer outra coisa.
Existem outros pacotes de software que se concentram em aspectos de nível inferior do processamento de dados, como Hive, Pig ou Cascading. Luigi não é uma estrutura para substituí-los. Em vez disso, ajuda a unir muitas tarefas, onde cada tarefa pode ser uma consulta Hive, um trabalho Hadoop em Java, um trabalho Spark em Scala ou Python, um snippet Python, despejo de uma tabela de um banco de dados ou qualquer outra coisa. É fácil criar pipelines de longa duração que compreendem milhares de tarefas e levam dias ou semanas para serem concluídos. Luigi cuida de grande parte do gerenciamento do fluxo de trabalho para que você possa se concentrar nas tarefas em si e em suas dependências.
Você pode criar praticamente qualquer tarefa que desejar, mas o Luigi também vem com uma caixa de ferramentas com vários modelos de tarefas comuns que você usa. Inclui suporte para execução de trabalhos mapreduce do Python no Hadoop, bem como trabalhos Hive e Pig. Ele também vem com abstrações de sistema de arquivos para HDFS e arquivos locais que garantem que todas as operações do sistema de arquivos sejam atômicas. Isso é importante porque significa que seu pipeline de dados não travará em um estado que contenha dados parciais.
O servidor Luigi também vem com uma interface web, para que você possa pesquisar e filtrar todas as suas tarefas.
Só para você ter uma ideia do que Luigi faz, esta é uma captura de tela de algo que estamos executando em produção. Usando o visualizador do Luigi, obtemos uma boa visão geral do gráfico de dependência do fluxo de trabalho. Cada nó representa uma tarefa que deve ser executada. As tarefas verdes já foram concluídas, enquanto as tarefas amarelas ainda não foram executadas. A maioria dessas tarefas são trabalhos do Hadoop, mas também existem algumas coisas que são executadas localmente e criam arquivos de dados.
Conceitualmente, o Luigi é semelhante ao GNU Make, onde você tem certas tarefas e essas tarefas, por sua vez, podem ter dependências de outras tarefas. Existem também algumas semelhanças com Oozie e Azkaban. Uma grande diferença é que o Luigi não foi desenvolvido especificamente para o Hadoop, e é fácil estendê-lo com outros tipos de tarefas.
Tudo no Luigi está em Python. Em vez de configuração XML ou arquivos de dados externos semelhantes, o gráfico de dependência é especificado em Python . Isso facilita a construção de gráficos de dependência complexos de tarefas, onde as dependências podem envolver álgebra de datas ou referências recursivas a outras versões da mesma tarefa. No entanto, o fluxo de trabalho pode acionar coisas que não estão no Python, como a execução de scripts Pig ou arquivos scp.
Usamos o Luigi internamente no Spotify para executar milhares de tarefas todos os dias, organizadas em gráficos de dependência complexos. A maioria dessas tarefas são trabalhos do Hadoop. Luigi fornece uma infraestrutura que alimenta todos os tipos de coisas, incluindo recomendações, listas principais, análises de testes A/B, relatórios externos, painéis internos, etc.
Como o Luigi é de código aberto e sem paredes de registro, o número exato de usuários do Luigi é desconhecido. Mas com base no número de colaboradores únicos, esperamos que centenas de empresas o utilizem. Alguns usuários escreveram postagens em blogs ou fizeram apresentações sobre Luigi:
Mais algumas empresas estão usando o Luigi, mas ainda não tiveram a oportunidade de escrever sobre isso:
Estamos mais do que felizes por ter sua empresa adicionada aqui. Basta enviar um PR no GitHub.
Luigi foi construído no Spotify, principalmente por Erik Bernhardsson e Elias Freider. Muitas outras pessoas contribuíram desde o código aberto no final de 2012. Arash Rouhani foi o principal mantenedor de 2015 a 2019, e agora a equipe de dados do Spotify mantém Luigi.