Apache Iceberg Architecture—Iceberg 架构详解

news2024/9/30 7:47:22

Apache Iceberg Architecture

在这里插入图片描述

Apache Iceberg 的架构可以分为三个主要层次:Iceberg Catalog、元数据层和数据层。

在这里插入图片描述


一、 Iceberg Catalog(目录)

Iceberg Catalog 是 Iceberg 的顶层组件,负责管理所有 Iceberg 表的元数据和元数据操作

Catalog 管理表的架构和元数据,提供了创建、查询和修改表的接口,是 用户和系统与Iceberg表交互的入口点。
在这里插入图片描述

Iceberg Catalog (catalog 目录)提供了一个中心位置,用户可以通过它找到每个表当前元数据文件的位置,是读取和写入 Iceberg 表的关键组件。

在这里插入图片描述

  1. 当前元数据指针

    • Iceberg Catalog 中保存每个表的当前元数据文件的指针(current metadata pointer),确保用户能够获取到最新的元数据
      在这里插入图片描述
  2. 原子操作支持

    • Catalog 必须支持原子操作,以确保在更新当前元数据指针时能够提供事务的原子性和正确性。
    • 常见的支持方式包括 HDFS、Hive Metastore 和 Nessie。
  3. 元数据存储方式

    • 不同的 Catalog 方案存储当前元数据指针的方式不同:
      • HDFS:在表的元数据文件夹中有一个名为 version-hint.txt 的文件,内容为当前元数据文件的版本号。
      • Hive Metastore:表在元存储中的条目包含一个属性,存储当前元数据文件的位置。
      • Nessie:Nessie 存储每个表的当前元数据文件的位置。
  4. 查询流程

    • 执行 SELECT 查询时,查询引擎首先访问 Iceberg Catalog,获取目标表的当前元数据文件位置,然后打开该文件进行数据读取

二、元数据层 (metadata layer)

Iceberg 的元数据层负责管理和存储有关表的关键信息,确保高效的数据读取与操作。元数据主要包括三个部分:元数据文件清单列表清单文件

在这里插入图片描述

1. 元数据文件(Metadata File)

在这里插入图片描述
元数据文件保存关于表的基本信息:

  • 表的 schema:定义表中字段的类型和名称。
  • 分区信息:说明数据如何在表中分区以优化查询性能。
  • 快照(Snapshots):记录表在不同时间点的状态。每个快照里面会列出表在某个时刻的所有 data files 列表。data files是存储在不同的manifest files里面,manifest files是存储在一个Manifest list文件里面,而一个Manifest list文件代表一个快照

在这里插入图片描述

  • 当前快照的引用:标识哪个快照是表的最新状态。

在这里插入图片描述
在这里插入图片描述

当执行 SELECT 查询时,查询引擎首先通过目录获取当前元数据文件的位置,然后读取当前快照的 ID,并在快照数组中查找该 ID,最终打开与之对应的清单列表。


2. 清单列表(Manifest List)

在这里插入图片描述
清单列表是一个指向多个清单文件的列表。每个清单文件记录一个快照的详细信息:

  • 清单文件的位置:清单文件的存储位置。
  • 快照 ID:该清单文件所属的快照 ID。
  • 分区信息:记录哪些分区包含在该清单中。
  • 列的范围:跟踪数据文件的下限和上限。

在这里插入图片描述

在这里插入图片描述

查询引擎打开清单列表后,读取清单路径并加载清单文件。此时,可以进行一些优化,例如基于行数或分区信息过滤数据。

3. 清单文件(Manifest File)

在这里插入图片描述
清单文件是 Iceberg 管理数据文件的核心,主要职责包括:

  • 跟踪数据文件及其详细信息和统计数据。
  • 每个清单文件追踪一部分数据文件,以实现并行读取和提高效率。

在这里插入图片描述

  • 文件路径:数据文件的存储位置。
  • 数据文件格式:指明使用的文件格式,如 Parquet、ORC 或 Avro。
  • 记录计数:文件中记录的数量。
  • 列的上下限:用于数据过滤和优化的统计信息。

