近期,Cloudera宣布將Apache Iceberg集成到其云生態(tài)系統(tǒng)中,Iceberg的優(yōu)勢(shì)得以融入正在轉(zhuǎn)向公有云和采用湖倉(cāng)等融合架構(gòu)的企業(yè)之中。可以說(shuō),集成了Iceberg的Cloudera CDP將強(qiáng)有力地幫助企業(yè)構(gòu)建新一代數(shù)據(jù)架構(gòu),賦予企業(yè)更多的前瞻性和附加優(yōu)勢(shì)。
Apache Iceberg是一種高性能的開(kāi)放表格式。它誕生于云端,可擴(kuò)展到PB級(jí)并且獨(dú)立于底層存儲(chǔ)層和引擎存儲(chǔ)層。作為一種真正的開(kāi)放表格式,Apache Iceberg符合Cloudera Data Platform(CDP)的愿景。
原因一:多功能分析助力實(shí)現(xiàn)數(shù)據(jù)集共享
Apache Iceberg實(shí)現(xiàn)了不同流式傳輸和處理引擎之間的無(wú)縫集成,同時(shí)保持了它們之間的數(shù)據(jù)完整性。多個(gè)引擎可以同時(shí)更改表,即便是部分寫入也不會(huì)出現(xiàn)正確性問(wèn)題,而且也不需要昂貴的讀取鎖定。因此,降低了使用不同的連接器、維護(hù)不善的API、以及采取其他臨時(shí)解決方案處理數(shù)據(jù)集的必要性。
Iceberg采用開(kāi)放、兼容所有引擎的設(shè)計(jì),實(shí)現(xiàn)了數(shù)據(jù)集的共享。Cloudera擴(kuò)展了對(duì)Hive和Impala的支持,實(shí)現(xiàn)了從大規(guī)模數(shù)據(jù)工程工作負(fù)載和流處理,到智能大數(shù)據(jù)分析平臺(tái)(Fast BI)和查詢以及機(jī)器學(xué)習(xí)的多功能分析數(shù)據(jù)架構(gòu)愿景。
Iceberg的多功能還意味著Cloudera數(shù)據(jù)平臺(tái)就此擁有了打破數(shù)據(jù)孤島的集成端到端數(shù)據(jù)管道,并將分析整合成一個(gè)連貫的生命周期,在每一個(gè)階段都可以提取商業(yè)價(jià)值。用戶將能夠借助所需工具并充分利用其對(duì)工作負(fù)載所作出的特定優(yōu)化。例如Jupyter筆記本可以使用Spark或Python框架直接訪問(wèn)Iceberg表來(lái)建立預(yù)測(cè)模型,同時(shí)通過(guò)NiFi流獲取新數(shù)據(jù),而SQL分析師則可以利用數(shù)據(jù)可視化監(jiān)控收入目標(biāo)。而作為一個(gè)完全開(kāi)源的項(xiàng)目,這意味著將來(lái)會(huì)有更多的引擎和工具得到支持。
原因二:開(kāi)放文件格式提升數(shù)據(jù)存用靈活度
作為一種表格式,Iceberg 支持一些最常用的開(kāi)源文件格式,比如Avro、Parquet 和 ORC。這些都是眾所周知且發(fā)展成熟的大數(shù)據(jù)文件格式,它們不僅被開(kāi)源社區(qū)所使用,同時(shí)也被嵌入到第三方工具中。開(kāi)放格式的價(jià)值在于靈活性和可移植性。用戶可以在不受底層存儲(chǔ)束縛的情況下移動(dòng)他們的工作負(fù)載。但到目前為止,這種格式仍有一個(gè)缺點(diǎn)——由于表模式和存儲(chǔ)優(yōu)化與引擎等緊密耦合,因此使用起來(lái)難免“束手束腳”。
而Iceberg是一個(gè)通過(guò)與開(kāi)放文件格式一起使用來(lái)避免這種耦合的開(kāi)放表格式。模式、分區(qū)等表信息作為元數(shù)據(jù)文件的一部分單獨(dú)存儲(chǔ),使應(yīng)用更容易與表和它們所選擇的存儲(chǔ)格式快速集成。由于查詢不再依賴于表的物理布局,Iceberg表可以隨著數(shù)據(jù)量的變化而逐漸實(shí)現(xiàn)分區(qū)方案的演進(jìn)。
原因三:開(kāi)源功能有效規(guī)避供應(yīng)商“陷阱”
開(kāi)源對(duì)于避免供應(yīng)商“陷阱”至關(guān)重要,但許多供應(yīng)商會(huì)在兜售開(kāi)源工具時(shí)隱瞞他們自主開(kāi)發(fā)的版本與開(kāi)源社區(qū)之間的差距。這意味著當(dāng)客戶嘗試去使用開(kāi)源版本時(shí),他們才會(huì)發(fā)現(xiàn)二者之間存在顯著差異。如此說(shuō)來(lái),避開(kāi)供應(yīng)商陷阱實(shí)則困難重重。
而Apache Iceberg項(xiàng)目是一個(gè)充滿活力的社區(qū),它正迅速擴(kuò)大對(duì)各種處理引擎的支持并不斷增加新功能。為了使該社區(qū)及新的表格式獲得持續(xù)成功,Cloudera為上游社區(qū)提供跨Spark、Hive和Impala的支持,意在促使Apache Iceberg被廣泛采納并可供有意構(gòu)建新一代數(shù)據(jù)架構(gòu)的企業(yè)所使用。該社區(qū)提供了許多功能改進(jìn)及性能特性,例如向量化讀取和Z-Order等,無(wú)論用戶使用什么引擎或供應(yīng)商來(lái)訪問(wèn)表,都將從中受益。在CDP中,這已經(jīng)作為Impala MPP開(kāi)源引擎對(duì)Z-Order提供的一部分支持。
如之前所述,在查詢規(guī)劃方面Iceberg依賴于元數(shù)據(jù)文件,這些文件包含了數(shù)據(jù)駐留的位置以及分區(qū)和模式如何分布在文件中。雖然這實(shí)現(xiàn)了模式的演變,但如果表格的變化過(guò)多,就會(huì)帶來(lái)問(wèn)題。為此社區(qū)創(chuàng)建了一個(gè)API來(lái)讀取元數(shù)據(jù)文件,同時(shí)也在同步進(jìn)行其他類似的優(yōu)化。這種開(kāi)放標(biāo)準(zhǔn)方法讓用戶可以在Iceberg上以CDP中的性能運(yùn)行工作負(fù)載,且無(wú)需擔(dān)心落入供應(yīng)商“陷阱”中。
原因四:有效降低企業(yè)級(jí)應(yīng)用學(xué)習(xí)和管理門檻
作為Cloudera企業(yè)平臺(tái)的一部分,Iceberg的原生集成受益于企業(yè)級(jí)的共享數(shù)據(jù)體驗(yàn)(SDX)功能,例如數(shù)據(jù)沿襲、審計(jì)和安全等,而且無(wú)需重新設(shè)計(jì)或第三方工具集成,因此不會(huì)增加管理的復(fù)雜性,也不需要額外學(xué)習(xí)。CDP中的Apache Iceberg表被集成在SDX Metastore中用于表結(jié)構(gòu)和訪問(wèn)驗(yàn)證,這意味著用戶可以進(jìn)行審計(jì)并創(chuàng)建細(xì)粒度的政策,實(shí)現(xiàn)即開(kāi)即用。
原因五:Apache Iceberg開(kāi)啟全新使用場(chǎng)景
Apache Hive表實(shí)現(xiàn)了對(duì)數(shù)據(jù)倉(cāng)儲(chǔ)、數(shù)據(jù)工程和機(jī)器學(xué)習(xí)的集中訪問(wèn),奠定了良好的性能基礎(chǔ)。同時(shí),它還支持開(kāi)放的文件格式(ORC、AVRO、Parquet等),并通過(guò)ACID和事務(wù)支持幫助實(shí)現(xiàn)新的用例。但由于元數(shù)據(jù)的集中化并且抽象化主要基于文件,因此它在規(guī)模等方面不免面臨挑戰(zhàn)。
Iceberg克服了規(guī)模和性能方面的挑戰(zhàn),同時(shí)加入了一系列新的功能,能夠解決不同行業(yè)和用例的挑戰(zhàn)。例如:
- 變更數(shù)據(jù)捕獲(CDC)
能夠處理具有原子性和一致性的Delta表雖然早已普及,而且Hive ACID等現(xiàn)有的解決方案也能提供這種功能,但該功能對(duì)大多數(shù)提供DW和BI用例的數(shù)據(jù)處理管道來(lái)說(shuō)至關(guān)重要。因此Iceberg從一開(kāi)始就通過(guò)支持行級(jí)更新和刪除來(lái)解決這個(gè)問(wèn)題。它在不深入到細(xì)節(jié)的情況下可以使用多種不同的方法來(lái)實(shí)現(xiàn)這一點(diǎn),例如寫時(shí)拷貝(Copy-on-write)與讀時(shí)合并(Merge-on-read)。但更重要的是,隨著這些解決方案以及Iceberg開(kāi)放標(biāo)準(zhǔn)格式的持續(xù)發(fā)展,我們將看到處理類似用例的更優(yōu)表現(xiàn)。
- 金融監(jiān)管
許多金融和受到高度監(jiān)管的行業(yè)都希望能夠回溯歷史,甚至希望能夠?qū)⒈頎顟B(tài)恢復(fù)到特定的時(shí)間點(diǎn)。Apache Iceberg的“快照”和“時(shí)間旅行”功能可以幫助分析和審計(jì)人員輕松回溯歷史并使用簡(jiǎn)單的SQL來(lái)分析數(shù)據(jù)。
- 機(jī)器學(xué)習(xí)運(yùn)維的可重復(fù)性
通過(guò)允許檢索之前的表狀態(tài),Iceberg讓機(jī)器學(xué)習(xí)工程師能夠使用原始狀態(tài)的數(shù)據(jù)重新訓(xùn)練模型,并執(zhí)行將預(yù)測(cè)與歷史數(shù)據(jù)相匹配的事后分析。通過(guò)這些存儲(chǔ)的歷史特征,可以對(duì)模型進(jìn)行重新評(píng)估、找出不足之處并部署更新、更好的模型。
- 簡(jiǎn)化數(shù)據(jù)管理
大多數(shù)數(shù)據(jù)從業(yè)者需要耗費(fèi)很多時(shí)間來(lái)應(yīng)對(duì)數(shù)據(jù)管理的復(fù)雜性,為項(xiàng)目確定新的數(shù)據(jù)源并將新的屬性加入到現(xiàn)有的數(shù)據(jù)模型中就是其中之一。以前,這可能會(huì)因?yàn)樾枰匦聞?chuàng)建和重新加載表而導(dǎo)致開(kāi)發(fā)周期過(guò)于漫長(zhǎng),尤其是在引入新的分區(qū)時(shí)。但有了Iceberg表及其元數(shù)據(jù)清單文件,就可以簡(jiǎn)化這些更新并且不產(chǎn)生額外的費(fèi)用。
模式演變:表中的列可以就地改變(添加、刪除、重命名、更新或重新排序)而不影響數(shù)據(jù)的可用性。所有變化都可以在元數(shù)據(jù)文件中被追蹤,Iceberg 確保模式變化獨(dú)立且沒(méi)有副作用(比如錯(cuò)誤的值)。
分區(qū)演變:可通過(guò)與模式演變相同的方式改變Iceberg表中的分區(qū)。在分區(qū)演變過(guò)程中,舊的數(shù)據(jù)保持不變,新的數(shù)據(jù)將按照新的分區(qū)規(guī)格寫入。Iceberg 使用隱藏分區(qū),通過(guò)分割規(guī)劃自動(dòng)修剪包含新舊分區(qū)規(guī)格中的匹配數(shù)據(jù)的文件。
細(xì)粒度的分區(qū):以前,在查詢規(guī)劃期間所面臨的主要瓶頸是元數(shù)據(jù)倉(cāng)以及將分區(qū)加載到內(nèi)存中,限制了用戶使用小時(shí)等細(xì)粒度的分區(qū)方案以避免隨著表規(guī)模的增長(zhǎng)而導(dǎo)致性能不佳。Iceberg克服了這些可擴(kuò)展性方面的挑戰(zhàn),通過(guò)同時(shí)避免元數(shù)據(jù)倉(cāng)和內(nèi)存瓶頸,使用戶能夠使用更細(xì)粒度、最適合應(yīng)用需求的分區(qū)方案來(lái)實(shí)現(xiàn)更快的查詢。
這意味著數(shù)據(jù)從業(yè)者可以將更多的時(shí)間用于創(chuàng)造業(yè)務(wù)價(jià)值和開(kāi)發(fā)新的數(shù)據(jù)應(yīng)用,減少處理數(shù)據(jù)管理的時(shí)間,即根據(jù)業(yè)務(wù)的速度實(shí)現(xiàn)數(shù)據(jù)演進(jìn),避免本末倒置。
- 輕松構(gòu)建數(shù)據(jù)倉(cāng)庫(kù)
我們已經(jīng)看到了數(shù)據(jù)倉(cāng)庫(kù)領(lǐng)域的很多趨勢(shì),其中最新的趨勢(shì)就是湖倉(cāng)——一種將數(shù)據(jù)倉(cāng)庫(kù)和數(shù)據(jù)湖相結(jié)合的融合架構(gòu)。在企業(yè)中,加速此類融合架構(gòu)的一個(gè)關(guān)鍵因素是存儲(chǔ)與處理引擎的解耦。但這必須與從串流和實(shí)時(shí)分析到倉(cāng)儲(chǔ)和機(jī)器學(xué)習(xí)等多功能分析服務(wù)相結(jié)合,僅憑分析工作負(fù)載或?qū)烧呦嘟Y(jié)合還不夠。因此CDP中的Iceberg不具有固定形態(tài),它更多的是一種兼容一切引擎的開(kāi)放式數(shù)據(jù)底層,可以在云端進(jìn)行擴(kuò)展。
這使得企業(yè)可以輕松構(gòu)建“任何”數(shù)據(jù)倉(cāng)庫(kù),而不必使用專門的存儲(chǔ)格式來(lái)獲得最佳性能,也不必在一個(gè)引擎或服務(wù)中進(jìn)行專有優(yōu)化。