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


现代数据环境需要一种新型的基础架构,即无缝集成结构化和非结构化数据、轻松扩展并支持高效的 AI/ML 工作负载的基础架构。这就是现代数据湖的用武之地,它为您的所有数据需求提供了一个中心枢纽。然而,构建和管理有效的数据湖可能很复杂。

这篇博文深入探讨了三个强大的工具,它们可以优化您当前的方法:Apache Iceberg、Tabular 和 MinIO。以下步骤将引导您了解这些服务如何无缝组合,以创建专为 AI/ML 工作负载优化的强大云原生数据湖架构。

什么是表格?

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

在 MinIO 和 Iceberg 的架构中,可以通过 Tabular 进行增强。表格可用于管理和查询存储在 MinIO 中的 Iceberg 数据,从而允许以可扩展、高性能和云原生的方式存储和管理结构化数据。这些 Kubernetes 原生组件可以顺利地协同工作,几乎没有摩擦,并建立在彼此的能力之上,可以大规模执行。

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

此实现利用了 Iceberg 的 S3FileIO。S3FileIO 被认为比 Hadoop 的 file-io 更好,原因有几个。其中一些我们已经在其他地方讨论过:

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

2.改进的吞吐量和最小化的限制:Iceberg 使用 ObjectStoreLocationProvider 在 MinIO 存储桶中的多个前缀之间分发文件,这有助于最大限度地减少限制并最大限度地提高与 S3 相关的 IO 操作的吞吐量。

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

4.渐进式分片上传:Iceberg 的 S3FileIO 实现了渐进式分片上传算法,一旦每个分片准备就绪,就会并行上传数据文件分段,从而减少本地磁盘使用量并提高上传速度。

5.校验和验证:Iceberg 允许对 S3 API 写入进行校验和验证,以确保上传对象的完整性,这可以通过设置相应的目录属性来启用。

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

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

相比之下,在S3FileIO之前使用的Hadoop的S3A文件系统没有为云存储提供相同级别的优化。综上所述:不要用过去的东西来阻碍面向未来的数据湖基础设施。

Prerequisites 先决条件

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

Docker
Docker Compose

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

docker-compose --version

Getting started 开始

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

Breaking it Down 分解

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

1. 火花冰山服务:

spark-iceberg:image: tabulario/spark-icebergcontainer_name: spark-icebergbuild: spark/networks:iceberg_net:depends_on:- rest- miniovolumes:- ./warehouse:/home/iceberg/warehouse- ./notebooks:/home/iceberg/notebooks/notebooksenvironment:- AWS_ACCESS_KEY_ID=admin- AWS_SECRET_ACCESS_KEY=password- AWS_REGION=us-east-1ports:- 8888:8888- 8080:8080- 10000:10000- 10001:10001rest:image: tabulario/iceberg-restcontainer_name: iceberg-restnetworks:iceberg_net:ports:- 8181:8181environment:- 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 图像。

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

container_name:为容器分配特定名称(火花冰山)。

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

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

ports:将容器端口映射到主机端口,用于访问Spark UI等服务。

2. Minio Service: 2. Minio服务:

minio:image: minio/miniocontainer_name: minioenvironment:- MINIO_ROOT_USER=admin- MINIO_ROOT_PASSWORD=password- MINIO_DOMAIN=minionetworks:iceberg_net:aliases:- warehouse.minioports:- 9001:9001- 9000:9000command: ["server", "/data", "--console-address", ":9001"]

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

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

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

ports:将容器端口映射到主机端口,用于访问 MinIO UI。

command:指定使用特定参数启动 MinIO 服务器的命令。

MinIO 服务的另一个方面是 mc,即 MinIO 的命令行工具。

 mc:depends_on:- minioimage: minio/mccontainer_name: mcnetworks:iceberg_net:environment:- AWS_ACCESS_KEY_ID=admin- AWS_SECRET_ACCESS_KEY=password- AWS_REGION=us-east-1entrypoint: >/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"

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

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

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