在这里插入图片描述

当查询引擎打开清单文件后,读取文件路径和相关统计信息,以便访问实际的数据文件,并利用统计信息进行优化。


三、 数据层 (Data Layer)

数据层是实际存储数据的地方,Data Files数据文件是Apache Iceberg表真实存储数据的文件。

  • 数据文件 (Data Files)
    在这里插入图片描述
    • Iceberg 支持多种数据文件格式,如 Parquet、ORC 和 Avro。这些文件按照列式存储,便于高效的读写和压缩。如果文件格式选择的是parquet,那么文件是以“.parquet”结尾。
    • 数据文件按照 Iceberg 的分区策略进行组织,以优化数据访问。
    • Iceberg每次更新会产生多个数据文件(data files)。

在这里插入图片描述


再回过头来看一下这个结构,是不是就豁然开朗啦。
在这里插入图片描述

仅供学习使用哈

整理不易,列位彦祖一键三连哈😂

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

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

相关文章

828华为云征文 | 智能监控新篇章,Prometheus如何在华为云Flexusx容器环境中大展身手

前言 在数字化转型的浪潮中,智能监控成为企业IT战略的关键环节。部署在华为云Flexus X实例上的Prometheus监控系统,凭借其卓越的性能与灵活性,正开启智能监控的新篇章。Flexus X实例以其强大的计算能力和灵活的资源管理,为Prometh…

I/O中断处理过程

中断优先级包括响应优先级和处理优先级,响应优先级由硬件线路或查询程序的查询顺序决定,不可动态改变。处理优先级可利用中断屏蔽技术动态调整,以实现多重中断。下面来看他们如何运用在中断处理过程中: 中断控制器位于CPU和外设之…

phpstudy简易使用

注意,本文所述的操作步骤均建立在电脑上已经完成php环境变量的配置与vscode的安装之上 、

万界星空科技数字孪生:解锁制造业未来,重塑智慧工厂新纪元

万界星空科技的数字孪生技术是一项创新的技术解决方案,它深度融合了工业大数据、物联网(IoT)、人工智能(AI)等先进技术,为制造业工厂提供了一个高度智能化、可视化的运营管理系统。以下是对万界星空科技数字…

EXEAL无法使用宏处理办法

在打开exeal的时候如果提示无法使用宏,或者不显示宏,可能是因为以下几个权限没有打开 1.随便打开一个exeal选择文件 2.选择更多里面的选项 3.选择信任中心里面的信任中心设置 4.信任中心宏设置启用所有宏 5.如果是网盘等其他路径的文件,点击…

leetcode-链表篇4

leetcode-2 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都…

VUE 开发——Node.js学习

一、认识Node.js Node.js是一个跨平台JavaScript运行环境,使开发者可以搭建服务器端的JavaScript应用程序 使用Node.js编写服务器端程序——编写数据接口、前端工程化; Node.js环境没有BOM和DOM; Node.js安装:下载node-v16.19…

C#基于SkiaSharp实现印章管理(10)

向PDF文件插入印章图片比之前实现的向图片文件插入印章麻烦得多。   最初的想法是使用PDF浏览控件在线打开PDF文件,然后在控件中实现鼠标移动时动态显示印章,点击鼠标时向当前PDF页面的鼠标点击位置插入图片。由于是.net 8的Winform项目,选…

数据结构 ——— C语言实现无哨兵位单向不循环链表

目录 前言 动态顺序表的缺陷 单链表的概念 单链表中节点的结构 单链表逻辑结构示意图​编辑 实现单链表前的准备工作 实现单链表 1. 定义节点的指针 2. 创建节点 3. 打印单链表中的所有数据 4. 在单链表头部插入数据 5. 在单链表尾部插入数据 6. 在单链表头部删除数…

HashMap的实现

