当前位置: 首页 > article >正文

Apache Iceberg Architecture—Iceberg 架构详解

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.kler.cn/news/317169.html

相关文章:

  • Seata学习笔记
  • 使用python写按键程序
  • Vue学习(五)生命周期、组件
  • IT行业的现状与未来发展趋势
  • 数据库主备副本物理复制和逻辑复制对比
  • 除猫毛用粘毛器还是宠物空气净化器?希喂/米家/352/范罗士/有哈空气净化器对比
  • vue3<script setup>中computed
  • ELK环境部署
  • Codeforces Round 971 (Div. 4) G1. Yunli‘s Subarray Queries (easy version)
  • 2024年中国科技核心期刊目录(科普卷)
  • 快速理解TCP协议(三)——TCP协议的三次握手与四次挥手
  • 苍穹外卖学习笔记(九)
  • 【Webpack--012】提取单独的CSS文件压缩CSS文件
  • leetcode:验证回文串
  • 综合时如何计算net delay?
  • 【最基础最直观的排序 —— 冒泡排序算法】
  • 公安局党建平台建设方案和必要性-———未来之窗行业应用跨平台架构
  • 电动车车牌识别系统源码分享
  • 【LIO-SAM】LIO-SAM论文翻译(2020年)
  • 【揭秘Java】线程安全中的有序性之谜
  • 【Hive 运维】JDBC使用Hive UDF:Hive UDF打通hiveserver2
  • idea多模块启动
  • uniapp 动态修改input样式
  • Linux bash特性:
  • 机器人上的DPDK使用思考
  • Android Retrofit源码分析(一):Retrofit是什么?和OkHttp的区别是什么?为什么需要他?
  • 计算机网络34——Windows内存管理
  • 速盾:网站使用 CDN 加速
  • Redis的分布式部署
  • AI大模型日报#0923:李飞飞创业之后首个专访、华为云+腾讯音乐发布昇腾适配方案