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
Esta postagem do blog se aprofunda em três ferramentas poderosas que podem otimizar sua abordagem atual:
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
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
Otimizado para armazenamento em nuvem : o S3FileIO da Iceberg foi projetado para funcionar com armazenamento nativo em nuvem.
Rendimento melhorado e limitação minimizada: o Iceberg usa um
Consistência Estrita: O Iceberg tem sido
Multipart Upload progressivo: o S3FileIO do Iceberg implementa um
Verificação de soma de verificação: o Iceberg permite
Tags personalizadas: Iceberg suporta adição
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
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.
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
docker-compose --version
Para começar, clone ou copie o arquivo YAML no Tabular's
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: 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.
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.
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