第一章 Iceberg入门介绍

1、Iceberg简介

  • 本质:一种数据组织格式
    第一章 Iceberg入门介绍_第1张图片
1.1、应用场景

面向大表:单表包含数十个PB的数据

分布式引擎非必要:不需要分布式SQL引擎来读取或查找文件

高级过滤:使用表元数据,使用分区和列级统计信息修建数据文件

1.2、集成方式:通过Lib与Flink、Spark集成

Icrbeg非常轻量级,与Flink、Spark整合时通过一个Jar包整合。

2、数据存储文件解析

  • 核心:每一个对表产生改变的操作commit后,都会产生一份新的metadata files,这包括一个vN.metadata.json + 一个manifest list(例如:snap-242516093407225541-1-4bbf0565-406b-428a-aad7-e32993df0fef.avro) + 一个或多个manifest file(例如:4bbf0565-406b-428a-aad7-e32993df0fef-mN.avro)
    第一章 Iceberg入门介绍_第2张图片
  • 下图为Iceberg的表格式:
    • Ⅰ、s0、s1代表的是表Snapshot信息,每个表示当前操作的一个快照,每次Commit都会生成一个快照Snapshot
    • Ⅱ、每个Snapshot快照对应的一个manifest list元数据文件
    • Ⅲ、每个manifest list包含多个Manifest元数据文件
    • Ⅳ、每个Manifest中记录了当前操作生成数据所对应的文件地址,也就是data file地址。
2.1、元数据层

Snapshot(表快照)

  • 文件描述:snap-xxxx.avro,当生成一个parquent文件时生成一个快照

​ 快照代表一张表在某个时刻的状态。每个快照里面会列出表在某个时刻的所有data files列表。data files是存储在不同manifest files里面,manifest files是存储在一个Manifest list文件里面,一个Manifest list文件代表一个快照。

第一章 Iceberg入门介绍_第3张图片

manifest list(清单列表)

​ manifest list是一个元数据文件,它列出构建快照(Snapshot)的清单(Manifest file)。这个元数据文件中存储的是Manifest file列表,每个Manifest file占据一行,每行中存储了Manifest file的路径、其存储的数据文件(data files)的分区范围,增加了几个数据文件、删除了几个数据文件等信息。

第一章 Iceberg入门介绍_第4张图片

注意事项:相关统计信息可以在扫描表数据时过滤掉不必要的文件

manifest file(清单文件)

  • 文件描述:XXX-m0.avro,每当生成一个parquent文件时生成一个快照

第一章 Iceberg入门介绍_第5张图片
​ Manifest file是一个元数据文件,它列出了组成快照(Snapshot)的数据文件(data files)的列表信息每行都是每个数据文件的详细描述,包括数据文件的状态、文件路径、分区信息、列级的统计信息(比如每列的最大最小值、空值数等)、文件的大小以及文件里面数据行数等信息。

  • 注意事项:其中列级别的统计信息可以在扫描表数据时过滤掉不必要的文件
2.2、数据层

​ 数据文件文件是Apache Icberg表真实存储数据的文件,一般在表的数据存储目录的data目录下,如果文件格式选择的是Parquent,那么文件是以".parquent"结尾。
第一章 Iceberg入门介绍_第6张图片

  • 重点:每次Commit都会生成一个Parquent文件
  • 注意事项:目前支持parquent、ORC、Avro文件格式

3、数据后端存储解析

  • 表元数据存储:存储在Hive Metastore中,复用了HMS模型

第一章 Iceberg入门介绍_第7张图片

​ 通过storage handler实现了外表创建,按照前面对表的类型划分,就是 managed non-native。

4、Iceberg表特性

(1)分区与隐藏分区

(2)表演化

(3)模式演化

(4)分区演化

(5)列顺序演化

5、Iceberg Catalog

  • 类别:包括Hive Catalog、Hadoop Catalog、CacheCatalog和JDBC Catalog四种
5.1、Hive Catalog

​ Hive Catalog将表的元数据信息存储在Hive Metastore,为了兼容HMS,Namespace必须包含table和database。

5.2、Hadoop Catalog

Hadoop Catalog将表的元数据信息存储在Hadoop之上,因为Hadoop支持存算分离,因此底层的数据文件可以是HDFS或者是S3这样的对象系统,对Hadoop Catalog来讲,定位一个表的位置,只需要提供表的路径即可,因为表的元信息都存储在文件中,比如TableIdentifier为[“test_table”,“test_db”,“test_nm1”,“test_nm2”]的表全路径

5.3、CacheCatalog

CacheCatalog将表的元数据信息存储在内存之上

5.4、JDBC Catalog

JDBC Catalog将表的元信息存储在支持JDBC协议的数据库中,Flink的JDBC Catalog能够查询注册和查询外部JDBC数据源,而Iceberg的JDBC Catalog只是将本身的元数据存储在JDBC数据库中,Iceberg目前支持的数据来源也仅仅是Hadoop。

你可能感兴趣的:(#,Iceberg专题,java,大数据,开发语言)