现代数据环境需要一种新型的基础设施——无缝集成结构化和非结构化数据、轻松扩展并支持高效的 AI/ML 工作负载。这就是
这篇博文深入探讨了三种可以优化您当前方法的强大工具:
Tabular 是由 Apache Iceberg 的原始创建者创建的数据平台。它旨在提供一个独立的通用存储平台,可连接到任何计算层,从而消除数据供应商锁定。此功能对于现代数据堆栈至关重要,它允许用户选择一流的计算和存储工具,而不必被迫使用特定供应商的陈旧或不匹配的工具集。
在一个
此实现利用了 Iceberg 的 S3FileIO。出于多种原因,S3FileIO 被认为比 Hadoop 的 file-io 更好。其中一些我们已经讨论过了
针对云存储进行了优化:Iceberg 的 S3FileIO 旨在与云原生存储配合使用。
提高吞吐量并最小化节流: Iceberg 使用
严格一致性: Iceberg 一直
渐进式分段上传: Iceberg 的 S3FileIO 实现了
校验和验证: Iceberg 允许
自定义标签: Iceberg 支持添加
避免负面缓存: Iceberg 中的 FileIO 接口不需要像 Hadoop 兼容文件系统那样严格的保证,这使得它能够
相比之下,在 S3FileIO 之前使用的 Hadoop S3A FileSystem 无法为云存储提供相同级别的优化。总之:不要让过去的束缚束缚您面向未来的数据湖基础设施。
开始之前,请确保您的系统满足以下要求:
如果你是从头开始,你可以使用
docker-compose --version
首先,克隆或复制 Tabular 中的 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 服务的另一个方面是
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 计划并释放机器学习模型的真正潜力,从而加速您取得突破性发现的步伐。联系我们