paint-brush
Mistérios do Data Lake revelados: Nessie, Dremio e MinIO fazem ondaspor@minio
7,746 leituras
7,746 leituras

Mistérios do Data Lake revelados: Nessie, Dremio e MinIO fazem ondas

por MinIO6m2024/02/22
Read on Terminal Reader

Muito longo; Para ler

Este artigo fornece um guia passo a passo que demonstra como Nessie, Dremio e MinIO trabalham juntos para melhorar a qualidade dos dados e a colaboração em seus fluxos de trabalho de engenharia de dados.
featured image - Mistérios do Data Lake revelados: Nessie, Dremio e MinIO fazem ondas
MinIO HackerNoon profile picture


Muitos de nós fizemos alterações nos dados com base em requisitos que evoluem posteriormente. Quando percebemos isso, torna-se impossível reverter. A mudança não é apenas uma constante; é uma parte essencial do gerenciamento de dados que exige uma abordagem sofisticada. Entre na funcionalidade semelhante ao Git do catálogo de dados Nessie do Dremio.


Assim como o Git se tornou fundamental para o desenvolvimento de software, os engenheiros de dados precisam de ferramentas semelhantes para trabalhar em paralelo, comparar versões de dados, promover alterações na produção e reverter dados quando necessário. Nessie fornece aos engenheiros de dados um sistema de controle de versão semelhante ao Git para gerenciar versões de dados, ramificações, mesclagens e confirmações. Isso pode ser muito útil quando vários engenheiros de dados estão trabalhando e transformando dados ao mesmo tempo. Nessie permite que cada engenheiro trabalhe em filiais separadas, mantendo uma única fonte de verdade na forma de filial principal. Essa funcionalidade capacita as equipes de engenharia de dados a manter a qualidade dos dados de forma colaborativa diante de mudanças implacáveis.


Este artigo fornece um guia passo a passo que demonstra como Nessie, Dremio e MinIO trabalham juntos para melhorar a qualidade dos dados e a colaboração em seus fluxos de trabalho de engenharia de dados. Quer você seja um engenheiro de dados, um engenheiro de ML ou apenas um entusiasta moderno de data lake, este blog fornece o conhecimento e as ferramentas necessárias para aprimorar efetivamente suas práticas de controle de versão de dados.

Compreendendo o básico: cargas de trabalho do Nessie

Nessie permite cargas de trabalho semelhantes ao Git que permitem testar, desenvolver e enviar para produção. Vamos analisar alguns conceitos-chave:


  • Branches: Assim como no Git, os branchs no Nessie permitem que você trabalhe em diferentes tarefas de engenharia de dados simultaneamente. Por exemplo, você pode ter uma ramificação para desenvolvimento de recursos, limpeza e transformação de dados. Cada filial pode ter seu próprio conjunto de alterações de dados.


  • Commits: No Nessie, um commit representa um instantâneo dos dados em um momento específico. Ao fazer alterações em seus dados, você cria um novo commit, que registra essas alterações. Os commits estão vinculados a um branch específico. Quando você precisa reverter seus dados para um estado estável ou em bom estado, o Nessie facilita a seleção de um commit específico e a reversão para essa versão de dados. Isso garante qualidade e consistência dos dados.


  • Mesclar : Nessie permite mesclar as alterações de um ramo para outro. Isso é semelhante a mesclar alterações de código no Git. Quando você mescla uma ramificação, as alterações de dados feitas nessa ramificação tornam-se parte da ramificação de destino.

Os componentes



Dremio é um mecanismo de análise distribuída que opera como uma plataforma de código aberto, oferecendo uma interface intuitiva de autoatendimento para exploração, transformação e trabalho colaborativo de dados. Seu design é baseado em Flecha Apache, um formato de memória colunar de alta velocidade.


Já exploramos como implantar o Dremio com Kubernetes e também como consultar tabelas Iceberg no MinIO com Dremio . Para informações adicionais sobre Dremio, consulte Recursos Drêmio .


MinIO é armazenamento de objetos de alto desempenho. Famosa pela sua excepcional velocidade e escalabilidade , o MinIO atua como um componente essencial na construção e manutenção de infraestruturas modernas de data lake. O MinIO capacita os arquitetos a gerenciar e armazenar com eficiência grandes volumes de dados no local, em bare metal, na borda ou em qualquer uma das nuvens públicas.


Iceberg Apache é um formato de tabela aberto adequado para gerenciar grandes volumes de dados em data lakes. Recursos exclusivos como viagem no tempo, evolução dinâmica de esquema e evolução de partição fazem dele um divisor de águas, permitindo que mecanismos de consulta trabalhem simultaneamente nos mesmos dados com segurança e eficiência. Ver O guia definitivo para arquitetura Lakehouse com Iceberg e MinIO para obter mais informações sobre os recursos do Iceberg.

Começando

Você precisará do Motor Docker e Composição do Docker para este tutorial. A maneira mais fácil de obter os dois, caso ainda não os tenha, é instalar o Docker Desktop.


