paint-brush
Construindo arquiteturas de dados modernas e eficazes com Iceberg, Tabular e MinIOpor@minio
7,617 leituras
7,617 leituras

Construindo arquiteturas de dados modernas e eficazes com Iceberg, Tabular e MinIO

por MinIO7m2024/04/17
Read on Terminal Reader
Read this story w/o Javascript

Muito longo; Para ler

Os datalakes modernos fornecem um hub central para todas as suas necessidades de dados. No entanto, construir e gerenciar um data lake eficaz pode ser complexo.
featured image - Construindo arquiteturas de dados modernas e eficazes com Iceberg, Tabular e MinIO
MinIO HackerNoon profile picture
0-item
1-item


O cenário de dados moderno exige um novo tipo de infraestrutura – uma que integre perfeitamente dados estruturados e não estruturados, seja dimensionada sem esforço e capacite cargas de trabalho eficientes de IA/ML. É aqui que lagos de dados modernos entre, fornecendo um hub central para todas as suas necessidades de dados. No entanto, construir e gerenciar um data lake eficaz pode ser complexo.


Esta postagem do blog se aprofunda em três ferramentas poderosas que podem otimizar sua abordagem atual: Iceberg Apache , Tabular, e MinIO. As etapas abaixo orientarão você sobre como esses serviços se combinam perfeitamente para criar uma arquitetura de data lake robusta e nativa da nuvem, otimizada especificamente para cargas de trabalho de IA/ML.

O que é tabular?

Tabular é uma plataforma de dados criada pelos criadores originais do Apache Iceberg. Ele foi projetado para fornecer uma plataforma de armazenamento independente e universal que se conecta a qualquer camada de computação, eliminando a dependência do fornecedor de dados. Esse recurso é fundamental para a pilha de dados moderna, pois permite que os usuários escolham as melhores ferramentas de computação e armazenamento da categoria sem serem forçados a usar o conjunto de ferramentas antigas e/ou incompatíveis de um determinado fornecedor.


Em um arquitetura do MinIO e Iceberg e pode ser aprimorado pelo Tabular. Tabular pode ser usado para gerenciar e consultar dados Iceberg armazenados no MinIO, permitindo o armazenamento e gerenciamento de dados estruturados de maneira escalonável, de alto desempenho e nativa da nuvem. Esses componentes nativos do Kubernetes funcionam juntos perfeitamente com muito pouco atrito e se baseiam nas capacidades uns dos outros para funcionar em escala.

Por que S3FileIO em vez do file-io do Hadoop?

Esta implementação aproveita o S3FileIO do Iceberg. S3FileIO é considerado melhor que o file-io do Hadoop por vários motivos. Alguns dos quais já discutimos em outro lugar :


  1. Otimizado para armazenamento em nuvem : o S3FileIO da Iceberg foi projetado para funcionar com armazenamento nativo em nuvem.


  2. Rendimento melhorado e limitação minimizada: o Iceberg usa um ObjectStoreLocationProvider para distribuir arquivos entre vários prefixos em um bucket MinIO, o que ajuda a minimizar a limitação e maximizar o rendimento para operações de IO relacionadas ao S3.


  3. Consistência Estrita: O Iceberg tem sido Atualizada para aproveitar totalmente a consistência estrita, eliminando verificações de consistência redundantes que poderiam afetar o desempenho.


  4. Multipart Upload progressivo: o S3FileIO do Iceberg implementa um upload multiparte progressivo algoritmo, que carrega partes dos arquivos de dados em paralelo assim que cada parte está pronta, reduzindo o uso do disco local e aumentando a velocidade de upload.


  5. Verificação de soma de verificação: o Iceberg permite validações de soma de verificação para gravações da API S3 para garantir a integridade dos objetos carregados, o que pode ser ativado definindo a propriedade de catálogo apropriada.


  6. Tags personalizadas: Iceberg suporta adição tags personalizadas a objetos durante operações de gravação e exclusão com a API S3, o que pode ser útil para rastreamento e gerenciamento de custos.


  7. Evitar cache negativo: A interface FileIO no Iceberg não exige garantias tão rigorosas quanto um FileSystem compatível com Hadoop, o que permite evite cache negativo que de outra forma poderia degradar o desempenho.


Por outro lado, o S3A FileSystem do Hadoop, usado antes do S3FileIO, não oferece o mesmo nível de otimização para armazenamento em nuvem. Tudo isso para dizer: não prejudique sua infraestrutura de data lake voltada para o futuro com as armadilhas do passado.

Pré-requisitos

Antes de começar, certifique-se de que seu sistema atenda aos seguintes requisitos:

Se você está começando do zero, você pode instalar ambos usando o Área de Trabalho Docker instalador para sua plataforma específica. Muitas vezes é mais fácil do que baixar o Docker e o Docker Compose separadamente. Verifique se o Docker está instalado executando o seguinte comando:


 docker-compose --version


Começando

Para começar, clone ou copie o arquivo YAML no Tabular's repositório git . Você só precisa do YAML para este tutorial. Sinta-se à vontade para explorar o restante do repositório posteriormente.


Dividindo

O arquivo YAML fornecido é um arquivo de configuração do Docker Compose. Ele define um conjunto de serviços e suas configurações para um aplicativo Docker multicontêiner. Neste caso, existem dois serviços: Spark-Iceberg e MinIO. Vamos detalhar cada seção:


