Iceberg入門介紹

1、Iceberg簡介
本質:一種數據組織格式

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的表格式:
Ⅰ、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文件代表一個快照。

②manifest list(清單列表)

​ manifest list是一個元數據文件,它列出構建快照(Snapshot)的清單(Manifest file)。這個元數據文件中存儲的是Manifest file列表,每個Manifest file佔據一行,每行中存儲了Manifest file的路徑、其存儲的數據文件(data files)的分區範圍,增加了幾個數據文件、刪除了幾個數據文件等信息。

注意事項:相關統計信息可以在掃描表數據時過濾掉不必要的文件。

③manifest file(清單文件)

文件描述:XXX-m0.avro,每當生成一個parquent文件時生成一個快照。

​ Manifest file是一個元數據文件,它列出了組成快照(Snapshot)的數據文件(data files)的列表信息。每行都是每個數據文件的詳細描述,包括數據文件的狀態、文件路徑、分區信息、列級的統計信息(比如每列的最大最小值、空值數等)、文件的大小以及文件裏面數據行數等信息。

注意事項:其中列級別的統計信息可以在掃描表數據時過濾掉不必要的文件。
2.2、數據層
​ 數據文件文件是Apache Icberg表真實存儲數據的文件,一般在表的數據存儲目錄的data目錄下,如果文件格式選擇的是Parquent,那麼文件是以".parquent"結尾。


重點:每次Commit都會生成一個Parquent文件。
注意事項:目前支持parquent、ORC、Avro文件格式
3、數據後端存儲解析
表元數據存儲:存儲在Hive Metastore中,複用了HMS模型


​ 通過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。
————————————————
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章