Esta parte do tutorial é baseada no Dremio postagem no blog . Você pode obter o repositório para este projeto aqui .


Para começar, abra um terminal e navegue até a pasta onde você clonou/ baixou o repositório e execute o comando abaixo para iniciar o Dremio.


 docker-compose up dremio


Aguarde alguns instantes e navegue até http://localhost:9047 para acessar o Dremio. Atualize os campos solicitados e clique em Avançar.



Em seguida, execute o seguinte comando para iniciar o MinIO.


 docker-compose up minio


O comando final docker-compose up abaixo iniciará o Nessie.


 docker-compose up nessie


Navegue até http://localhost:9001 para fazer login no MinIO com o nome de usuário e senha minioadmin:minioadmin . Você será solicitado a criar um bucket.



Faça um chamado iceberg-datalake .



Em seguida, volte para Dremio em http://localhost:9047 e clique em Add Source e selecione Nessie.



  • Defina o nome para nessie
  • Defina o URL do terminal como http://nessie:19120/api/v2
  • Defina a autenticação como none



Não clique em Salvar ainda. Em vez disso, no painel de navegação à esquerda, clique em Armazenamento. MinIO é um armazenamento de objetos compatível com S3-API e pode usar os mesmos caminhos de conexão do AWS S3.


  • Para sua chave de acesso, defina minioadmin
  • Para sua chave secreta, defina minioadmin
  • Defina o caminho raiz para /iceberg-datalake



Role para baixo para o próximo conjunto de instruções.

  • Clique no botão Add Property em Connection Properties para criar e configurar as propriedades a seguir.
    • fs.s3a.path.style.access para true
    • fs.s3a.endpoint para minio:9000
    • dremio.s3.compat para true
    • Desmarque Encrypt connection



Em seguida, clique em Salvar. Agora você deve ver os Catálogos Nessie em suas fontes de dados.



Crie uma fonte de dados

No Dremio navegue até SQL Runner no lado esquerdo. Certifique-se de que o Context na área superior direita do editor de texto esteja definido como nossa fonte Nessie. Caso contrário, você terá que fazer referência ao contexto como nessie.SalesData em vez de apenas SalesData para executar esta consulta. Copie e cole o SQL abaixo e execute.


 CREATE TABLE SalesData (    id INT,    product_name VARCHAR,    sales_amount DECIMAL,    transaction_date DATE ) PARTITION BY (transaction_date); 



Execute a consulta abaixo para inserir dados na tabela que você acabou de criar.


 INSERT INTO SalesData (id, product_name, sales_amount, transaction_date) VALUES    (1, 'ProductA', 1500.00, '2023-10-15'),    (2, 'ProductB', 2000.00, '2023-10-15'),    (3, 'ProductA', 1200.00, '2023-10-16'),    (4, 'ProductC', 1800.00, '2023-10-16'),    (5, 'ProductB', 2200.00, '2023-10-17'); 



Navegue de volta ao MinIO para ver se seu data lake foi preenchido com as tabelas Iceberg.


Ramificação e fusão com Nessie

Retorne ao Dremio em http://localhost:9047 . Comece consultando uma tabela na ramificação principal usando a sintaxe AT BRANCH :


 SELECT * FROM nessie.SalesData AT BRANCH main; 



Crie uma ramificação ETL (Extract Transform and Load) para permitir que você experimente e transforme dados sem afetar a produção.


 CREATE BRANCH etl_06092023 in nessie


Dentro da ramificação ETL, insira novos dados na tabela:

 USE BRANCH etl_06092023 in nessie; INSERT INTO nessie.SalesData (id, product_name, sales_amount, transaction_date) VALUES (6, 'ProductC', 1400.00, '2023-10-18');


Confirme a disponibilidade imediata dos novos dados na filial ETL:

 SELECT * FROM nessie.SalesData AT BRANCH etl_06092023;


Observe o isolamento das alterações dos usuários na ramificação principal:

 SELECT * FROM nessie.SalesData AT BRANCH main;


Mescle as alterações da ramificação ETL de volta à ramificação principal:

 MERGE BRANCH etl_06092023 INTO main in nessie;


Selecione o branch principal novamente para ver se as alterações foram realmente mescladas.

 SELECT * FROM nessie.SalesData AT BRANCH main


Essa estratégia de ramificação permite que os engenheiros de dados lidem de forma independente com inúmeras transações em diversas tabelas. Quando estiverem prontos, os engenheiros de dados podem mesclar essas transações em uma transação única e abrangente com várias mesas na filial principal.

Conclusão

Esta postagem do blog investigou o poder do controle de versão semelhante ao Git na engenharia de dados, enfatizando como Nessi gerencia perfeitamente versões de dados, ramificações e fusões. Este guia passo a passo demonstra como Nessie, em colaboração com Dremio e MinIO, como base de armazenamento de objetos, melhora a qualidade dos dados e a colaboração em fluxos de trabalho de engenharia de dados.


Deixe-nos saber como é o seu data lakehouse olá@minio.io ou em nosso canal no Slack .


Também aparece aqui .