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 🍷.
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).
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:
- Spark Web UI - http://localhost:8080
- MinIO - http://localhost:9000
- Jupyter lab - http://localhost:8888
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.
Esse pequeno trecho de código cria uma DataFrame com 100 milhões de linhas e armazena no bucket raw do MinIO.
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.
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.