使用 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-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 图像。

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/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)。

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

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

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

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

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 计划,并释放机器学习模型的真正潜力,从而加速实现突破性发现。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL之优化服务器设置和复制(一)

优化服务器设置 操作系统状态 CPU密集型的机器 CPU密集型服务器的vmstat输出通常在us列会有一个很高的值,报告了花费在非内核代码上的CPU时钟;也可能在sy列有很高的值,表示系统CPU利用率,超过20%就足以令人不安了。在大部分情况下&#xff…

无代码爬虫软件八爪鱼采集器-如何设计判断是、否

我们在设计采集规则的时候,可能会需要判断,比如采集评论的时候“展开更多回复”,就点击这个按钮,像这种情况就可以设计一个判断模块进入 判断模块添加后会自动生成两个,默认都是不判断直接执行,如果我们需要…

网络安全:数据库安全性

文章目录 网络安全:数据库安全性引言数据库安全性的重要性常见的数据库安全威胁数据库安全性的最佳实践数据加密访问控制审计和监控 结语 网络安全:数据库安全性 引言 在前两篇文章中,我们讨论了SQL注入的概念和防范措施。本篇文章将聚焦于…

记一次线上jVM调优

文章目录 问题描述问题分析尝试优化业务代码优化方案修改后代码补充点 问题描述 部门调整,接手一个新项目,为方便后续描述叫user-web,随后推动IT降本,要求根据实际业务量调整服务器实例数量和配置,调整前服务器配置为…

【DevOps】Elasticsearch 数据跨集群同步方案

目录 1、Elasticsearch Cross-Cluster Replication (CCR) 1.1、优点 1.2、缺点 1.3、步骤 1.4、示例 2. Logstash 或其他 ETL 工具 2.1、优点 2.2、缺点 2.3、步骤 3. Apache Kafka 或 RabbitMQ 3.1、优点 3.2、缺点 3.3、步骤 4、使用 Reindex API 进行跨集群同…

基于 Thingsboard 定制开发,国产化企业级、低代码 AIoT 物联网平台

项目源码,文末联系小编 01 ThingsKit 物联网平台 ThingsKit 是基于 Thingsboard 开源物联网平台二次开发,面向中小型企业开箱即用的低代码物联网平台,提供N1N(N个终端产品1个物联网平台N个行业方案)的产品服务矩阵&…

2024爱分析·AI Agent创新成就奖开启申报丨奖项征集

AI Agent正成为企业数字化转型的关键力量。它们不仅提升了工作效率,优化了客户体验,更是在数据分析、决策支持和自动化流程中扮演着至关重要的角色。随着技术的不断进步和应用场景的拓展,AI Agent正以其独特优势,引领企业进入一个…

我的第一个 iOS 程序:iTahDoodle

我的第一个 iOS 程序:iTahDoodle 我的第一个 iOS 程序:iTahDoodle应用功能对象图应用委托对象设置视图为按钮关联动作方法为 UITableView 对象提供数据保存并加载任务数据在模拟器上运行程序下载链接 我的第一个 iOS 程序:iTahDoodle 实现了…

QT——MySQL数据库联用

一、ODBC 1、ODBC简介 ODBC全称为Open Database Connectivity,是一种用于数据库操作的标准接口。要使用ODBC,首先需要安装相应的ODBC驱动程序,然后在系统中配置ODBC数据源。接着,可以通过编程语言(如C++、Java等)或者数据库工具(如SQL Server Management Studio)来连…

深度学习推理显卡设置

深度学习推理显卡设置 进入NVIDIA控制面板,选择 “管理3D设置”设置 "低延时模式"为 "“超高”"设置 “电源管理模式” 为 “最高性能优先” 使用锁频来获得稳定的推理 法一:命令行操作 以管理员身份打开CMD查看GPU核心可用频率&…

AIoT设备新一代高性能处理器瑞芯微RK3576,东胜物联RK3588等核心板定制开发

随着物联网、人工智能和嵌入式技术的不断发展,智能设备应用对芯片处理器的性能需求越来越高,以满足复杂的数据处理需求、实时性要求、复杂的算法运算和多任务处理能力。高性能的芯片可以为智能设备提供更强大的计算能力和更快速的响应速度,从…

通过nginx转发后应用偶发502bad gateway

序言 学习了一些东西,如何才是真正自己能用的呢?好像就是看自己的潜意识的反应,例如解决了一个问题,那么下次再碰到类似的问题,能直接下意识的去找到对应的信息,从而解决,而不是和第一次碰到一样…

新手如何入门Web3?

一、什么是Web3? Web3是指下一代互联网,它基于区块链技术,致力于将各种在线活动变得更加安全、透明和去中心化。Web3是一个广义的概念,涵盖了包括数字货币、去中心化应用、智能合约等在内的多个方面。它的主要特点包括去中心化、…

网络编程--网络理论基础(二)

这里写目录标题 网络通信流程mac地址、ip地址arp协议交换机路由器简介子网划分网关 路由总结 为什么ip相同的主机在与同一个互联网服务通信时不冲突公网ip对于同一个路由器下的不同设备,虽然ip不冲突,但是因为都是由路由器的公网ip转发通信,接…

Apache Paimon系列之:Append Table和Append Queue

Apache Paimon系列之:Append Table和Append Queue 一、Append Table二、Data Distribution三、自动小文件合并四、Append Queue五、压缩六、Streaming Source七、Watermark Definition八、Bounded Stream 一、Append Table 如果表没有定义主键,则默认为…

Vue3基础介绍

文章目录 一、简介1、简介2、性能提升3、源码升级4、拥抱TypeScript5、新特性 二、创建Vue3.0工程1、使用vue-cli创建2、使用vite创建 三、分析工程结构1、main.js2、组件中 一、简介 1、简介 2020年9月18日,Vue.js发布3.0版本,代号(One Piece)海贼王 …

怎么用AI绘画完成设计创作?

AI绘画工具为设计师提供了强大的功能和便利性,用AI绘画进行艺术创作能够使设计师能够更快地迭代和优化设计方案,提高设计效率。那么怎么用AI绘画完成设计创作? 要使用AI绘画完成设计创作,首先需要选择一个合适的工具。目前市场上有很多优秀的…

KVB:怎么样选择最优交易周期?

摘要 在金融交易中,周期的选择是影响交易成败的重要因素之一。不同的交易周期对应不同的市场环境和交易策略,选择合适的周期可以提高交易的成功率。本文将详细探讨交易中如何选择最优周期,包括短周期、中周期和长周期的特点及适用情况&#…

CVE-2023-38836(文件上传+命令执行)

简介 BoidCMS v.2.0.0 存在文件上传漏洞,远程攻击者可通过添加 GIF 头部绕过 MIME 类型检查,执行任意代码。 过程 打开靶场 对网站进行目录扫描 发现后台,登录弱口令账号密码 admin/password 发现文件上传位置 根据简介提示,…

Vue57-组件的自定义事件_解绑

给谁绑的自定义事件,就找谁去触发;给谁绑的自定义事件,就找谁去解绑; 一、解绑自定义事件 1-1、解绑一个自定义事件 到student.vue组件中去解绑。 1-2、解绑多个自定义事件 使用数组来解绑多个。 1-3、解绑所有的自定义事件 二、…