使用 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.rhkb.cn/news/359524.html

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

相关文章

PR模板 | RGB特效视频标题模板Titles | MOGRT

RGB特效视频标题模板mogrt免费下载 4K分辨率(38402160) 支持任何语言 友好的界面 输入和输出动画 快速渲染 视频教程 免费下载:https://prmuban.com/39055.html 更多pr模板视频素材下载地址:https://prmuban.com

不翻墙安装yolov8环境下的RT-DETR并实现PCB表面缺陷检测

目录 一、新建conda环境二、安装yolov8环境1.克隆安装包2.安装依赖包3.测试模型 任务2:基于RT-DETR实现PKU-PCB表面缺陷检测数据准备 数据增强测试 总结 一、新建conda环境 创建并激活conda环境: 在conda创建一个名为yolov8的新环境,并在其中…

外贸行业 - 收汇日期

“收汇日期”指的是外贸业务中,出口方从进口方收到货款的具体日期。在外贸交易中,特别是使用信用证(Letter of Credit, L/C)、电汇(Telegraphic Transfer, T/T)、付款交单(Documents against Pa…

《2024云安全资源池 能力指南》

《2024云安全资源池 能力指南》这份报告不仅梳理了云安全资源池的发展历程,还深入探讨了其在当前云计算环境下的重要性和必要性。报告详细分析了云安全资源池的市场需求、技术架构、关键技术以及行业应用案例,为政企用户提供了全面的云安全解决方案。通过资料收集、问卷调研、企…

深入了解 GPT-4 和 ChatGPT 的 API---OpenAI Playground

文章目录 基本概念OpenAI API 提供的可用模型在 OpenAI Playground 中使用 GPT 模型 掌握GPT-4 和 ChatGPT 的 API 的使用方法,以便有效地将它们集成到 Python 应用程序中。首先,需要了解 OpenAI Playground。这将使你在编写代码之前更好地了解模型。接着…

如何将一个web端程序打包成一个pc端程序(exe文件)?

如何将一个Web端程序打包成一个PC端程序,例如一个可执行的EXE文件,是许多开发者常见的需求。下面将详细解释如何使用Nativefier工具将Web端程序打包成PC端程序的具体步骤。 目录 下载并安装Node.js验证Node.js和npm的安装安装Nativefier使用Nativefier打…

鸿蒙Harmony角落里的知识:从ECMA规范到ArkTS接口(一)

前言: 在深入理解和使用ArkTS中的数组操作之前,我们有必要先了解ECMAScript(ECMA)规范中的规定。ECMA规范是JavaScript语言的官方标准,而ArkTS作为JavaScript的超集,也遵守了这些规定。本系列文章旨在探讨…

学期结束如何发布期末成绩?

当期末的试卷最后一张被收起,当教室里的喧嚣逐渐沉寂,学生们的心中充满了对成绩的期待与忐忑。期末成绩,关乎着学生的心情,更关系到他们的未来学习动力。那么,如何在保护学生隐私的同时,高效地公布成绩呢&a…

文件怎么加密?电脑文件加密,分享5个实用方法

通常情况下,人们对手机数据的保护比对电脑数据更为重视。许多人使用指纹和密码来防止他人窥视聊天记录和照片。然而,电脑上的数据却常常被忽视。大多数用户仅设置了电脑登录密码,认为这样就足以保护电脑和其中的文件。然而如果你也是这样认为…

chatglm系列知识

一、目录 chatglm 是什么语言模型与transformer decoder 的区别解释prefix LM与Cause LMchatglm(prefix LM)与decoder-only LM 核心区别glm 架构chatglm 预训练方式chatglm 微调chatglm与chatglm2、chatglm3的区别chatglm 激活函数采用gelu, 为什么chat…

办理北京公司注册地址异常变更要求和流程

在北京注册公司时选择注册地址是非常重要的一环,注册地址不仅体现在营业执照上,在网上也有公示信息,一般选用的是商用地址和商住两用地址,在公司经营过程中,因为经营需要变更注册地址,也要依法变更&#xf…

详解Spring AOP(一)

目录 1. AOP概述 2.Spring AOP快速入门 2.1引入AOP依赖 2.2编写AOP程序 3.Spring AOP核心概念 3.1切点(PointCut) 3.2连接点(Join Point) 3.3通知(Advice) 3.4切面(Aspect) …

时间?空间?复杂度??

1.什么是时间复杂度和空间复杂度? 1.1算法效率 算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称为空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空…

CentOS 8.5 - 配置ssh的免密登录

文章目录 生成ssh密钥公钥内容放入服务器 生成ssh密钥 在本地主机安装 ssh工具,并生成公钥、私钥。 # 命令行输入 ssh-keygen -r rsa# 会在当前用户的家目录下生成一个.ssh目录公钥内容放入服务器 将上一步生成的id_rsa.pub公钥的内容复制到远程服务器 # 编辑文…

Day17--654.最大二叉树+617.合并二叉树+700.二叉搜索树中的搜索+ 98.验证二叉搜索树

一、654.最大二叉树 题目链接:https://leetcode.cn/problems/maximum-binary-tree/ 文章讲解:https://programmercarl.com/0654.%E6%9C%80%E5%A4%A7%E4%BA%8C%E5%8F%89%E6%A0%91.html 视频讲解:https://www.bilibili.com/video/BV1MG411G7ox…

SpringMVC系列四: Rest-优雅的url请求风格

Rest请求 💞Rest基本介绍💞Rest风格的url-完成增删改查需求说明代码实现HiddenHttpMethodFilter机制注意事项和细节 💞课后作业 上一讲, 我们学习的是SpringMVC系列三: Postman(接口测试工具) 现在打开springmvc项目 💞Rest基本介…

Part 5.2 KMP

KMP 算法可以用来解决模式串匹配问题。 【模板】KMP 题目描述 给出两个字符串 s 1 s_1 s1​ 和 s 2 s_2 s2​,若 s 1 s_1 s1​ 的区间 [ l , r ] [l, r] [l,r] 子串与 s 2 s_2 s2​ 完全相同,则称 s 2 s_2 s2​ 在 s 1 s_1 s1​ 中出现了&…

「动态规划」如何求最长递增子序列的长度?

300. 最长递增子序列https://leetcode.cn/problems/longest-increasing-subsequence/description/ 给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其…

使用Apache Flink实现实时数据同步与清洗:MySQL和Oracle到目标MySQL的ETL流程

使用Apache Flink实现实时数据同步与清洗:MySQL和Oracle到目标MySQL的ETL流程 实现数据同步的ETL(抽取、转换、加载)过程通常涉及从源系统(如数据库、消息队列或文件)中抽取数据,进行必要的转换&#xff0…

2024最新版Node.js下载安装及环境配置教程(非常详细)

一、进入官网地址下载安装包 官网:Node.js — Run JavaScript Everywhere 其他版本下载:Node.js — Download Node.js (nodejs.org) 选择对应你系统的Node.js版本 二、安装程序 (1)下载完成后,双击安装包&#xf…