1. Serviço Spark-Iceberg:


 spark-iceberg: image: tabulario/spark-iceberg container_name: spark-iceberg build: spark/ networks: iceberg_net: depends_on: - rest - minio volumes: - ./warehouse:/home/iceberg/warehouse - ./notebooks:/home/iceberg/notebooks/notebooks environment: - AWS_ACCESS_KEY_ID=admin - AWS_SECRET_ACCESS_KEY=password - AWS_REGION=us-east-1 ports: - 8888:8888 - 8080:8080 - 10000:10000 - 10001:10001 rest: image: tabulario/iceberg-rest container_name: iceberg-rest networks: iceberg_net: ports: - 8181:8181 environment: - AWS_ACCESS_KEY_ID=admin - AWS_SECRET_ACCESS_KEY=password - AWS_REGION=us-east-1 - CATALOG_WAREHOUSE=s3://warehouse/ - CATALOG_IO__IMPL=org.apache.iceberg.aws.s3.S3FileIO - CATALOG_S3_ENDPOINT=http://minio:9000



imagem: especifica a imagem Docker a ser usada para o serviço spark-iceberg. Neste caso, utiliza a imagem tabulario/spark-iceberg:latest.

depende_on: especifica que o serviço spark-iceberg depende dos serviços rest e minio.

container_name: Atribui um nome específico (spark-iceberg) ao container.

ambiente: define variáveis de ambiente para o contêiner, incluindo credenciais Spark e AWS.

volumes: monta diretórios locais (./warehouse e ./notebooks) como volumes dentro do contêiner.

portas: mapeia portas de contêiner para portas de host para acessar a UI do Spark e outros serviços.


2. Serviço Minio:


 minio: image: minio/minio container_name: minio environment: - MINIO_ROOT_USER=admin - MINIO_ROOT_PASSWORD=password - MINIO_DOMAIN=minio networks: iceberg_net: aliases: - warehouse.minio ports: - 9001:9001 - 9000:9000 command: ["server", "/data", "--console-address", ":9001"]


imagem: especifica a imagem Docker para o serviço MinIO.

container_name: atribui um nome específico (MinIO) ao contêiner.

ambiente: define variáveis de ambiente para configurar o MinIO, incluindo credenciais de usuário root.

portas: mapeia portas de contêiner para portas de host para acessar a UI do MinIO.

comando: especifica o comando para iniciar o servidor MinIO com parâmetros específicos.


Outro aspecto do serviço MinIO é MC , ferramenta de linha de comando do MinIO.


 mc: depends_on: - minio image: minio/mc container_name: mc networks: iceberg_net: environment: - AWS_ACCESS_KEY_ID=admin - AWS_SECRET_ACCESS_KEY=password - AWS_REGION=us-east-1 entrypoint: > /bin/sh -c " until (/usr/bin/mc config host add minio http://minio:9000 admin password) do echo '...waiting...' && sleep 1; done; /usr/bin/mc rm -r --force minio/warehouse; /usr/bin/mc mb minio/warehouse; /usr/bin/mc policy set public minio/warehouse; tail -f /dev/null "


depende_on: especifica que o serviço mc depende do serviço MinIO.

imagem: especifica a imagem Docker para o serviço mc.

container_name: Atribui um nome específico (mc) ao container.

ambiente: define variáveis de ambiente para configurar o cliente MinIO.

ponto de entrada: define o comando do ponto de entrada para o contêiner, incluindo etapas de configuração para o cliente MinIO.


 /usr/bin/mc rm -r --force minio/warehouse; /usr/bin/mc mb minio/warehouse; /usr/bin/mc policy set public minio/warehouse; tail -f /dev/null "



Esta sequência de comandos executa essencialmente as seguintes tarefas:


  • Remove o diretório do warehouse existente e seu conteúdo do servidor MinIO.

  • Cria um novo bucket chamado warehouse.

  • Define a política de acesso do bucket do warehouse como pública.


Este arquivo Docker Compose orquestra um ambiente multicontêiner com serviços para Spark, PostgreSQL, MinIO. Ele configura dependências, variáveis de ambiente e comandos necessários para executar os serviços juntos. Os serviços trabalham em conjunto para criar um ambiente de desenvolvimento para processamento de dados usando Spark e Iceberg com MinIO como back-end de armazenamento de objetos.

Começando

Em uma janela de terminal, entre no diretório tabular-spark-setup no repositório e execute o seguinte comando:


 docker-compose up


Faça login no MinIO em http://127.0.0.1:9001 com as credenciais admin:password para ver se o bucket do warehouse foi criado.



Depois que todos os contêineres estiverem funcionando, você poderá acessar o servidor Jupyter Notebook navegando até http://localhost:8888



Execute um dos notebooks de amostra e retorne ao MinIO em http://127.0.0.1:9001 para ver seu warehouse preenchido com dados.


Construindo seu Datalake moderno

Este tutorial sobre como construir um datalake moderno com Iceberg, Tabular e MinIO é apenas o começo. Este poderoso trio abre portas para um mundo de possibilidades. Com essas ferramentas, você pode integrar e analisar perfeitamente todos os seus dados, estruturados e não estruturados, para descobrir padrões ocultos e impulsionar decisões baseadas em dados que impulsionam a inovação. Aproveite a eficiência e a flexibilidade dessa arquitetura na produção para agilizar suas iniciativas de IA/ML e liberar o verdadeiro potencial de seus modelos de aprendizado de máquina, acelerando seu caminho para descobertas inovadoras. Entre em contato conosco em olá@min.io ou em nosso Folga canal se você tiver alguma dúvida durante a construção.