environment:设置用于配置 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 的新存储桶。

将仓库存储桶的访问策略设置为 public。

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

Starting Up 启动

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

docker-compose up

使用凭据登录 MinIO at http://127.0.0.1:9001 admin:password 以查看已创建仓库存储桶。

所有容器都启动并运行后,可以通过导航到 http://localhost:8888

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

构建现代数据湖

本教程介绍了如何使用 Iceberg、Tabular 和 MinIO 构建现代数据湖,这仅仅是个开始。这个强大的三人组打开了通往无限世界的大门。借助这些工具,您可以无缝集成和分析所有结构化和非结构化数据,以发现隐藏的模式并推动数据驱动的决策,从而推动创新。在生产中利用此架构的效率和灵活性来加快 AI/ML 计划,并释放机器学习模型的真正潜力,从而加速实现突破性发现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/29324.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

总台,地方卫视媒体邀约新闻报道采访怎么做?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 总台对选题要求非常严格,在想做总台新闻报道之前,让我们先来了解下总台对新闻选题有哪些要求: 一、新闻价值 社会意义:新闻报道的首要任务…

【CHIP】LTC2991 读取温度电压电流 调试实例

文章目录 0. ENV1. LTC2991 数据说明1. 数据计算公式2. 寄存器概述1. 管脚使能寄存器2. 芯片使能寄存器 2. 软件实现1. 概述2. 源码(部分)3. 参考log 0. ENV 软件系统:略 LTC2991:VCC3.3 温度:温控接v1-v2 / v2-v3 / … (双端采样)电压&#…

QT工作笔记

文章目录 QDialog的accept()和reject()介绍QPushButton提示属性样式表QComboBox QDialog的accept()和reject()介绍 accept() 和reject() 这两个槽函数都会和close() 一样关闭dialogaccept() 关闭后 返回了Dialog::Acceptedreject() 关闭后 返回了Dialog::Rejected这样当我们需…

