paint-brush
使用 Iceberg、Tabular 和 MinIO 构建有效的现代数据架构经过@minio
7,617 讀數
7,617 讀數

使用 Iceberg、Tabular 和 MinIO 构建有效的现代数据架构

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

太長; 讀書

现代数据湖为您的所有数据需求提供了中央枢纽。然而,构建和管理有效的数据湖可能很复杂。
featured image - 使用 Iceberg、Tabular 和 MinIO 构建有效的现代数据架构
MinIO HackerNoon profile picture
0-item
1-item


现代数据环境需要一种新型的基础设施——无缝集成结构化和非结构化数据、轻松扩展并支持高效的 AI/ML 工作负载。这就是现代数据湖为您提供满足所有数据需求的中央枢纽。但是,构建和管理有效的数据湖可能很复杂。


这篇博文深入探讨了三种可以优化您当前方法的强大工具:阿帕奇冰山表格,和 MinIO。以下步骤将引导您了解如何无缝结合这些服务以创建专门针对 AI/ML 工作负载优化的强大、云原生数据湖架构。

什么是表格?

Tabular 是由 Apache Iceberg 的原始创建者创建的数据平台。它旨在提供一个独立的通用存储平台,可连接到任何计算层,从而消除数据供应商锁定。此功能对于现代数据堆栈至关重要,它允许用户选择一流的计算和存储工具,而不必被迫使用特定供应商的陈旧或不匹配的工具集。


在一个建筑学MinIO 和 Iceberg 的结合,并可通过 Tabular 得到增强。Tabular 可用于管理和查询存储在 MinIO 中的 Iceberg 数据,从而以可扩展、高性能和云原生的方式存储和管理结构化数据。这些 Kubernetes 原生组件可以顺畅地协同工作,几乎没有任何摩擦,并相互利用彼此的能力来实现大规模执行。

为什么选择 S3FileIO 而不是 Hadoop 的 file-io?

此实现利用了 Iceberg 的 S3FileIO。出于多种原因,S3FileIO 被认为比 Hadoop 的 file-io 更好。其中一些我们已经讨论过了别处


  1. 针对云存储进行了优化:Iceberg 的 S3FileIO 旨在与云原生存储配合使用。


  2. 提高吞吐量并最小化节流: Iceberg 使用对象存储位置提供者将文件分布在 MinIO 存储桶中的多个前缀之间,这有助于最大限度地减少限制并最大限度地提高与 S3 相关的 IO 操作的吞吐量。


  3. 严格一致性: Iceberg 一直更新通过消除可能影响性能的冗余一致性检查来充分利用严格一致性。


  4. 渐进式分段上传: Iceberg 的 S3FileIO 实现了渐进式分段上传算法,该算法在每个部分准备好后立即并行上传数据文件部分,从而减少本地磁盘使用率并提高上传速度。


  5. 校验和验证: Iceberg 允许校验和验证用于 S3 API 写入,以确保上传对象的完整性,可以通过设置适当的目录属性来启用该功能。


  6. 自定义标签: Iceberg 支持添加自定义标签使用 S3 API 在写入和删除操作期间对对象进行更改,这对于成本跟踪和管理很有用。


  7. 避免负面缓存: Iceberg 中的 FileIO 接口不需要像 Hadoop 兼容文件系统那样严格的保证,这使得它能够避免负面缓存否则可能会降低性能。


相比之下,在 S3FileIO 之前使用的 Hadoop S3A FileSystem 无法为云存储提供相同级别的优化。总之:不要让过去的束缚束缚您面向未来的数据湖基础设施。

先决条件

开始之前,请确保您的系统满足以下要求:

如果你是从头开始,你可以使用Docker 桌面安装程序适用于您的特定平台。这通常比单独下载 Docker 和 Docker Compose 更容易。通过运行以下命令来验证 Docker 是否已安装:


 docker-compose --version


入门

首先,克隆或复制 Tabular 中的 YAML 文件git 存储库。本教程只需要 YAML。以后可以随意探索存储库的其余部分。


分解

提供的 YAML 文件是 Docker Compose 配置文件。它为多容器 Docker 应用程序定义了一组服务及其配置。在本例中,有两个服务:Spark-Iceberg 和 MinIO。让我们分解每个部分:


1.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



image:指定用于 spark-iceberg 服务的 Docker 镜像。在本例中,它使用 tabulario/spark-iceberg:latest 镜像。

depending_on:指定spark-iceberg服务依赖于rest和minio服务。

container_name:为容器分配一个特定的名称(spark-iceberg)。

环境:设置容器的环境变量,包括 Spark 和 AWS 凭证。

volumes:将本地目录(./warehouse 和 ./notebooks)作为卷挂载到容器内。

端口:将容器端口映射到主机端口以访问 Spark UI 和其他服务。


2. 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"]


image:指定 MinIO 服务的 Docker 镜像。

container_name:为容器分配一个特定的名称(MinIO)。

环境:设置用于配置 MinIO 的环境变量,包括 root 用户凭据。

端口:将容器端口映射到主机端口以访问 MinIO UI。

command:指定启动MinIO服务器的命令,并附带具体参数。


MinIO 服务的另一个方面是麦克,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 "


depending_on:指定 mc 服务依赖于 MinIO 服务。

image:指定 mc 服务的 Docker 镜像。

container_name:为容器分配一个特定的名称(mc)。

环境:设置用于配置 MinIO 客户端的环境变量。

entrypoint:定义容器的入口点命令,包括 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 "



这一系列命令主要执行以下任务:


  • 从 MinIO 服务器中删除现有的仓库目录及其内容。

  • 创建一个名为 warehouse 的新存储桶。

  • 设置仓库bucket的访问策略为公开。


此 Docker Compose 文件编排了包含 Spark、PostgreSQL 和 MinIO 服务的多容器环境。它设置了运行服务所需的依赖项、环境变量和命令。这些服务协同工作,使用 Spark 和 Iceberg 以 MinIO 作为对象存储后端创建了一个数据处理开发环境。

启动

在终端窗口中,进入存储库中的 tabular-spark-setup 目录并运行以下命令:


 docker-compose up


使用凭证admin:password登录 MinIO http://127.0.0.1:9001可以看到仓库 bucket 已经创建。



所有容器启动并运行后,您可以通过导航至http://localhost:8888来访问 Jupyter Notebook 服务器



运行其中一个示例笔记本并返回 MinIO http://127.0.0.1:9001以查看已填充数据的仓库。


构建您的现代数据湖

本教程介绍了如何使用 Iceberg、Tabular 和 MinIO 构建现代数据湖,这只是一个开始。这三款功能强大的工具为无限可能的世界打开了大门。借助这些工具,您可以无缝集成和分析所有结构化和非结构化数据,以发现隐藏的模式并推动数据驱动的决策,从而推动创新。利用此架构在生产中的效率和灵活性来加快您的 AI/ML 计划并释放机器学习模型的真正潜力,从而加速您取得突破性发现的步伐。联系我们你好@min.io或者在我们的松弛如果您在构建过程中有任何问题,请通过频道咨询。