Article image

JJ

Jorge Junior18/09/2024 16:43
Compartilhe

Crie seu Local Object Store com MiniO, PySpark e Delta Lake

    Na última década, o armazenamento de objetos como o AWS S3 se tornou uma parte crucial do nosso fluxo de trabalho devido à sua simplicidade no manuseio de dados não estruturados e à sua relação custo-benefício. No entanto, muitas vezes somos limitados pelas especificações fornecidas pelos provedores de serviços de nuvem, como o AWS S3 ou o Azure Blob Storage .

    Quando se trata de camadas de armazenamento no nível empresarial, há opções de alto desempenho com escolhas de implantação mais flexíveis disponíveis. Hoje, gostaria de apresentar a você uma dessas ótimas opções — MiniO . MiniO é um projeto de código aberto, que permite que você o experimente facilmente em sua máquina local e crie projetos em torno dele. Você pode usá-lo para um data lake, data lake house ou simplesmente como uma camada de armazenamento para seus projetos de ML/IA.

    Configurar

    Todo ambiente dockerizado, usando as seguintes ferramentas:

    • PySpark (3.5.1)
    • Delta Lake (3.2.0)
    • MinIO (AGPL v3) 🦩
    • Jupyter Lab

    Clone o repositório ,entre no diretório e crie os contêineres.

    $ git clone https://github.com/jorgemaciel/py_spark_analytics
    $ cd py_spark_analytics
    $ make build
    $ make start
    
    Todo o código está disponível no meu GitHub. Sinta-se à vontade para usá-lo e me fazer perguntas diretamente.

    Acesse MinIO

    Se tudo estiver certinho acesse http://localhost:9000 e faça login usando estas credenciais:

    • username: minioadmin
    • passsword: minioadmin

    Agora você pode criar seus próprios buckets para salvar e manipular arquivos como um AWS S3 🍷.

    image

    O arquivo docker-composer.yml, por padrão, define a criação de dois buckets: Raw e Bronze. Esses buckets serão utilizados para armazenar dados brutos (Raw) e dados processados em um nível inicial (Bronze).

    image

    Terminologia básica

    Ótimo! Agora que tudo está instalado e funcionando, vamos rever alguns termos essenciais que são importantes para todos os provedores de armazenamento de objetos. Presumo que você esteja familiarizado com a funcionalidade básica do S3 . Então, vamos cobrir rapidamente alguns termos:

    Bucket — Um bucket é uma coleção de vários objetos junto com políticas e configurações adicionais. Você pode pensar em um bucket como um volume em sua máquina local ou um banco de dados. No AWS S3 , você tem um limite para o número de buckets que pode criar, e seus nomes são globalmente exclusivos. No entanto, como o MiniO é um serviço auto-hospedado, você não terá tais limitações.

    Prefixo — Um prefixo é similar a uma pasta. A pasta raiz tem o prefixo “/” e você pode aninhar seus dados profundamente usando prefixos relevantes. Por exemplo, your_bucket/first_prefix/second_prefix constrói tal hierarquia.

    Objeto — Um objeto é um pedaço de dados armazenado no formato de sua escolha e inclui um ID e metadados exclusivos. Você pode acessar objetos usando uma API RESTful , o que significa que você pode trabalhar com qualquer linguagem.

    Espero que isso seja o suficiente para começarmos. Vamos agora explorar a funcionalidade potencial do armazenamento MiniO .

    Juntando MiniO, PySpark e Delta Lake

    Se tudo estiver funcionando corretamente nosso ambiente de testes teremos:

    Crie o token para acesso ao jupyter lab com o seguinte comando no terminal

    $ make token
    

    Acesse http://localhost:8888, cole o token no campo text/password e envie. Se tudo estiver certo, agora você tem acesso ao Jupyter Lab e pode criar scripts python normalmente.

    Crie um notebook e vamos testar o ambiente.

    image

    Esse pequeno trecho de código cria uma DataFrame com 100 milhões de linhas e armazena no bucket raw do MinIO.

    image

    Antes de salvarmos o mesmo DataFrame no formato Delta irei falar um pouco sobre o Delta lake.

    o Delta Lake emerge como uma solução promissora. Ao estender os recursos dos arquivos de dados Parquet com um log de transações baseado em arquivo, o Delta Lake busca trazer a confiabilidade das propriedades ACID para o ambiente flexível do Data Lake. Isso possibilita a realização de operações confiáveis de análise de dados em um ambiente que anteriormente poderia não ser tão estruturado.

    Portanto, enquanto o Data Lake oferece flexibilidade e escalabilidade para lidar com os desafios modernos de dados, é importante reconhecer que as propriedades ACID também são essenciais para garantir a confiabilidade e a consistência dos processos analíticos. O Delta Lake se apresenta como uma solução que busca unir o melhor dos dois mundos, trazendo a confiabilidade das propriedades ACID para o ambiente dinâmico do Data Lake, permitindo assim que as organizações aproveitem ao máximo suas capacidades analíticas sem comprometer a integridade dos dados. A essa solução misturada foi dado o nome de Datalakehouse.

    Caractéristicas do Delta Lake

    O Delta Lake adiciona estrutura aos dados armazenados no Data Lake e fica acima do Data Lake atual. Além disso, oferece recursos como:

    • Transações ACID
    • Aplicação de esquema
    • Time Travelling(versionamento de dados)
    • Dados armazenados no formato Parquet
    • Projetado para funcionar com o Apache Spark (atualmente conversa com o Pandas também)
    • Tratamento escalonável de metadados
    • As tabelas podem combinar dados de streaming e em lote

    Agora vamos salvar um DataFrame no formato Delta.

    image

    image

    Conclusão:

    E aí, pessoal! 🚀 Espero que este post tenha mostrado como construir um Local Object Store com MiniO, PySpark e Delta Lake, uma solução poderosa e flexível para gerenciar seus dados. Com essa combinação, você tem:

    • Armazenamento local e escalável: MiniO oferece um sistema de arquivos distribuído e de baixo custo, ideal para ambientes locais.
    • Processamento de dados eficiente: PySpark permite a análise e transformação de dados em grande escala, aproveitando a potência do Spark.
    • Gerenciamento de dados confiável: Delta Lake garante a consistência e a confiabilidade dos seus dados, com controle de versão e transações atômicas.

    Essa solução é perfeita para:

    • Desenvolvimento local: Teste e desenvolva seus pipelines de dados sem depender de infraestrutura na nuvem.
    • Protótipos rápidos: Crie e experimente soluções de dados de forma ágil e eficiente.
    • Ambientes de produção de baixo custo: Execute seus pipelines de dados em ambientes locais com custos reduzidos.

    Em um próximo post irei abordar com maior profundidade o uso do Delta Lake nesse ambiente.

    Compartilhe
    Comentários (0)