什么是 Gravitino
引用官方文檔 Apache Gravitino 是一個高性能、地理分布式、聯邦式元數據湖。它能夠直接管理不同數據源、類型及區域的元數據,同時為用戶提供數據和 AI 資產的統一元數據訪問能力。
從上面這句話可以看出最主要的就是 統一元數據訪問。
核心價值:統一元數據治理
行業痛點
做過大數據開發的同學可能都知道目前數據源很多:關系型數據庫以及非關系型數據庫等等,例如要想在 Spark 引擎里去查詢這些數據源則需要注冊不同的 catalog 去查詢元數據
解決方案
Gravitino 的作用就是把不同數據源管理起來,由 Gravitino 去查詢不同的元數據,相當于一層代理
將元數據抽象為 3 層: catalog, schema, (table,topic等):
核心功能
統一結構化數據訪問
舉個例子:
你們公司現在有個 hive 數倉,數倉下面有 ods, dwd, dws 庫。。,庫下面有表。你現在就可以將這個 hive 數倉注冊成為一個 catalog 名字就叫 hive , 下面的庫就是 schema: ods,dws, 庫下面的表就是 table: user_info_1d_a 等。那你完全就可以把一個表描述成: hive.ods.user_info_1d_a
你的 sql 語句就可以這么寫:
select * from hive.ods.user_info_1d_a;
統一非結構化數據訪問
文件集
由于 2022 年末 GPT 3 的突出表現,AI 又又火了,各大公司內部都開始瘋狂投入精力到 AI 上來,但是 AI 訓練需要數據,這些數據大多都是非結構化的,需要被管理,文件集
的出現就是為了管理這些非結構化的文件。同樣文件集也是被抽象為三層結構 catalog.schema.fileset
方便大家管理訓練文件
GVFS
為了更好的去使用文件集, Gravitino 定義一個文件系統叫 GVFS:它是一個虛擬層,它通過虛擬路徑管理文件集中的文件和目錄,不用關心他是存儲在 HDFS 還是在 s3 上。您可以通過以下方式訪問文件或文件夾:
gvfs://fileset/${catalog_name}/${schema_name}/${fileset_name}/sub_dir/
與傳統對比
場景 | 傳統方式 | Gravitino方案 |
---|---|---|
跨數據源查詢 | 維護多個Catalog連接 | 統一SQL語法訪問 |
AI訓練數據管理 | 手動同步HDFS/S3路徑 | GVFS虛擬路徑自動映射 |
統一權限管理
通過統一元數據實現統一權限管理似乎是手到擒來,事實上的確如此。有了統一元數據的基礎,Gravitino 可以將權限都管理起來,目前 Gravitino 的權限模型是 RABC 模型,和大數據常用組件 Ranger 中的 policy 的靈活性相比還是弱了些。
Gravitino 的核心架構
- 第一層是數據應用層,包括數據平臺、數據應用組件以及引擎,通過統一處理和治理,都通過這一層接入。
- 第二層是接口層,目前 Gravitino 提供了 REST 統一接口,對外提供元數據的訪問能力,并且還提供了 Thrift 和 JDBC 接口,供引擎進行具體接入。
- 第三層是 Gravitino 的核心組件,其數據分類基于 Catalog 進行管理。不同數據源具有不同的 Catalog。整個層級架構基于 MetalLake Catalog Schema 和 Table 的概念。Schema 是我們通常理解中的數據庫概念。對于 FileSet,文件管理也基于 Catalog。例如,Hive 是一個 HiveCatalog。Fileset 代表一個獨立的文件系統的目錄, 也可以理解為一個文件集,則對應 FilesetCatalog
- 最底層是連接層,它連接了不同的數據源。例如,對于 Hive 表,其背后是 Hive MetaStore;對于 Iceberg 表,則是提供的統一 REST Catalog。此外,Gravitino 內部還維護了一套自己的存儲系統。不過,需要注意的是,Gravitino 本身并不存儲元數據,這部分主要用于維護 Gravitino 內部數據,如 Catalog 和 Meter Lake 等信息。