Sobre o projeto
Luigi é um pacote Python (testado em Python 3.10 a 3.14) para construir pipelines complexos de tarefas em lote. Ele lida com resolução de dependências, gerenciamento de fluxo de trabalho, visualização, tratamento de falhas, integração com linha de comando e mais.
A instalação é via pip: `pip install luigi` para a versão estável mais recente do PyPI, ou `pip install luigi[toml]` para adicionar suporte a configuração baseada em TOML. O código em desenvolvimento pode ser instalado diretamente do repositório do GitHub.
Contexto: Luigi resolve o encanamento tipicamente associado a processos de lote de longa duração. As tarefas podem ser qualquer coisa, mas geralmente são trabalhos de longa duração, como trabalhos Hadoop, despejo de dados para ou de bancos de dados, ou execução de algoritmos de aprendizado de máquina. Luigi não tem a intenção de substituir ferramentas de processamento de dados de nível inferior, como Hive, Pig ou Cascading; em vez disso, ele une muitas tarefas, onde cada tarefa pode ser uma consulta Hive, um trabalho Hadoop em Java, um trabalho Spark em Scala ou Python, um trecho de código Python, um despejo de tabela de banco de dados, ou qualquer outra coisa. Ele suporta a construção de pipelines de longa duração compostos por milhares de tarefas que levam dias ou semanas para serem concluídos.
Luigi vem com uma caixa de ferramentas de modelos de tarefas comuns, incluindo suporte para trabalhos mapreduce Python no Hadoop, bem como trabalhos Hive e Pig. Ele também fornece abstrações de sistema de arquivos para HDFS e arquivos locais que garantem que as operações do sistema de arquivos sejam atômicas, para que um pipeline de dados não falhe em um estado contendo dados parciais.
O servidor Luigi inclui uma interface web para pesquisar e filtrar tarefas, e o visualizador fornece uma visão gráfica do grafo de dependências de um fluxo de trabalho, onde cada nó representa uma tarefa a ser executada e as cores indicam tarefas concluídas versus pendentes.
Filosofia: conceitualmente, Luigi é semelhante ao GNU Make, com tarefas que podem depender de outras tarefas, e compartilha algumas semelhanças com Oozie e Azkaban. Uma grande diferença é que Luigi não é construído especificamente para Hadoop e pode ser estendido com outros tipos de tarefas. Tudo está em Python: em vez de configuração XML ou arquivos de dados externos semelhantes, o grafo de dependências é especificado dentro do Python, facilitando a construção de grafos de dependências complexos onde as dependências podem envolver álgebra de datas ou referências recursivas a outras versões da mesma tarefa. Os fluxos de trabalho ainda podem acionar coisas fora do Python, como executar scripts Pig ou copiar arquivos via scp.
Adoção: Luigi é usado internamente no Spotify para executar milhares de tarefas todos os dias organizadas em grafos de dependências complexos, principalmente trabalhos Hadoop, alimentando recomendações, listas de mais tocados, análise de testes A/B, relatórios externos e painéis internos. O README lista muitas outras organizações que escreveram ou apresentaram sobre Luigi, incluindo Foursquare, Stripe, Buffer, SeatGeek, Treasure Data, AdRoll, Groupon/OrderUp, Red Hat Marketing Operations, GetNinjas, voyages-sncf.com, Open Targets, Leipzig University Library, Glossier, Data Revenue, Uppsala University, GIPHY, xtream e CIAN, além de empresas adicionais que não publicaram sobre isso. O número exato de usuários é desconhecido, pois Luigi é open source sem barreiras de registro.
Links externos incluem uma lista de discussão no Google Groups para discussões e perguntas, lançamentos no PyPI, o código-fonte no GitHub e um plugin de integração Hubot para Slack, Hipchat e serviços semelhantes.
Autores: Luigi foi construído no Spotify, principalmente por Erik Bernhardsson e Elias Freider, com muitos outros colaboradores desde que foi lançado como open source no final de 2012. Arash Rouhani foi o mantenedor-chefe de 2015 a 2019, e o Time de Dados do Spotify agora mantém o Luigi.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.