譯者 | 李睿
審校 | 重樓
像軟件行業(yè)的許多其他領域一樣,數(shù)據(jù)工程領域正在快速發(fā)展。在大型語言模型(LLM)和生成式人工智能的推動下,盡管人工智能/機器學習的進步令人關注,但數(shù)據(jù)工程仍然是推動軟件開發(fā)創(chuàng)新的根本力量。
Polaris是一種用于數(shù)據(jù)湖屋(Lakehouse)的目錄實現(xiàn)工具,是該領域的最新進展之一,它加速了互操作性的進展,并實現(xiàn)了零數(shù)據(jù)復制架構。在最近于2024年11月舉辦的Snowflake Build大會上,Polaris Catalog、Iceberg以及AI/ML共同成為備受關注與熱議的話題。
開放表格式和數(shù)據(jù)湖屋
數(shù)據(jù)湖屋的概念憑借其開放表格式,已經(jīng)成為大數(shù)據(jù)技術領域內(nèi)的熱門議題之一。開放表格式在塑造行業(yè)中的數(shù)據(jù)湖屋模式方面始終走在前列。盡管還有其他具有競爭力的開放表格式技術,但Iceberg無疑在這一領域內(nèi)占據(jù)領先地位。支持傳統(tǒng)數(shù)據(jù)倉庫模式的數(shù)據(jù)云巨頭Snowflake公司也在積極引領數(shù)據(jù)湖屋模式的發(fā)展,而Iceberg正是其解決方案的核心支柱,發(fā)揮著舉足輕重的作用。
Iceberg采用了三層架構模型,其核心在于其根目錄,這一目錄扮演著Iceberg中表元數(shù)據(jù)管理者的關鍵角色。Snowflake公司通過推出了名為Polaris的目錄服務,在目錄領域帶來了革命性的變革。該目錄正迅速獲得認可,并有望在未來幾個月內(nèi)得到進一步增長。
在深入討論Polaris之前,需要了解有關數(shù)據(jù)湖屋、Iceberg和Snowflake的更多細節(jié),為探討Polaris奠定基礎。幾十年來,軟件行業(yè)一直沿襲著使用數(shù)據(jù)倉庫作為核心分析平臺的傳統(tǒng)。然而,隨著基于Hadoop的大數(shù)據(jù)技術的興起,支持半結構化和非結構化數(shù)據(jù)的數(shù)據(jù)湖(data lake)于2010年應運而生。盡管數(shù)據(jù)湖在過去十年中迅速增長,但與此同時,它也暴露出了一系列亟待解決的問題,例如事務支持的缺失、模式強制執(zhí)行的不足等。
為了克服數(shù)據(jù)湖的局限性,大數(shù)據(jù)領域中出現(xiàn)了一種新的模式——數(shù)據(jù)湖屋。數(shù)據(jù)湖屋通過提供事務支持、模式實施(如數(shù)據(jù)倉庫)以及異構數(shù)據(jù)格式(如數(shù)據(jù)湖)的支持,結合了數(shù)據(jù)倉庫和數(shù)據(jù)湖的優(yōu)點。開放文件格式是數(shù)據(jù)湖屋架構成功的基礎,特別是開放表格式。盡管在這一領域內(nèi),Delta Lake和Hudi等其他主要參與者同樣發(fā)揮著重要作用,但Iceberg憑借行業(yè)領導者Snowflake公司的支持而脫穎而出。
開放表格式是為了支持數(shù)據(jù)的零復制以及從多個查詢引擎在單一權威的數(shù)據(jù)源中查詢/修改數(shù)據(jù)而創(chuàng)建的。盡管Snowflake公司起初像傳統(tǒng)和現(xiàn)代數(shù)據(jù)倉庫一樣使用原生表,并在這一過程中增加了對非結構化數(shù)據(jù)的支持,但Snowflake公司一直是推廣和采用與Iceberg相結合的開放表格式來實現(xiàn)數(shù)據(jù)湖倉解決方案的領導者。
開放表格式的基本架構概念是關于存儲表元數(shù)據(jù)的。開放表格式不存儲實際數(shù)據(jù),而是存儲“關于數(shù)據(jù)的數(shù)據(jù)”。不同的開放表格式有其各自的元數(shù)據(jù)架構。然而,它們之間的共同模式是都存在一個目錄組件。在開放表格式中,目錄包含指向實際表的元數(shù)據(jù)指針,這些表以開放文件格式(如Parquet、ORC)存儲數(shù)據(jù)。
目錄的挑戰(zhàn):Polaris背后的驅動力
對于目錄實現(xiàn),業(yè)界一直在使用諸如Hive Metastore、AWS Glue、Nessie、Unity Catalog等技術。可用目錄技術的激增阻礙了互操作性和開放表格式的零數(shù)據(jù)復制原則充分發(fā)揮其潛力,因為不同的目錄技術開始導致組織內(nèi)部出現(xiàn)供應商鎖定和數(shù)據(jù)一致性問題。圖1展示了由于缺乏統(tǒng)一的目錄解決方案而導致組織一直在實現(xiàn)的典型架構。
圖1:Iceberg生態(tài)系統(tǒng)的多目錄技術解決方案
不同的查詢引擎或數(shù)據(jù)平臺使用不同技術開發(fā)的目錄來訪問Iceberg的元數(shù)據(jù)(如圖1所示)和存儲層,因此無法在組織內(nèi)部提供存儲的統(tǒng)一視圖。此外,由于沒有共享的目錄標準,不僅目錄數(shù)據(jù)會被重復且存在不一致性,而且其他方面(如安全和訪問控制配置)也需要被重復,從而造成不必要的開銷。
為了應對實現(xiàn)真正互操作性和零數(shù)據(jù)復制的挑戰(zhàn),Snowflake公司推出了Polaris Catalog這一創(chuàng)新性的目錄服務。該目錄設計的初衷是使不同的查詢引擎能夠輕松訪問,并且展望未來,它還將支持所有主流的開放表格式,而不僅僅是Iceberg。
關于Polaris:優(yōu)勢與現(xiàn)狀
作為開放表格式的目錄,Polaris主要提供以下三個好處:
- 讀和寫操作的跨引擎互操作性。
- 支持在任何地方托管目錄——在云中或組織的數(shù)據(jù)中心作為容器化應用程序。
- 集中的安全和基于角色的訪問控制。
Snowflake公司將Polaris Catalog外包給Apache軟件基金會,以鼓勵社區(qū)驅動的技術進步,并使其與供應商保持中立,以實現(xiàn)Polaris的多個長期目標,如下所示:
- 使其與所有開放表格式(如Delta Lake、Hudi)兼容
- 支持API表格維護
- 更廣泛的安全和訪問控制,例如支持Okta/Auth0等IDP、細粒度訪問控制等。
當前,Polaris軟件正處于Apache軟件基金會的孵化階段。盡管Snowflake公司已將Polaris的開發(fā)工作交由Apache軟件基金會負責,但Snowflake依然在其自身的部署中持續(xù)為Polaris Catalog提供支持。Snowflake所托管的Polaris Catalog被稱為Snowflake Open Catalog。
Polaris架構
Polaris Catalog在Iceberg生態(tài)系統(tǒng)中的架構如圖2所示。查詢引擎將使用Polaris REST API訪問Polaris Catalog中的表元數(shù)據(jù)。Polaris API的核心業(yè)務邏輯將作為接口,通過Iceberg元數(shù)據(jù)提供對存儲在開放文件格式(如Parquet、ORC)中的實際數(shù)據(jù)的訪問。
圖2:Iceberg生態(tài)系統(tǒng)中的Polaris架構
Polaris架構圍繞兩個核心組件構建:用于數(shù)據(jù)安全的基于角色的訪問控制(RBAC)和用于管理表元數(shù)據(jù)的Data Catalog。在RBAC中,主體(Principal)代表用戶或系統(tǒng)身份,而主體角色則定義分配給該主體的權限。一個主體可以擁有多個主體角色,并且每個主體角色可以包含多個主體。在目錄方面,目錄作為邏輯數(shù)據(jù)庫或模式,組織成命名空間(Namespaces),這些命名空間對Iceberg表或視圖進行分組。權限通過目錄角色進行管理,這些角色定義了目錄對象的直接權限,而主體角色則通過其與目錄角色的關聯(lián)來繼承這些權限。
該架構確保在邏輯組織的框架內(nèi)對Iceberg表和視圖進行安全、可擴展和有效的管理。
從基礎設施部署的角度來看,盡管Polaris可以作為容器化的應用程序在云平臺和組織的數(shù)據(jù)中心中運行,但是需要為查詢引擎進行適當?shù)木W(wǎng)絡連接,以便能夠訪問Polaris基于REST API的目錄。目前,將Polaris Catalog部署在公共云平臺之外的情況并不常見,因為通常希望實際的開放文件格式存儲將位于云平臺中。
隨著技術的進步,為了滿足各個行業(yè)(如金融、醫(yī)療保健)組織的數(shù)據(jù)隱私和地理限制要求,在組織的防火墻內(nèi)部署Polaris可能是一個有價值的用例。
Polaris的實際操作
Snowflake公司在2024年6月發(fā)布了Polaris,并于7月將其開源給Apache軟件基金會。該項目目前在Apache處于孵化狀態(tài)。Polaris Catalog的開源版本可以在GitHub存儲庫中獲得。開發(fā)人員只需幾個簡單的步驟就可以在本地工作站中開始使用Polaris。
1.安裝OpenJDK和Docker
JDK的最低版本要求是21,Docker的最低版本要求是27。除此之外,還需要安裝Gradle這一工具編譯項目源代碼。
2.克隆存儲庫
要在本地工作站中設置Polaris,第一步是克隆存儲庫。
3.在Docker容器中運行Polaris
Plain Text
docker compose -f docker-compose.yml up --build
4.作為本地Java應用程序運行
Plain Text
gradle runApp
GitHub中的Polaris項目分為兩個主要模塊。
- polaris-core:包含實體定義和業(yè)務邏輯。這是通過Iceberg元數(shù)據(jù)與開放文件格式存儲進行交互的層。
- API:包含Polaris的REST API定義。查詢引擎與API通信以訪問底層數(shù)據(jù)。
結論
在數(shù)據(jù)湖屋和開放表格式不斷發(fā)展的背景下,Polaris是下一個重大突破。這項技術有助于消除對查詢引擎特定數(shù)據(jù)目錄的需求,并帶來可互操作的協(xié)調(diào)解決方案。
Polaris最初是為Iceberg構建的,它不僅旨在成為查詢引擎的通用平臺,而且未來的開發(fā)目標是使其能夠跨其他開放表格式工作,例如Delta Lake。擁有可互操作的目錄技術可以降低組織架構的復雜性,有助于實現(xiàn)零數(shù)據(jù)復制原則,減少IT的支持開銷,并最終為組織節(jié)省成本。Polaris正在不斷發(fā)展,預計在未來幾個月內(nèi),在Apache軟件基金會和Snowflake公司的推動下,其采用率將會上升。
原文標題:Revolutionizing Catalog Management for Data Lakehouse With Polaris Catalog,作者:Dipankar Saha