【算法专题--链表】K个一组翻转链表 -- 高频面试题(图文详解,小白一看就懂!!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐双指针 -- 采用哨兵位头节点 🥝 什么是哨兵位头节点? 🍍 案例图解 四、总结与提炼 五、共勉 一、前言 K个一组翻转链表 这道题,可以说是--链表专题--,最经典…

LeetCode 1789, 6, 138

目录 1789. 员工的直属部门题目链接表要求知识点思路代码 6. Z 字形变换题目链接标签思路代码 138. 随机链表的复制题目链接标签思路代码 1789. 员工的直属部门 题目链接 1789. 员工的直属部门 表 表Employee的字段为employee_id,department_id和primary_flag。…

【开发利器】OpenCV实验大师最新版本又又发布了

最新发布 大家好,OpenCV实验大师 最新发布的安装包已经支持Python3.10了。同时继续支持Python3.8的安装包,OpenCV实验大师工具软件本次从Python3.8升级到Python3.10是为了方便更多基于Python3.10的开发者使用。同时修复了一批软件错误。 安装配置 下载…

SpringBoot修改banner

在resources目录下创建banner.txt文件 到该网站下选择banner https://www.bootschool.net/ascii-art 点击拷贝: 粘贴到banner.txt中,保存 重新运行项目即可:

对 PLC AC 模块的 TRIAC 输出进行故障排除

在大多数离散 PLC 系统中,排除输出设备故障的过程相当简单。如果输出端正常工作,则在“关闭”时应测量 0 V,在“开启”时应测量满源电压。对于数字和继电器输出,情况确实如此。对于由 TRIAC 驱动的 AC 输出也应如此,但…

数据结构预备知识(Java):包装类泛型

1、包装类 1.1 包装类 在Java中,每一个基本数据类型都有一个对应的包装类: 在SE的学习中我们已有过简单了解。 我们可以注意到,除了int类型的包装类为Integer,char类型的包装类为Character外,其余基本类型的包装类均…

远程工作岗位机会

电鸭:​​​​​​https://eleduck.com/?sortnew电鸭社区是具有8年历史的远程工作招聘社区,也是远程办公互联网工作者们的聚集地。在社区,我们进行有价值的话题讨论,也分享远程、外包、零活、兼职、驻场等非主流工作机会。「只工…

llm-大模型落地评测?提供一个领域大模型测评方法

文章目录 前置说明1.领域大模型评估指标1.1.性能指标计算方法1.1.1.F11.1.2.首字响应时间1.1.3.处理效率1.1.4.并发路数1.1.5.正确性1.1.6.完整度1.1.7.相关度1.1.8.有效性 1.2.安全性指标计算方法1.2.1.禁止项内容的统计方式1.2.2.问题项内容占比率的统计方式 1.3.质量指标及计…

启动报错 “lc.exe”已退出,代码为 -1

启动项目时报错 “lc.exe”已退出,代码为 -1,这个原因是项目需要认证的凭证,有两种方法解决 1.手动搜索license,然后删掉即可 2.安装插件 工具->nuget包管理->管理解决方案的nuget包,搜emptylicenses&#xff0c…

使用LangChain+Ollama自己做的一个和大语言模型聊天的网站支持上下文对话,学习记录。

0.引言 在自己学习的过程中可以自己做一个和聊天大模型对话的一个小网站,成就感不亚于人生第一次跑完10km。 1.项目介绍 前端代码:Vue3, MarkDownIT. 后端代码:Python3, Fernet库, OpenAPI, LangChain, Ollama. Ollama 本地模型的部署和管理…

SuperMap iClient3D 11i(2023) SP1 for Cesium 调整

SuperMap iClient3D 11i(2023) SP1 for Cesium 最新版本 下载地址 SuperMap技术资源中心|为您提供全面的在线技术服务 每一次版本升级,都要对代码进行修改调整,都是为了解决功能需求。当然,也为产品做了小白鼠测试,发现bug,优化功能。 由于前端开发使用的是dojo框架,类…

java之sql注入审计

1 基础环境搭建 1.1 mysql数据库搭建 phpStudy是一个PHP调试环境的程序集成包,PHPMysqlApache。 通过phpstduy下载与安装指 定版本的mysql数据库【可以同时下载多个版本,便于应对不对的系统及复现漏洞便捷切换多个版本】 完成下载后,启动…

失眠焦虑?这里有你的心灵疗愈手册

🍃 亲爱的朋友们,你是否也曾在深夜里辗转反侧,无法入眠?是否也曾因为生活中的琐事而焦虑不安,无法放松心情?在这个快节奏的时代,失眠和焦虑似乎成为了我们生活中难以避免的问题。今天&#xff0…

SpringBoot购物网站

摘要 随着信息技术的高速发展,二十一世纪的网络技术和网络应用正在快速融入人们的生活,并且由于网络服务以及网络应用日渐普及,人们对于现在生活的需求也随之增长,而网上购物的便捷对人们的吸引力越来越大,购物网站可…

ES 8.14 向量搜索优化

参考:https://blog.csdn.net/UbuntuTouch/article/details/139502650 检索器(standard、kNN 和 RRF) 检索器(retrievers)是搜索 API 中的一种新抽象概念,用于描述如何检索一组顶级文档。检索器被设计为可以…

【经典爬虫案例】用Python爬取微博热搜榜!

一、爬取目标 本次爬取的是: 微博热搜榜 (代码也可直接在下方拿): ​ 分别爬取每条热搜的: 热搜标题、热搜排名、热搜类别、热度、链接地址。 下面,对页面进行分析。 经过分析,此页面没有XHR链接通过&am…

如何覆盖!important修饰的属性

最简单的方法 如果这个!important修饰的属性 是自己的写的,去掉这种写法,使用优先级的方式来写这个属性(.outter .inner 的优先级就会比 。outter的优先级高) 复杂的方法:用魔法打败魔法 但是这个样式来自于全局css&am…