作為數(shù)據(jù)領(lǐng)域技術(shù)名詞解釋的第一篇,講講數(shù)據(jù)湖,因?yàn)槲艺J(rèn)為數(shù)據(jù)湖是現(xiàn)代分析型數(shù)據(jù)架構(gòu)的核心。
01
什么是數(shù)據(jù)湖
數(shù)據(jù)湖是BI廠商Pentaho的CTO James Dixon在2010年提出的。當(dāng)時(shí)流行的是數(shù)據(jù)倉庫或數(shù)據(jù)集市架構(gòu),實(shí)施周期長,就算實(shí)施完了,也支持不了預(yù)設(shè)之外的靈活分析需求,因?yàn)闆]有原始數(shù)據(jù)。作為同行,我想我能深刻體會(huì)Dixon當(dāng)時(shí)的心情,一堆人投進(jìn)去啃哧啃哧干了幾個(gè)月,完了客戶說我想干啥你怎么還是支持不了呢,驗(yàn)收回款就別想了,那個(gè)欲哭無淚啊。當(dāng)時(shí)線下的Hadoop和云上的S3都已經(jīng)起來了,所以Dixon就想,不如先把數(shù)據(jù)都導(dǎo)進(jìn)來,反正Hadoop或S3這樣的平臺(tái)成本低計(jì)算能力強(qiáng)也好擴(kuò)展,這樣不就想做什么分析都可以做了嗎。Dixon就是基于這樣樸素的思想提出數(shù)據(jù)湖這個(gè)概念。
數(shù)據(jù)湖的概念不復(fù)雜。Gartner對數(shù)據(jù)湖的定義是:
A data lake is a concept consisting of a collection of storage instances of various data assets.These assets are stored in a near-exact,or even exact,copy of the source format and are in addition to the originating data stores.
大致意思就是說數(shù)據(jù)湖是一個(gè)存儲(chǔ)各種比較“原始”的數(shù)據(jù)資產(chǎn)的存儲(chǔ)系統(tǒng)。今天在云下主要是Hadoop體系,云上除了Hadoop,還有S3、OSS這樣的對象存儲(chǔ),或者Snowflake這樣背后使用對象存儲(chǔ)的云原生數(shù)倉(這點(diǎn)存疑)。
我覺得Gartner的定義準(zhǔn)確,但有點(diǎn)過于精簡,沒有體現(xiàn)數(shù)據(jù)湖的豐富內(nèi)涵。我認(rèn)為除了Gartner提到的原始數(shù)據(jù),還有以下兩個(gè)內(nèi)涵也是非常重要的:
標(biāo)準(zhǔn)接口:數(shù)據(jù)湖一定有一個(gè)被業(yè)界廣泛接受的標(biāo)準(zhǔn)接口,比如存存儲(chǔ)層面的HDFS、S3和格式層面的ORC、Parquet。有了標(biāo)準(zhǔn)接口,各個(gè)來源的數(shù)據(jù)才能順暢的流到湖里來,各種計(jì)算引擎、分析工具才能順暢的對接湖里的數(shù)據(jù)做分析計(jì)算。
超低成本:要不是HDFS、S3這樣的存儲(chǔ)平臺(tái)成本超低,哪能把原始數(shù)據(jù)都弄到湖里冗余一遍。這個(gè)成本是相對的,我們互聯(lián)網(wǎng)人覺得還是挺貴啊,因?yàn)槲覀円?guī)模太大了,后來一看傳統(tǒng)數(shù)據(jù)倉庫的價(jià)格才知道相對而言數(shù)據(jù)湖存儲(chǔ)確實(shí)已經(jīng)是“超低”了。
綜合一下,我認(rèn)為:數(shù)據(jù)湖是一個(gè)存儲(chǔ)各類結(jié)構(gòu)化、半結(jié)構(gòu)化甚至非結(jié)構(gòu)化原始數(shù)據(jù),提供標(biāo)準(zhǔn)接口支持各類數(shù)據(jù)源和分析工具,成本超低的存儲(chǔ)系統(tǒng)。
01
數(shù)據(jù)湖是現(xiàn)代分析型數(shù)據(jù)架構(gòu)的核心
現(xiàn)代數(shù)據(jù)分析是一個(gè)極其龐大的技術(shù)體系,有好多種計(jì)算引擎如Hive、Spark、Flink、Impala、Presto、CH,有數(shù)據(jù)科學(xué)平臺(tái)、機(jī)器學(xué)習(xí)框架,有數(shù)不清的BI工具(見數(shù)據(jù)基礎(chǔ)設(shè)施創(chuàng)新如火如荼,主要方向有哪些(上))。在這個(gè)復(fù)雜體系中,有沒有一個(gè)技術(shù)是居于核心地位的呢?
數(shù)據(jù)湖就是核心。
美國風(fēng)投機(jī)構(gòu)a16z在去年提出了一個(gè)分析型數(shù)據(jù)架構(gòu)(如下圖所示),被很多其他分析師引用,很有影響力。a16z的創(chuàng)始人是大名鼎鼎的Marc Andreessen,他們對24位數(shù)據(jù)領(lǐng)域的大咖做了深入訪談,總結(jié)出下圖的架構(gòu)??梢钥闯?,數(shù)據(jù)湖處于當(dāng)仁不讓的中心位置。數(shù)據(jù)湖匯聚了所有類型的數(shù)據(jù),更重要的是數(shù)據(jù)湖還支持了所有類型的分析范式,包括數(shù)據(jù)倉庫、數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)、即席查詢、實(shí)時(shí)分析等等等等。
老的核心正在被數(shù)據(jù)湖取代。如果說經(jīng)典的分析型數(shù)據(jù)架構(gòu)的核心是數(shù)據(jù)倉庫或數(shù)據(jù)集市的話,那么他們很快就會(huì)被數(shù)據(jù)湖所包養(yǎng)了,也就是這兩年流行起來的湖倉一體架構(gòu)。湖倉一體指的是倉在湖里,只是數(shù)據(jù)湖中的一塊水域,一類應(yīng)用而已。
很多時(shí)髦的概念都離不開數(shù)據(jù)湖。比如最近很多人說要ELT,不要ETL。ELT就是先把數(shù)據(jù)load進(jìn)來,分析時(shí)再根據(jù)需要transform。load到哪里呢?當(dāng)然是數(shù)據(jù)湖。在比如Snowflake火了后云原生數(shù)倉的概念也瞬間時(shí)髦起來,其實(shí)云原生數(shù)倉的核心就是存算分離,而存在哪里呢?又是數(shù)據(jù)。
就連那些號稱反對數(shù)據(jù)湖的技術(shù)其實(shí)都反不了數(shù)據(jù)湖,反而會(huì)進(jìn)一步強(qiáng)化數(shù)據(jù)湖。業(yè)界有這么幾個(gè)號稱反對數(shù)據(jù)湖的概念:Data Mesh、Data Fabric、Data Virtualization。這些技術(shù)的提出者(包括大名鼎鼎的Gartner和ThoughtWorks)把數(shù)據(jù)湖想象成是下面這樣的一大坨,一個(gè)超級大湖,要?jiǎng)趲焺?dòng)眾把所有數(shù)據(jù)通過一大團(tuán)ELT搬進(jìn)來,使用的時(shí)候可能還需要另外一大團(tuán)ETL。這樣看當(dāng)然會(huì)覺得搬運(yùn)成本太高,湖太大很難治理,很容易成為臭氣熏天的“數(shù)據(jù)沼澤”。但這是不對的,因?yàn)閿?shù)據(jù)湖并沒有存儲(chǔ)所有數(shù)據(jù)的意味。數(shù)據(jù)湖強(qiáng)調(diào)的是可以存儲(chǔ)多種類型的數(shù)據(jù)、支持多種類型的分析范式,從來沒說過要存儲(chǔ)所有數(shù)據(jù),*存所有數(shù)據(jù)那是數(shù)據(jù)洋啊,咋能叫數(shù)據(jù)湖呢*。這只是某些CEO、CIO、CTO們想建一個(gè)超級大湖體現(xiàn)政績帶來的問題,不是數(shù)據(jù)湖本身的問題。過度集中不好不能說東西不好。關(guān)系數(shù)據(jù)庫好,但把所有交易數(shù)據(jù)都放到一個(gè)庫當(dāng)然也不好;大樓好,但一個(gè)城市就建一座大樓當(dāng)然也不好。Data Mesh、Data Fabric和Data Virtualization都強(qiáng)調(diào)不要過于集中化,要分布式治理,在我看來這些理念都是好的,但是說這些技術(shù)反對數(shù)據(jù)湖是沒道理的,他們反對的是集中制。另一方面,這些技術(shù)一定會(huì)強(qiáng)化數(shù)據(jù)湖的采用,因?yàn)榉稚⒘酥螅總€(gè)單元都要考慮為其他單元提供數(shù)據(jù)分析服務(wù),這對分析的要求就更靈活,而支持靈活的分析范式,正是數(shù)據(jù)湖最擅長的。在我看來,這些技術(shù)只是把一個(gè)大湖變成多個(gè)小一些的湖,最后的結(jié)果是分布式數(shù)據(jù)湖或邏輯數(shù)據(jù)湖。反對數(shù)據(jù)湖,最后到處都是湖。“殺不死,反而更強(qiáng)大”,這就是強(qiáng)者。
數(shù)據(jù)湖有強(qiáng)大的技術(shù)生態(tài)。一個(gè)技術(shù)要成為核心,生態(tài)非常重要。數(shù)據(jù)湖現(xiàn)在有Hadoop、對象存儲(chǔ)、DeltaLake/Hudi/Iceberg等好幾個(gè)實(shí)現(xiàn)ACID的技術(shù)。Hadoop和對象存儲(chǔ)都是發(fā)展了十多年。Hadoop云上云下很多廠商都在做,就是沒養(yǎng)出世界頂級的廠商,但廠商不賺錢恰恰是客戶得利啊。對象存儲(chǔ)原來是云巨頭的標(biāo)配,現(xiàn)在云下的MinIO等也開始發(fā)展起來。實(shí)現(xiàn)ACID的數(shù)據(jù)湖技術(shù)可以支持湖倉一體、批流一體,雖然現(xiàn)在都還不成熟,但一下子就三個(gè)競爭,態(tài)勢很好。有這樣的生態(tài)在,數(shù)據(jù)湖肯定會(huì)變得越來越價(jià)廉物美。
所以,數(shù)據(jù)湖是轉(zhuǎn)型現(xiàn)代分析型數(shù)據(jù)架構(gòu)的核心,只是要注意不要過度集中,可以分散、分步建設(shè),比如各BU有各BU的湖,集團(tuán)有集團(tuán)的湖。
01
為什么數(shù)據(jù)湖能成為核心
作為架構(gòu)師,還值得思考為什么數(shù)據(jù)湖能成為現(xiàn)代分析型數(shù)據(jù)架構(gòu)的核心而不是其他的技術(shù)。a16z的架構(gòu)體現(xiàn)了數(shù)據(jù)湖的核心位置,但這是結(jié)果,不是原因。數(shù)據(jù)湖為什么有今天的核心地位,背后有一系列深層次的原因。
首先,數(shù)據(jù)湖很好的匹配了大數(shù)據(jù)的特性。大數(shù)據(jù)的特性統(tǒng)稱4V:Volumn、Velocity、Varity和Value。數(shù)據(jù)湖定位于存儲(chǔ)各種類型的原始數(shù)據(jù),恰好滿足了大數(shù)據(jù)的大容量(Volume)、高通量(Velocity)和多樣化(Varity)的需求,而大數(shù)據(jù)具有大價(jià)值(Value)的特性則保障了數(shù)據(jù)湖的投資回報(bào)。舍恩伯格在《大數(shù)據(jù)時(shí)代》一書中總結(jié)的大數(shù)據(jù)時(shí)代思維變革的第一條就是“要全體數(shù)據(jù)而非抽樣數(shù)據(jù)”,數(shù)據(jù)湖存儲(chǔ)原始數(shù)據(jù)可謂恰逢其時(shí)。
其次,數(shù)據(jù)湖具備成為平臺(tái)型軟件的有利條件。最核心的技術(shù)軟件是平臺(tái)型的軟件,這類軟件構(gòu)建了一個(gè)軟件架構(gòu)中的雙邊市場,并占據(jù)此雙邊的中心位置。如操作系統(tǒng),向下管理各類資源,向上支持各類中間件和應(yīng)用。數(shù)據(jù)湖完全是一樣的格局,向下匯集各類數(shù)據(jù),向上支持各類分析范式。
最后,數(shù)據(jù)湖還有對象存儲(chǔ)的神助攻。對象存儲(chǔ)來自于云,本來主要是用來存文檔、圖像,提供在線服務(wù)的,和分析本來沒啥關(guān)系,但因?yàn)槠涑杀境?,接口靈活,結(jié)果搖身一變又成了很好的數(shù)據(jù)湖存儲(chǔ)系統(tǒng)。這就是《偉大創(chuàng)意的誕生》一書中說的“功能變異”。本來數(shù)據(jù)湖領(lǐng)域有一個(gè)蠻大的問題是HDFS技術(shù)不太給力,現(xiàn)在很多人喊“Hadoop已死”,有了對象存儲(chǔ),就算哪天Hadoop真死了,數(shù)據(jù)湖也不會(huì)死。
你看,數(shù)據(jù)湖符合時(shí)代精神,一出場就有成為平臺(tái)型軟件的范,還有對象存儲(chǔ)的“天助我也”,成為核心也就理所當(dāng)然了。