Hash的最大容量为什么是2的30次方 问题 static final int *MAXIMUM_CAPACITY* 1 << 30; 回到题目&#xff0c;为什么会是2的30次幂&#xff0c;而不是2的31次幂呢&#xff1f; 首先&#xff1a;JAVA规定了该static final 类型的静态变量为int类型&#xff0c;至于为什…

神经网络在多分类问题中的应用

作者简介:热爱数据分析,学习Python、Stata、SPSS等统计语言的小高同学~个人主页:小高要坚强的博客当前专栏:Python之机器学习本文内容:神经网络在多分类问题中的应用作者“三要”格言:要坚强、要努力、要学习 目录 1. 引言 2.数据构造 3.划分数据集 4.神经网络实现多…

Stable Diffusion绘画 | 来训练属于自己的模型:素材处理与打标篇

纵观整个模型训练流程&#xff0c;图片素材准备和打标环节占据的分量比重&#xff0c;绝对超过60%。 上一篇分享了图片素材准备&#xff0c;这一篇&#xff0c;开始对准备好的图片素材进行处理了。 素材处理 我已经收集了 霉霉 的25张图片&#xff1a; 但是&#xff0c;发现…

4G模组SIM卡电路很简单,但也要注意这些坑

上次水SIM卡相关的文章&#xff0c;还是上一次&#xff1b; 上一篇文章里吹牛说&#xff0c;跟SIM卡相关的问题还有很多&#xff0c;目的是为下一篇文章埋下伏笔&#xff1b;伏笔埋是埋下了&#xff0c;但如果债老是不还&#xff0c;心里的石头就总悬着&#xff0c;搞不好老板…

黑名单系统源码全解无后门 +搭建教程

黑名单系统源码可以做骗子收录查询 搭建教程 1.我们先添加一个站点 2.PHP选择7.3 3.上传源码解压 4.导入数据库 5.配置数据库信息config.php https://download.csdn.net/download/huayula/89817619

2-3树(2-3 Tree):原理、常见算法及其应用

目录 引言 2-3树的基本概念 常见算法 查找节点 插入节点 删除节点 2-3树的应用场景 1. 文件系统目录管理 应用原理 场景描述 2. 字典编码 应用原理 场景描述 总结 优势对比 自平衡特性 灵活的节点结构 高效的操作性能 简单的实现 广泛的应用场景 数据一致…

【django】django项目使用https访问+ssl证书

目录 一、安装 django-sslserver 二、配置settings 三、启动项目测试 四、使用ssl证书 4.1 安装cryptography 4.2 生成证书代码 4.3 将生成的证书放到django项目根目录下 五、使用证书启动项目 5.1 本地测试启动 5.2 生产启动 六、生成docker镜像的dockerfile 七、…

《程序猿之Redis缓存实战 · Redis 与数据库一致性》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

多模态人像编辑:PortraitGen将2D肖像视频提升到4D 高斯场

这篇文章《Portrait Video Editing Empowered by Multimodal Generative Priors》&#xff0c;作者是来自中国科学技术大学。文章介绍了一种名为PortraitGen的肖像视频编辑方法&#xff0c;它使用多模态生成先验来实现一致性和富有表现力的风格化编辑。 文章地址&#xff1a;P…

electron教程(三)窗口设置

在main.js文件中&#xff0c;创建窗口时会设置窗口的大小&#xff0c;其实还有很多其他属性&#xff0c;可以根据实际需求选择设置&#xff0c;但部分属性存在局限性&#xff0c;官网也有明确告知&#xff1a;自定义窗口 | Electron (electronjs.org) 项目文件目录如下&#x…

6.1 微服务 服务发现 架构模式分类 应用实践

微服务 服务发现 架构模式分类 应用实践 目录概述需求&#xff1a; 设计思路实现思路分析1.类型-客户端发现2.类型-服务端服务发现3.工具-Eureka4.工具-Consul5.工具-zookper服务发现的挑战服务发现的最佳实践 参考资料和推荐阅读 Survive by day and develop by night. talk …