什么是 Gravitino
引用官方文檔 Apache Gravitino 是一個(gè)高性能、地理分布式、聯(lián)邦式元數(shù)據(jù)湖。它能夠直接管理不同數(shù)據(jù)源、類型及區(qū)域的元數(shù)據(jù),同時(shí)為用戶提供數(shù)據(jù)和 AI 資產(chǎn)的統(tǒng)一元數(shù)據(jù)訪問(wèn)能力。 從上面這句話可以看出最主要的就是 統(tǒng)一元數(shù)據(jù)訪問(wèn)。
核心價(jià)值:統(tǒng)一元數(shù)據(jù)治理
行業(yè)痛點(diǎn)
做過(guò)大數(shù)據(jù)開(kāi)發(fā)的同學(xué)可能都知道目前數(shù)據(jù)源很多:關(guān)系型數(shù)據(jù)庫(kù)以及非關(guān)系型數(shù)據(jù)庫(kù)等等,例如要想在 Spark 引擎里去查詢這些數(shù)據(jù)源則需要注冊(cè)不同的 catalog 去查詢?cè)獢?shù)據(jù)
解決方案
Gravitino 的作用就是把不同數(shù)據(jù)源管理起來(lái),由 Gravitino 去查詢不同的元數(shù)據(jù),相當(dāng)于一層代理
將元數(shù)據(jù)抽象為 3 層: catalog, schema, (table,topic等):

核心功能
統(tǒng)一結(jié)構(gòu)化數(shù)據(jù)訪問(wèn)
舉個(gè)例子:
你們公司現(xiàn)在有個(gè) hive 數(shù)倉(cāng),數(shù)倉(cāng)下面有 ods, dwd, dws 庫(kù)。。,庫(kù)下面有表。你現(xiàn)在就可以將這個(gè) hive 數(shù)倉(cāng)注冊(cè)成為一個(gè) catalog 名字就叫 hive , 下面的庫(kù)就是 schema: ods,dws, 庫(kù)下面的表就是 table: user_info_1d_a 等。那你完全就可以把一個(gè)表描述成: hive.ods.user_info_1d_a
你的 sql 語(yǔ)句就可以這么寫:
select * from hive.ods.user_info_1d_a;
統(tǒng)一非結(jié)構(gòu)化數(shù)據(jù)訪問(wèn)
文件集
由于 2022 年末 GPT 3 的突出表現(xiàn),AI 又又火了,各大公司內(nèi)部都開(kāi)始瘋狂投入精力到 AI 上來(lái),但是 AI 訓(xùn)練需要數(shù)據(jù),這些數(shù)據(jù)大多都是非結(jié)構(gòu)化的,需要被管理,文件集的出現(xiàn)就是為了管理這些非結(jié)構(gòu)化的文件。同樣文件集也是被抽象為三層結(jié)構(gòu) catalog.schema.fileset 方便大家管理訓(xùn)練文件
GVFS
為了更好的去使用文件集, Gravitino 定義一個(gè)文件系統(tǒng)叫 GVFS:它是一個(gè)虛擬層,它通過(guò)虛擬路徑管理文件集中的文件和目錄,不用關(guān)心他是存儲(chǔ)在 HDFS 還是在 s3 上。您可以通過(guò)以下方式訪問(wèn)文件或文件夾:
gvfs://fileset/${catalog_name}/${schema_name}/${fileset_name}/sub_dir/
與傳統(tǒng)對(duì)比
| 場(chǎng)景 | 傳統(tǒng)方式 | Gravitino方案 |
|---|---|---|
| 跨數(shù)據(jù)源查詢 | 維護(hù)多個(gè)Catalog連接 | 統(tǒng)一SQL語(yǔ)法訪問(wèn) |
| AI訓(xùn)練數(shù)據(jù)管理 | 手動(dòng)同步HDFS/S3路徑 | GVFS虛擬路徑自動(dòng)映射 |
統(tǒng)一權(quán)限管理
通過(guò)統(tǒng)一元數(shù)據(jù)實(shí)現(xiàn)統(tǒng)一權(quán)限管理似乎是手到擒來(lái),事實(shí)上的確如此。有了統(tǒng)一元數(shù)據(jù)的基礎(chǔ),Gravitino 可以將權(quán)限都管理起來(lái),目前 Gravitino 的權(quán)限模型是 RABC 模型,和大數(shù)據(jù)常用組件 Ranger 中的 policy 的靈活性相比還是弱了些。
Gravitino 的核心架構(gòu)

- 第一層是數(shù)據(jù)應(yīng)用層,包括數(shù)據(jù)平臺(tái)、數(shù)據(jù)應(yīng)用組件以及引擎,通過(guò)統(tǒng)一處理和治理,都通過(guò)這一層接入。
- 第二層是接口層,目前 Gravitino 提供了 REST 統(tǒng)一接口,對(duì)外提供元數(shù)據(jù)的訪問(wèn)能力,并且還提供了 Thrift 和 JDBC 接口,供引擎進(jìn)行具體接入。
- 第三層是 Gravitino 的核心組件,其數(shù)據(jù)分類基于 Catalog 進(jìn)行管理。不同數(shù)據(jù)源具有不同的 Catalog。整個(gè)層級(jí)架構(gòu)基于 MetalLake Catalog Schema 和 Table 的概念。Schema 是我們通常理解中的數(shù)據(jù)庫(kù)概念。對(duì)于 FileSet,文件管理也基于 Catalog。例如,Hive 是一個(gè) HiveCatalog。Fileset 代表一個(gè)獨(dú)立的文件系統(tǒng)的目錄, 也可以理解為一個(gè)文件集,則對(duì)應(yīng) FilesetCatalog
- 最底層是連接層,它連接了不同的數(shù)據(jù)源。例如,對(duì)于 Hive 表,其背后是 Hive MetaStore;對(duì)于 Iceberg 表,則是提供的統(tǒng)一 REST Catalog。此外,Gravitino 內(nèi)部還維護(hù)了一套自己的存儲(chǔ)系統(tǒng)。不過(guò),需要注意的是,Gravitino 本身并不存儲(chǔ)元數(shù)據(jù),這部分主要用于維護(hù) Gravitino 內(nèi)部數(shù)據(jù),如 Catalog 和 Meter Lake 等信息。