首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Iceberg表格式

Iceberg表格式

原创
作者头像
Yiwenwu
修改2025-03-14 10:18:14
修改2025-03-14 10:18:14
5510
举报

背景介绍

Iceberg是介于上层计算引擎与底层存储格式之间的中间层定义为一种"数据组织格式"并称为表格式,它并不定义数据存储方式,而是定义了数据、元数据的组织方式,向上提供统一的“表”的语义。

Iceberg带来一些传统数仓的特性,包括ACID的语义,MVCC的能力,行级数据修改的能力,这些是原先Hive表所不具备的,因此Iceberg赋予了用户在数据湖上建仓的能力

Iceberg通过表目录进行组织,表目录分为data目录metadata目录,其中data目录存放的是表的数据,metadata目录存放的是表的元数据。所有的数据和元数据都是存放在HDFS上的。在Catalog(例如Hive metastore)中会存放元数据的最新版本,作为refer指向存放在HDFS上真正的metadata目录。Iceberg查询时,先访问Iceberg Catalog获取目标表对应的元数据指针,基于元数据指针找到对应的数据文件读取。

代码语言:txt
复制
/metadata
    xxxx.metadata.json --Metadata file
    snap-xxxx.avro  --Manifest list
    xxxx.avro  --Manifest File
/data
    xxxx.parquet --Data file
表目录结构=元数据层+数据层
表目录结构=元数据层+数据层

Iceberg具备了很多额外的特性,包括时间旅行(Time Travel)回溯数据的历史版本,行级数据修改(Update,Delete),Schema Evolution(Table Partition/Column更新),索引优化,Zordering重排序优化等等。Iceberg表是Hive表的一个超集。Hive基于文件夹级别追踪数据,Iceberg支持基于文件级别追踪数据。

Iceberg构成

Catalog

Iceberg Catalog 是Iceberg的顶层组件,负责管理所有 Iceberg表的元数据和元数据操作,为计算引擎提供统一的接口访问和操作Iceberg表的元数据。Iceberg提供以下能力:

  • 维护Iceberg表的最新元数据指针
  • 支持原子性操作,确保在更新元数据指针的正确性

Iceberg内部支持Hive和Hadoop两种catalog:

Catalog类型

Metadata JSON管理

Namespace

Hive catalog

Hive MetaStore

1级,即DB

Hadoop catalog

文件系统上的某个文件

多级,对应多级目录

Spark需在系统配置文件spark-defaults.conf添加如下配置,使Iceberg能够访问Hive MetaStore:

代码语言:properties
复制
spark.hadoop.hive.metastore.uris           thrift://<HiveMetaStore>:9083
spark.hadoop.hive.metastore.warehouse.dir  hdfs://<NameNode>:8020/path

元数据层

负责管理表的关键元信息,确保提供高效的数据读取与操作。元数据主要包括三个部分:元数据文件(Metadata file)、清单列表)(Manifest list)和清单文件(Manifest file)。

文件结构示例
文件结构示例

Metadata file:元数据文件

维护特定时间点下,Iceberg表的基本元数据信息:

  • 表结构&表属性:表字段名称、类型,表归属用户,更新时间等
  • 分区信息:表的分区字段
  • 快照(Snapshots)列表:快照记录表在不同时间点的状态,维护相应的数据文件(data files)列表,一个清单列表(Manifest list) 文件代表一个快照
  • 最新快照引用:标识当前表的最新状态
  • 文件操作概要:变更操作,变更数据量,变更文件数等

Manifest list:清单列表

清单列表是维护多个清单文件(Manifest File)的列表,一个清单列表对应一个快照,记录快照的详细信息,包括:清单文件位置,快照ID,分区信息,列范围(数据文件的上下限)。

Manifest File:清单文件

管理数据文件的核心,跟踪数据文件(data file)以及每个文件的其他详细信息和统计信息,实现文件级别的数据跟踪。每个Manifest File 会跟踪数据文件的子集,以实现并行性和提升重用效率。文件详情主要包括:文件路径、数据格式类型、文件记录数和列范围。

数据层

数据层是实际存储数据的地方,由数据文件(data files)构成,表示真实存储的数据文件。Iceberg支持不同数据文件格式,包括:parquet, avro, orc,默认为parquet格式,文件是以“.parquet”结尾。Iceberg会按照分区策略进行数据文件组织,以便优化数据访问;Iceberg更新时会产生大量小数据文件

附录

Apache Iceberg: An Architectural Look Under the Covers

Apache Iceberg Architecture-Iceberg 架构详解

Apache Iceberg快速入门

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景介绍
  • Iceberg构成
    • Catalog
    • 元数据层
      • Metadata file:元数据文件
      • Manifest list:清单列表
      • Manifest File:清单文件
    • 数据层
  • 附录
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档