詳解 Flink Catalog 在 ChunJun 中的實踐之路
我們知道 Flink 有Table(表)、View(視圖)、Function(函數(shù)/算子)、Database(數(shù)據(jù)庫)的概念,相對于這些耳熟能詳?shù)母拍?,F(xiàn)link 里還有一個 Catalog(目錄) 的概念。
本文將為大家?guī)?Flink Catalog 的介紹以及 Flink Catalog 在 ChunJun 中的實踐之路。
Flink Catalog 簡介
Catalog 提供元數(shù)據(jù),如數(shù)據(jù)庫、表、分區(qū)、視圖,以及訪問存儲在數(shù)據(jù)庫或其他外部系統(tǒng)中的數(shù)據(jù)所需的函數(shù)和信息。
Flink Catalog 作用
數(shù)據(jù)處理中最關(guān)鍵的一個方面是管理元數(shù)據(jù):
· 可能是暫時性的元數(shù)據(jù),如臨時表,或針對表環(huán)境注冊的 UDFs;
· 或者是永久性的元數(shù)據(jù),比如 Hive 元存儲中的元數(shù)據(jù)。
Catalog 提供了一個統(tǒng)一的 API 來管理元數(shù)據(jù),并使其可以從表 API 和 SQL 查詢語句中來訪問。
Catalog 使用戶能夠引用他們數(shù)據(jù)系統(tǒng)中的現(xiàn)有元數(shù)據(jù),并自動將它們映射到 Flink 的相應元數(shù)據(jù)。例如,F(xiàn)link 可以將 JDBC 表自動映射到 Flink 表,用戶不必在 Flink 中手動重寫 DDL。Catalog 大大簡化了用戶現(xiàn)有系統(tǒng)開始使用 Flink 所需的步驟,并增強了用戶體驗。
Flink Catalog 的結(jié)構(gòu)
● Flink Catalog 原生結(jié)構(gòu)
? GenericInMemoryCatalog:基于內(nèi)存實現(xiàn)的 Catalog
? Jdbc Catalog:可以將 Flink 通過 JDBC 協(xié)議連接到關(guān)系數(shù)據(jù)庫,目前 Flink 在1.12和1.13中有不同的實現(xiàn),包括 MySql Catalog 和 Postgres Catalog
? Hive Catalog:作為原生 Flink 元數(shù)據(jù)的持久化存儲,以及作為讀寫現(xiàn)有 Hive 元數(shù)據(jù)的接口
● Flink Iceberg Catalog
● Flink Hudi Catalog
HoodieCatalog、HoodieHiveCatalog


Flink Catalog 詳解
GenericInMemoryCatalog
所有的數(shù)據(jù)都保存在 HashMap 里面,無法持久化。
JDBC Catalog
如果創(chuàng)建并使用 Postgres Catalog 或 MySQL Catalog,請配置 JDBC 連接器和相應的驅(qū)動。
JDBC Catalog 支持以下參數(shù):
? name:必填,Catalog 的名稱
? default-database:必填,默認要連接的數(shù)據(jù)庫
? username:必填,Postgres/MySQL 賬戶的用戶名
? password:必填,賬戶的密碼
? base-url: 必填,(不應該包含數(shù)據(jù)庫名)
對于 Postgres Catalog base-url 應為 "jdbc:postgresql://:" 的格式
對于 MySQL Catalog base-url 應為 "jdbc:mysql://:" 的格式
Hive Catalog

Iceberg Catalog
● Hive Catalog 管理 Iceberg 表
● Hadoop Catalog 管理 Iceberg 表
● 自定義 Catalog 管理 Iceberg 表
? connector:iceberg
? catalog-name:用戶指定的目錄名稱,這是必須的,因為連接器沒有任何默認值
? catalog-type:內(nèi)置目錄的 hive 或 hadoop(默認為hive),或者對于使用 catalog-impl 的自定義目錄實現(xiàn),不做設(shè)置
? catalog-impl:自定義目錄實現(xiàn)的全限定類名,如果 catalog-type 沒有被設(shè)置,則必須被設(shè)置,更多細節(jié)請參見自定義目錄
? catalog-database: 后臺目錄中的 iceberg 數(shù)據(jù)庫名稱,默認使用當前的 Flink 數(shù)據(jù)庫名稱
? catalog-table: 后臺目錄中的冰山表名,默認使用 Flink CREATE TABLE 句子中的表名
Hudi Catalog


Flink Catalog 在 ChunJun 中的實踐
下面將為大家介紹本文的重頭戲,F(xiàn)link Catalog 在 ChunJun 中的實踐之路。
直接引入開源 Catalog
ChunJun 目前的所有 Catalog 為以下四種:

● Hive Catalog 需要的依賴

● Iceberg Catalog 需要的依賴

● JDBC Catalog
JDBC 因為 Flink 1.12 和 1.13 API 有變化,因此需要涉及源碼的改動,改動一些 API 后,從源碼引入。
● DT Catalog
結(jié)合內(nèi)部業(yè)務,自定義的一種 Catalog ,下文將會進行詳細介紹。
DT Catalog -存儲元數(shù)據(jù)表設(shè)計
● 創(chuàng)建 mysql 元數(shù)據(jù)表 database_info
● 創(chuàng)建 mysql 元數(shù)據(jù)表 table_info
● 創(chuàng)建 mysql 元數(shù)據(jù)表 properties_info
● properties_info 里面存了什么?
使用 DT Catalog
● 創(chuàng)建 DT Catalog

● 創(chuàng)建 Database
● 創(chuàng)建 Table
1)Rename Table
2)Set or Alter Table Properties
使用 DTCatalog 的具體場景和實現(xiàn)原理
● 全部是 DDL,只有 Catalog 的創(chuàng)建
· 可以執(zhí)行,但是沒有意義,ChunJun 不會存儲 Catalog 信息,只有平臺存儲;
· 不支持語法校驗。
● 全部是 DDL,包含 Catalog、Database、Table 的創(chuàng)建
· 無論創(chuàng)建數(shù)據(jù)庫、表,刪除數(shù)據(jù)庫、表,必須包含 create catalog 語句;
· 可以執(zhí)行,可以創(chuàng)建數(shù)據(jù)庫和表;
· 不支持語法校驗。

● DDL + DML,包含 create + insert 語句
1)初始化 Catalog
2.1)創(chuàng)建數(shù)據(jù)庫
2.2)創(chuàng)建源表
3.1)創(chuàng)建數(shù)據(jù)庫
3.2)創(chuàng)建結(jié)果表
4)執(zhí)行任務
· 不可以執(zhí)行,可以提交;
· 支持語法校驗。
● DML,只有 Insert 語句
?· 如果 Catalog 的 數(shù)據(jù)庫和表都已經(jīng)創(chuàng)建好了,那么直接寫 insert 就可以提交任務;
· 不可以執(zhí)行,可以提交;
· 支持語法校驗。
《數(shù)據(jù)治理行業(yè)實踐白皮書》下載地址:https://fs80.cn/l134d5?
想了解或咨詢更多有關(guān)袋鼠云大數(shù)據(jù)產(chǎn)品、行業(yè)解決方案、客戶案例的朋友,瀏覽袋鼠云官網(wǎng):https://www.dtstack.com/?src=szbzhan
同時,歡迎對大數(shù)據(jù)開源項目有興趣的同學加入「袋鼠云開源框架釘釘技術(shù) qun」,交流最新開源技術(shù)信息,qun 號碼:30537511,項目地址:https://github.com/DTStack