Iceberg是介于上层计算引擎与底层存储格式之间的中间层,定义为一种"数据组织格式"并称为表格式,它并不定义数据存储方式,而是定义了数据、元数据的组织方式,向上提供统一的“表”的语义。
Iceberg带来一些传统数仓的特性,包括ACID的语义,MVCC的能力,行级数据修改的能力,这些是原先Hive表所不具备的,因此Iceberg赋予了用户在数据湖上建仓的能力。
Iceberg通过表目录进行组织,表目录分为data目录和metadata目录,其中data目录存放的是表的数据,metadata目录存放的是表的元数据。所有的数据和元数据都是存放在HDFS上的。在Catalog(例如Hive metastore)中会存放元数据的最新版本,作为refer指向存放在HDFS上真正的metadata目录。Iceberg查询时,先访问Iceberg Catalog获取目标表对应的元数据指针,基于元数据指针找到对应的数据文件读取。
/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的顶层组件,负责管理所有 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:
spark.hadoop.hive.metastore.uris thrift://<HiveMetaStore>:9083
spark.hadoop.hive.metastore.warehouse.dir hdfs://<NameNode>:8020/path
负责管理表的关键元信息,确保提供高效的数据读取与操作。元数据主要包括三个部分:元数据文件(Metadata file)、清单列表)(Manifest list)和清单文件(Manifest file)。
维护特定时间点下,Iceberg表的基本元数据信息:
清单列表是维护多个清单文件(Manifest File)的列表,一个清单列表对应一个快照,记录快照的详细信息,包括:清单文件位置,快照ID,分区信息,列范围(数据文件的上下限)。
管理数据文件的核心,跟踪数据文件(data file)以及每个文件的其他详细信息和统计信息,实现文件级别的数据跟踪。每个Manifest File 会跟踪数据文件的子集,以实现并行性和提升重用效率。文件详情主要包括:文件路径、数据格式类型、文件记录数和列范围。
数据层是实际存储数据的地方,由数据文件(data files)构成,表示真实存储的数据文件。Iceberg支持不同数据文件格式,包括:parquet, avro, orc,默认为parquet格式,文件是以“.parquet”结尾。Iceberg会按照分区策略进行数据文件组织,以便优化数据访问;Iceberg更新时会产生大量小数据文件。
Apache Iceberg: An Architectural Look Under the Covers
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有