使用 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 计划,并释放机器学习模型的真正潜力,从而加速实现突破性发现。
相关文章:
![](https://img-blog.csdnimg.cn/img_convert/e9ca8dd359acc96c26025376d39217b8.png)
使用 Iceberg、Tabular 和 MinIO 构建现代数据架构
现代数据环境需要一种新型的基础架构,即无缝集成结构化和非结构化数据、轻松扩展并支持高效的 AI/ML 工作负载的基础架构。这就是现代数据湖的用武之地,它为您的所有数据需求提供了一个中心枢纽。然而,构建和管理有效的数据湖可能很复杂。 这…...
![](https://www.ngui.cc/images/no-images.jpg)
jnp.linalg.norm
jnp.linalg.norm 是 JAX 中用于计算向量或矩阵的范数的函数。JAX 是一个用于高性能机器学习研究的 Python 库,它提供了与 NumPy 类似的 API,但支持自动微分和加速计算。jnp 是 JAX 的 NumPy 接口。 jnp.linalg.norm 的基本语法 jnp.linalg.norm(x, ord…...
![](https://img-blog.csdnimg.cn/direct/dd3d71455b894e56b4e832775c6dbf27.png)
20240621在飞凌的OK3588-C开发板的Buildroot系统中集成i2ctool工具
20240621在飞凌的OK3588-C开发板中打开i2ctool工具 2024/6/21 17:44 默认继承的i2c工具: rootrk3588-buildroot:/# rootrk3588-buildroot:/# i2c i2c-stub-from-dump i2cdump i2cset i2cdetect i2cget i2ctransfer rootrk3588-…...
![](https://img-blog.csdnimg.cn/img_convert/3642af0d4622aad7f777be1c0683e487.jpeg)
ARM32开发--存储器介绍
知不足而奋进 望远山而前行 目录 文章目录 前言 存储器分类 RAM ROM EEPROM Flash 总结 前言 在现代计算机系统中,存储器扮演着至关重要的角色,不仅影响着数据的存取速度和稳定性,还直接关系到计算机系统的性能和应用场景的选择。存…...
![](https://img-blog.csdnimg.cn/direct/5519d166543c4cea85dd6292d16c5a31.gif)
Web服务器
自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 当在浏览器输入URL后,浏览器会先请求DNS服务器,获得请求站点的 IP 地址(即根据URL地址“www.mingrisoft.com”获取…...
![](https://img-blog.csdnimg.cn/direct/c5ced8034b11442dbe2f65fd65ef3bce.png)
大语言模型-Transformer
目录 1.概述 2.作用 3.诞生背景 4.历史版本 5.优缺点 5.1.优点 5.2.缺点 6.如何使用 7.应用场景 7.1.十大应用场景 7.2.聊天机器人 8.Python示例 9.总结 1.概述 大语言模型-Transformer是一种基于自注意力机制(self-attention)的深度学习…...
![](https://www.ngui.cc/images/no-images.jpg)
POI:接收上传上来的excel,解析并导入到数据库
目录 1、控制层 2、业务层(主要逻辑) 1、控制层 因为前端设置了只能上传1个文件,这里直接取一个。 RequestMapping(value "/shebeiDaoru.ctrl", method RequestMethod.POST, produces "application/json;charsetUTF-8&q…...
![](https://www.ngui.cc/images/no-images.jpg)
网页的CSS和JavaScript文件没有自动更新, 解决办法
项目场景: 无人值守的场馆预定以及管理 问题描述 更新了CSS和JavaScript,访问始终样式不对 原因分析: 浏览器缓存了你的CSS和JavaScript文件 浏览器缓存了你的CSS和JavaScript文件。当文件的修改时间戳(last-modifiedÿ…...
![](https://www.ngui.cc/images/no-images.jpg)
Go语言 获取服务器资源磁盘Disk情况
1、获取整个磁盘的总量、已使用量、使用率 package mainimport ("fmt""github.com/shirou/gopsutil/disk""log" )func main() {// 获取所有挂载点的磁盘使用率信息partitions, err : disk.Partitions(false)if err ! nil {log.Fatalf("Err…...
![](https://img-blog.csdnimg.cn/direct/26e714278ae8403babad0d53542639f6.png)
使用上海云盾 CDN 和 CloudFlare 后 Nginx、 WordPress、 Typecho 获取访客真实 IP 方法
最近因为被 DDoS/CC 攻击的厉害,明月就临时的迁移了服务器,原来的服务器就空置下来了,让明月有时间对服务器进行了重置重新部署安装生产环境。因为站点同时使用了上海云盾和 CloudFlare(具体思路可以参考【国内网站使用国外 CloudFlare CDN 的思路分享】一文)两个 CDN 服务…...
![](https://img-blog.csdnimg.cn/direct/412eddf6554d4e06abe97e078b05d7c0.png)
深入探究RTOS的任务调度
阅读引言: 此文将会从一个工程文件, 一步一步的分析RTOS的任务调度实现, 这里选用FreeRTOS分析, 别的也差不多的, 可能在细节上有少许不一样。 目录 1, 常见嵌入式实时操作系统 2, 任务调度的…...
![](https://img-blog.csdnimg.cn/direct/23cc0c045eda499e86d22b4edb1ea191.png)
【shell脚本速成】函数
文章目录 一、函数1.1、函数介绍1.2、函数定义1.3、函数调用 🌈你好呀!我是 山顶风景独好 🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分使然!😊 🌸愿您在此停留的每一刻…...
![](https://img-blog.csdnimg.cn/direct/f3fb500808e24736aafc214b4f52d042.png)
拒绝零散碎片, 一文理清MySQL的各种锁
系列文章目录 学习MySQL先有全局观,细说其发展历程及特点 Mysql常用操作,谈谈排序与分页 拒绝零散碎片, 一文理清MySQL的各种锁(收藏向) 系列文章目录一、MySQL的锁指什么二、排他与共享三、全局锁(Global…...
![](https://www.ngui.cc/images/no-images.jpg)
P5711 【深基3.例3】闰年判断
1. 题目链接 https://www.luogu.com.cn/problem/P5711 P5711 【深基3.例3】闰年判断 2. 题目描述 题目描述:判断一个数是否是闰年 输入:输入一个整数n 输出:输出1或0,如果是闰年,输出1,否则输出0 3. 我的…...
![](https://www.ngui.cc/images/no-images.jpg)
基于Raft算法实现的分布式键值对存储系统——学习笔记
目录 1 基于Raft算法实现的分布式键值对存储系统 1.1 模块 2 Raft 算法 2 .1 概念 2.2 raft角色(先简单了解,方便后续阅读) 2.3 raft想解决什么问题? 2.4 选举领导 2.5 领导者故障 附录: 参考文献࿱…...
![](https://img-blog.csdnimg.cn/direct/8176728d341d4701a35d0573590f15f2.png)
秋招突击——6/17——复习{整理昨天的面试资料}——新作{删除链表倒数第n个节点}
文章目录 引言复习新作删除链表倒数第N个节点题目描述个人实现参考实现 总结 引言 主管面,面的很凄惨,不过无所谓了,我已经尽力了。上午都在整理的面经,没有复习算法,而且这两天要弄一下论文,二十号就要提…...
![](https://img-blog.csdnimg.cn/direct/26234762eb3b49a8be9367136d574537.png)
宝塔面板使用技巧(pure-FTP)上传文件和文件夹默认权限644的修改
前言 科技在进步各种各样的开源软件和库让我们应接不暇,我估计现在所有做php开发的人员都知道宝塔面板,我就经常用,但是不知道大家出现过一个问题不就是在我们开发过程中需要实时的给服务器上传我们开发的文件那么就涉及到了宝塔自带的pure-F…...
![](https://www.ngui.cc/images/no-images.jpg)
mac m芯片安装win11遇坑
mac m芯片安装win11遇坑 1、下载arm架构镜像 磁力链接: magnet:?xturn:btih:e8c15208116083660709eac9aee124e025c01447&dnSW_DVD9_Win_Pro_11_22H2_64ARM_ChnSimp_Pro_Ent_EDU_N_MLF_X23-12755.ISO&xl57198960642、使用VMWare Fusion安装,启…...
![](https://img-blog.csdnimg.cn/direct/4860a26bd6e74a9bab724207def9b62e.png)
一个自定义流程的平台
脚本语言使用的是C#,当用户发布一个新的流程时,会把C#的脚本编译成dll,然后添加到微服务中,因为有了硬编译,所以执行速度是非常快的。逻辑脚本支持调试,可以断点和逐行调试。平台提供了调试工具,…...
![](https://img-blog.csdnimg.cn/direct/8c2e88190167452ab2c5758db817165a.jpeg)
舔狗日记Puls微信小程序源码
源码介绍: 这是一款舔狗日记Puls微信小程序源码,提供每日一舔的功能,让你舔到最后,什么都有! 源码通过API获取一些舔狗日记,内置了100多句舔狗日记,让你摆脱上班摸鱼的无聊时光, …...
![](https://img-blog.csdnimg.cn/direct/c69076760dce47949bb419d6c77930e7.png)
PyMuPDF 操作手册 - 05 PDF的OCR识别等
文章目录 六、PyMuPDF的OCR识别6.1 使用 Tesseract进行OCR6.2 使用MuPDF进行OCR6.3 使用 Python 包easyocr进行OCR识别6.4 使用 Python ocrmypdf包进行OCR识别6.5 将图像批量OCR并转换为PDF七、PDF附加、嵌入、批注等7.1 附加文件7.2 嵌入文件7.3 从文档中获取所有批注六、PyMu…...
![](https://www.ngui.cc/images/no-images.jpg)
Vue与TypeScript的配合:如何在Vue项目中使用TypeScript,利用静态类型提高代码的可维护性
环境搭建: 在你的 Vue 项目中使用 TypeScript,使你的代码具有静态类型检查、IDE 的类型提示等有益的功能。以下是搭建 Vue 和 TypeScript 的开发环境的步骤: 创建一个项目 使用 Vue CLI 创建一个新的Vue项目是最简单的方法: vue create my-project 在出现的提示中,选择…...
![](https://www.ngui.cc/images/no-images.jpg)
华为仓颉语言介绍
文章目录 1.简介2.初识仓颉语言3.基本概念3.1标识符3.2程序结构3.3变量3.4表达式3.4.1if 表达式3.4.2while语句3.4.3do-while表达式3.4.4 for-in 表达式3.4.5 where条件3.4.6 break和continue 3.5 函数 1.简介 随着万物互联以及智能时代的到来,软件的形态将发生巨大…...
![](https://www.ngui.cc/images/no-images.jpg)
《昇思 25 天学习打卡营第 3 天 | 张量 Tensor 》
《昇思 25 天学习打卡营第 3 天 | 张量 Tensor 》 活动地址:https://xihe.mindspore.cn/events/mindspore-training-camp 签名:Sam9029 感觉像是在 学习高数一样 张量 Tensor 张量是一种特殊的数据结构,与数组和矩阵非常相似。 张量…...
![](https://www.ngui.cc/images/no-images.jpg)
free命令——显示系统内存使用情况
free命令的功能是显示系统内存使用情况,包含物理内存和交换内存的总量、使用量和空闲量。 语法格式:free [选项] 常用选项及含义 选项含义-b以字节B为单位显示内存和交换内存的容量使用情况-k以KB为单位显示内存和交换内存的容量使用情况-m以MB为单位…...
![](https://img-blog.csdnimg.cn/direct/653e723ba8274fccbefecbf95f455255.jpeg)
麒麟移动运行环境(KMRE)——国内首个开源的商用移固融合“Android生态兼容环境”正式开源
近日,由麒麟软件研发的KMRE(Kylin Mobile Runtime Environment,麒麟移动运行环境)在openKylin(开放麒麟)社区正式发布,为Linux桌面操作系统产品提供了高效的Android运行环境解决方案。这也是国内…...
![](https://www.ngui.cc/images/no-images.jpg)
print(“{}{}“.format())
print("{}{}".format()) 是 Python 中用于格式化字符串并将其输出到控制台的一种方法。format 方法允许你在字符串中插入变量或表达式的值,并以指定的格式显示它们。 基本语法 print("format_string".format(value1, value2, ...))format_str…...
![](https://img-blog.csdnimg.cn/direct/0103974032e44f6e87568b43cc23f77d.png)
2-12 基于CV模型卡尔曼滤波、CT模型卡尔曼滤波、IMM模型滤波的目标跟踪
基于CV模型卡尔曼滤波、CT模型卡尔曼滤波、IMM模型滤波的目标跟踪。输出跟踪轨迹及其误差。程序已调通,可直接运行。 2-12 CV模型卡尔曼滤波 CT模型卡尔曼滤波 - 小红书 (xiaohongshu.com)...
![](https://www.ngui.cc/images/no-images.jpg)
序列1bp插入有什么影响
1bp插入突变(1个碱基插入)在基因序列中通常会引起以下几种影响: 移码突变(Frameshift Mutation): 插入的一个碱基会改变插入点之后所有的密码子,导致读取框的移动。这种变化通常会引起整个蛋白质…...
![](https://img-blog.csdnimg.cn/img_convert/114d9f1142b7dbdae0f8896ef88b3a92.jpeg)
CVPR 2024盛况空前,上海科技大学夺得最佳学生论文奖,惊艳全场
CVPR 2024盛况空前!上海科技大学夺得最佳学生论文奖,惊艳全场! 会议之眼 快讯 2024 年 CVPR (Computer Vision and Pattern Recogntion Conference) 即国际计算机视觉与模式识别会议,于6月17日至21日正在美国西雅图召…...
![](https://img-blog.csdnimg.cn/img_convert/898f4dc920e9e943eec59045cb218666.png)
做网站的功能是什么/哈尔滨优化网站公司
以前传统的营销方式是先宣传品牌,打造品牌的知名度,然后在宣传产品,推广产品,利用品牌的知名度和影响力吸引用户购买,这导致一些用心打磨产品的小品牌被埋没,即使产品再好,也无人问津。但随着互…...
怎样自己做一个网站/网站排名优化课程
快播搜索功能源码,介绍给大家。 源码下载: http://code.662p.com/view/1584.html...
什么可以做冷门网站/怎么做好推广和营销
1. HTML发展历史介绍 2. 浏览器支持 2.1 新增标签支持 在html5 中新增了很多的标签,其中包括8个新增语义结构标签。header, section, footer, aside, nav, main, article, figure ,但是在IE的一些版本中并不能够有效的支持。 /* 人为的进行一些处理&…...
![](/images/no-images.jpg)
在网站上做教育直播平台多少钱/业务推广公司
在服务器上安装 zsh 和 oh-my-zsh 本身不是什么难的事情,不过因为国内网络环境的问题,很多东西总是事与愿违,然后公有云厂商也很少把方法贴出来,就很麻烦,反正搜官方文档也搜不太出来,除了自己做代理&#…...
![](https://img-blog.csdnimg.cn/20200312215723952.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMxODIxNjc1,size_16,color_FFFFFF,t_70#pic_center)
福州公司网站设计/热门搜索关键词
文章目录Class 文件格式字节码Class类的本质Class文件格式类加载机制加载验证准备解析初始化类加载器双亲委派机制栈桢JVM方法调用详解方法解析静态分派动态分派参考Class 文件格式 一般情况下Java代码执行流程如下图: 字节码 字节码文件 .class文件的产生是最关…...
![](/images/no-images.jpg)
想美团这样的网站怎么做/重庆森林台词
前言:Object类是所有Java类的超类,如果一个类没有明确的指出超类,它的超类就是Object。Java中,所有类都是由Object类扩展而来的。本文对Object类做一个简单记录。 1、可以使用Object类型的变量引用任何类型的对象,但也…...