一、 什么是數據倉庫、數據集市和數據湖?
1、數據倉庫
早期系統采用數據庫來存放管理數據,但是隨著大數據技術的興起,大家想要通過大數據技術來找到數據之間可能存在的關系,所以大家設計了一套新的數據存儲管理系統,把所有的數據全部存儲到數據倉庫,然后統一對數據處理,這個系統叫做數據倉庫。而數據庫缺少靈活和強大的處理能力。
在計算機領域,數據倉庫(英語:data warehouse,也稱為企業數據倉庫)是用于報告和數據分析的系統,被認為是商業智能的核心組件。數據倉庫是來自一個或多個不同源的集成數據的中央存儲庫。數據倉庫將當前和歷史數據存儲在一起,以利各種分析方法如在線分析處理(OLAP)、數據挖掘(Data Mining),幫助決策者能快速從大量數據中,分析出有價值的信息,幫助建構商業智能(BI)。
盡管倉庫非常適合結構化數據,但是許多現代企業必須處理非結構化數據,半結構化數據以及具有高多樣性、高速度和高容量的數據。數據倉庫不適用于許多此類場景,并且成本效益并非最佳。
2、數據集市
每個部門自身也有對業務數據進行處理分析統計的需求,但不涉及到和其他數據,不希望在數據量大的數據倉庫進行操作(因為操作慢,而且可能影響到其他人處理數據),所以建立一個新的存儲系統,把數據倉庫里關聯自己的數據存儲到這個系統,本質上算是數據倉庫的一個子集。這個系統叫做數據集市。
例如公司里的某一個部門想對投資者服務數據進行分析,于是他們建立一個投資者服務數據的數據集市,其中數據從數據倉庫中抽取:
3、數據湖
隨著當前大量信息化發展和電子設備產品普及,產生大量的照片、視頻、文檔等非結構化數據,人們也想通過大數據技術找到這些數據的關系,所以設計了一個比數據倉庫還要大的系統,可以把非結構化和結構化數據共同存儲和做一些處理,這個系統叫做數據湖。
數據倉庫的成長性很好,而數據湖更靈活。數據倉庫支持的數據結構種類比較單一,數據湖的種類比較豐富,可以包羅萬象。數據倉庫更加適合成熟的數據當中的分析和處理,數據湖更加適合在異構數據上的價值的挖掘。
數據湖雖然適合存儲數據,但缺少一些關鍵功能:它們不支持事務處理,不保證數據質量,并且缺乏一致性/隔離性,從而幾乎無法實現混合追加和讀取數據,以及完成批處理和流式作業。由于這些原因,數據湖的許多功能尚未實現,并且在很多時候喪失了數據湖的優勢。
二、 數據湖+數據倉=湖倉一體?
在湖倉一體出現之前,數據倉庫和數據湖是被人們討論最多的話題。
正式切入主題前,先跟大家科普一個概念,即大數據的工作流程是怎樣的?這里就要涉及到兩個相對陌生的名詞:數據的結構化程度和數據的信息密度。前者描述的是數據本身的規范性,后者描述的是單位存儲體積內、包含的信息量的大小。
一般來說,人們獲取到的原始數據大多是非結構化的,且信息密度比較低,通過對數據進行清洗、分析、挖掘等操作,可以排除無用數據、找到數據中的關聯性,在這個過程中,數據的結構化程度、信息密度也隨之提升,最后一步,就是把優化過后的數據加以利用,變成真正的生產資料。
簡而言之,大數據處理的過程其實是一個提升數據結構化程度和信息密度的過程。在這個過程中,數據的特征一直在發生變化,不同的數據,適合的存儲介質也有所不同,所以才有了一度火熱的數據倉庫和數據湖之爭。
數據倉庫是一個面向主題的、集成的、相對穩定的、反映歷史變化的數據集合,主要用于支持管理決策和信息的全局共享。簡單點說,數據倉庫就像是一個大型圖書館,里面的數據需要按照規范放好,你可以按照類別找到想要的信息。
就目前來說,對數據倉庫的主流定義是位于多個數據庫上的大容量存儲庫,它的作用在于存儲大量的結構化數據,為管理分析和業務決策提供統一的數據支持,雖然存取過程相對比較繁瑣,對于數據類型有一定限制,但在那個年代,數據倉庫的功能性已經夠用了,所以在2011年前后,市場還是數據倉庫的天下。
到了互聯網時代,數據量呈現“井噴式”爆發,數據類型也變得異構化。受數據規模和數據類型的限制,傳統數據倉庫無法支撐起互聯網時代的商業智能,隨著Hadoop與對象存儲的技術成熟,數據湖的概念應用而生,在2011年由James Dixon提出。
相比于數據倉庫,數據湖是一種不斷演進中、可擴展的大數據存儲、處理、分析的基礎設施。它就像一個大型倉庫,可以存儲任何形式(包括結構化和非結構化)和任何格式(包括文本、音頻、視頻和圖像)的原始數據,數據湖通常更大,存儲成本也更為廉價。但它的問題也很明顯,數據湖缺乏結構性,一旦沒有被治理好,就會變成數據沼澤。
從產品形態上來說,數據倉庫一般是獨立標準化產品,數據湖更像是一種架構指導,需要配合著系列周邊工具,來實現業務需要。換句話說,數據湖的靈活性,對于前期開發和前期部署是友好的;數據倉庫的規范性,對于大數據后期運行和公司長期發展是友好的,那么,有沒有那么一種可能,有沒有一種新架構,能兼具數據倉庫和數據湖的優點呢?
于是,湖倉一體誕生了。
依據DataBricks公司對Lakehouse 的定義,湖倉一體是一種結合了數據湖和數據倉庫優勢的新范式,在用于數據湖的低成本存儲上,實現與數據倉庫中類似的數據結構和數據管理功能。湖倉一體是一種更開放的新型架構,有人把它做了一個比喻,就類似于在湖邊搭建了很多小房子,有的負責數據分析,有的運轉機器學習,有的來檢索音視頻等,至于那些數據源流,都可以從數據湖里輕松獲取。
就湖倉一體發展軌跡來看,早期的湖倉一體,更多是一種處理思想,處理上將數據湖和數據倉庫互相打通,現在的湖倉一體,雖然仍處于發展的初期階段,但它已經不只是一個純粹的技術概念,而是被賦予了更多與廠商產品層面相關的含義和價值。
這里需要注意的是,“湖倉一體”并不等同于“數據湖”+“數據倉”,這是一個極大的誤區,現在很多公司經常會同時搭建數倉、數據湖兩種存儲架構,一個大的數倉拖著多個小的數據湖,這并不意味著這家公司擁有了湖倉一體的能力,湖倉一體絕不等同于數據湖和數據倉簡單打通,反而數據在這兩種存儲中會有極大冗余度。
三、 為什么會誕生湖倉一體化?
1、打通數據的存儲與計算
很多公司對各類數據應用包括 SQL 分析、實時監控、數據科學和機器學習的靈活性、高性能系統的需求并未減少。AI 的大部分最新進展是基于更好地處理非結構化數據(如 text、images、video、audio )的模型,完全純數據倉庫的二維關系表已經無法承接半/非結構化數據的處理,AI 引擎不可能只跑在純數據倉庫模型上。
一種常見的解決方案是結合數據湖和數據倉庫優勢,建立湖倉一體化,進而解決了數據湖的局限性:直接在用于數據湖的低成本存儲上實現與數據倉庫中類似的數據結構和數據管理功能。
之前的微博基于大數據的需求發展了數據倉庫平臺,基于AI的需求,發展了數據湖平臺,這兩套大數據平臺在集群層面完全是割裂的,數據和計算無法在兩個平臺間自由流動。而使用湖倉一體,就能實現數據湖和數倉之間的無縫流轉,打通了數據存儲和計算的不同的層面。
2、靈活性與成長性兼得
通過上面這張圖,可知靈活性和成長性,對于處于不同時期的企業來說,重要性不同。
當企業處于初創階段,數據從產生到消費還需要一個創新探索的階段才能逐漸沉淀下來,那么用于支撐這類業務的大數據系統,靈活性就更加重要,數據湖的架構更適用。
當企業逐漸成熟起來,已經沉淀為一系列數據處理流程,問題開始轉化為數據規模不斷增長,處理數據的成本不斷增加,參與數據流程的人員、部門不斷增多,那么用于支撐這類業務的大數據系統,成長性的好壞就決定了業務能夠發展多遠。數據倉庫的架構更適用。 [圖片上傳失敗...(image-16f45a-1653362367248)]
經過對數據湖和數據倉庫的深入闡述和比較,可以發現:數據湖和數據倉庫一個面向初創用戶友好,一個成長性更佳。對企業來說,數據湖和數據倉庫是否必須是一個二選一的選擇題?是否能有一種方案同時兼顧數據湖的靈活性和云數據倉庫的成長性,將二者有效結合起來為用戶實現更低的總體擁有成本?那么湖倉一體化就是答案!
四、 什么是湖倉一體化?
隨著當前大數據技術應用趨勢,企業對單一的數據湖和數倉架構并不滿意。越來越多的企業開始融合數據湖和數據倉庫的平臺,不僅可以實現數據倉庫的功能,同時還實現了不同類型數據的處理功能、數據科學、用于發現新模型的高級功能。
湖倉一體是一種新型開放式架構,將數據湖和數據倉庫的優勢充分結合,它構建在數據湖低成本的數據存儲架構之上,又繼承了數據倉庫的數據處理和管理功能,打通數據湖和數據倉庫兩套體系,讓數據和計算在湖和倉之間自由流動。作為新一代大數據技術架構,將逐漸取代單一數據湖和數據倉庫架構。 有人把“湖倉一體”做了形象的比喻,就好像湖邊搭建了很多小房子,有的可以負責數據分析,有的來運轉機器學習,有的來檢索音視頻等等,而這些數據源流,都可以從數據湖里輕松取得。
五、 湖倉一體Data Lakehouse介紹
Data Lakehouse(湖倉一體)是新出現的一種數據架構,它同時吸收了數據倉庫和數據湖的優勢,數據分析師和數據科學家可以在同一個數據存儲中對數據進行操作,同時它也能為公司進行數據治理帶來更多的便利性。那么何為Data Lakehouse呢,它具備些什么特性呢?
一直以來,我們都在使用兩種數據存儲方式來架構數據:
數據倉庫:數倉這樣的一種數據存儲架構,它主要存儲的是以關系型數據庫組織起來的結構化數據。數據通過轉換、整合以及清理,并導入到目標表中。在數倉中,數據存儲的結構與其定義的schema是強匹配的。
數據湖:數據湖這樣的一種數據存儲結構,它可以存儲任何類型的數據,包括像圖片、文檔這樣的非結構化數據。數據湖通常更大,其存儲成本也更為廉價。存儲其中的數據不需要滿足特定的schema,數據湖也不會嘗試去將特定的schema施行其上。相反的是,數據的擁有者通常會在讀取數據的時候解析schema(schema-on-read),當處理相應的數據時,將轉換施加其上。
現在許多的公司往往同時會搭建數倉、數據湖這兩種存儲架構,一個大的數倉和多個小的數據湖。這樣,數據在這兩種存儲中就會有一定的冗余。
Data Lakehouse的出現試圖去融合數倉和數據湖這兩者之間的差異,通過將數倉構建在數據湖上,使得存儲變得更為廉價和彈性,同時lakehouse能夠有效地提升數據質量,減小數據冗余。在lakehouse的構建中,ETL起了非常重要的作用,它能夠將未經規整的數據湖層數據轉換成數倉層結構化的數據。
Data Lakehouse概念是由Databricks提出的,在提出概念的同時,也列出了如下一些特性:
- 事務支持:Lakehouse可以處理多條不同的數據管道。這意味著它可以在不破壞數據完整性的前提下支持并發的讀寫事務。
- Schemas:數倉會在所有存儲其上的數據上施加Schema,而數據湖則不會。Lakehouse的架構可以根據應用的需求為絕大多數的數據施加schema,使其標準化。
- 報表以及分析應用的支持:報表和分析應用都可以使用這一存儲架構。Lakehouse里面所保存的數據經過了清理和整合的過程,它可以用來加速分析。同時相比于數倉,它能夠保存更多的數據,數據的時效性也會更高,能顯著提升報表的質量。
- 數據類型擴展:數倉僅可以支持結構化數據,而Lakehouse的結構可以支持更多不同類型的數據,包括文件、視頻、音頻和系統日志。
- 端到端的流式支持:Lakehouse可以支持流式分析,從而能夠滿足實時報表的需求,實時報表在現在越來越多的企業中重要性在逐漸提高。
- 計算存儲分離:我們往往使用低成本硬件和集群化架構來實現數據湖,這樣的架構提供了非常廉價的分離式存儲。Lakehouse是構建在數據湖之上的,因此自然也采用了存算分離的架構,數據存儲在一個集群中,而在另一個集群中進行處理。
- 開放性:Lakehouse在其構建中通常會使Iceberg,Hudi,Delta Lake等構建組件,首先這些組件是開源開放的,其次這些組件采用了Parquet,ORC這樣開放兼容的存儲格式作為下層的數據存儲格式,因此不同的引擎,不同的語言都可以在Lakehouse上進行操作。
Lakehouse的概念最早是由Databricks所提出的,而其他的類似的產品有Azure Synapse Analytics。Lakehouse技術仍然在發展中,因此上面所述的這些特性也會被不斷的修訂和改進。
六、 湖倉一體化有什么好處?
湖倉一體能發揮出數據湖的靈活性與生態豐富性,以及數據倉庫的成長性與企業級能力。幫助企業建立數據資產、實現數據業務化、進而推進全線業務智能化,實現數據驅動下的企業數據智能創新,全面支撐企業未來大規模業務智能落地。其主要優勢主要有以下幾個方面:
數據重復性:如果一個組織同時維護了一個數據湖和多個數據倉庫,這無疑會帶來數據冗余。在最好的情況下,這僅僅只會帶來數據處理的不高效,但是在最差的情況下,它會導致數據不一致的情況出現。湖倉一體的結合,能夠去除數據的重復性,真正做到了唯一。
高存儲成本:數據倉庫和數據湖都是為了降低數據存儲的成本。數據倉庫往往是通過降低冗余,以及整合異構的數據源來做到降低成本。而數據湖則往往使用大數據文件系統和Spark在廉價的硬件上存儲計算數據。湖倉一體架構的目標就是結合這些技術來最大力度降低成本。
報表和分析應用之間的差異:數據科學傾向于與數據湖打交道,使用各種分析技術來處理未經加工的數據。而報表分析師們則傾向于使用整合后的數據,比如數據倉庫或是數據集市。而在一個組織內,往往這兩個團隊之間沒有太多的交集,但實際上他們之間的工作又有一定的重復和矛盾。而當使用湖倉一體架構后,兩個團隊可以在同一數據架構上進行工作,避免不必要的重復。
數據停滯:在數據湖中,數據停滯是一個最為嚴重的問題,如果數據一直無人治理,那將很快變為數據沼澤。我們往往輕易的將數據丟入湖中,但缺乏有效的治理,長此以往,數據的時效性變得越來越難追溯。湖倉一體的引入,對于海量數據進行治理,能夠更有效地幫助提升分析數據的時效性。
潛在不兼容性帶來的風險:數據分析仍是一門興起的技術,新的工具和技術每年仍在不停地出現中。一些技術可能只和數據湖兼容,而另一些則又可能只和數據倉庫兼容。湖倉一體的架構意味著為兩方面做準備。
七、 湖倉一體落地路徑與成本
A:現在大多數企業都已經有了自己的一套大數據架構,他們如何基于已有的架構落地湖倉一體?有哪些可行的落地路徑?成本可能主要會來自哪里?
Q:現在有一部分企業已經有了自己的大數據架構,這些企業相對來說可能誕生的比較早,大多數都是選的 Hadoop 體系,或是自建的 Hadoop 體系,或是使用云上托管的 Hadoop 體系。這些企業可以有很多選擇,他可以選擇像 Databricks 那樣的方案,也可以選擇像 MaxCompute 這樣的方案。
這兩條路徑都相對可行,那怎么選?這通常要看企業是不是希望在大數據技術棧上做更多投入。如果企業覺得沒必要在基礎設施上投很多資源,而是要把更多資源放在業務上,那選一個更偏全托管版的湖倉一體解決方案更有價值。反之,如果企業技術人員很多,希望底層基礎設施足夠靈活并且是自己可控的,就可以選擇在湖上建倉的模式。
還有一些比較新的企業,比如過去三年內成立的,它們有很多都處于高速增長階段。這些企業其實天生就長在云上,甚至一開始選的大數據架構就已經是云數倉的架構,這類企業基于現有的架構向前演進相對比較簡單。只要盡量使用云基礎設施,開通幾個云服務就能形成一套湖倉一體架構了,這是一個簡單直接且相對單一化的路徑。
那成本主要來自哪里?如果企業選擇全托管的湖倉一體解決方案,則成本主要來自于對當前數據,比如數倉遷移、數據整理等一次性開支,一旦這部分工作做完,后續在數據治理上形成正循環,整體成本不會太高。如果企業選擇自己維護一套湖倉一體架構,則成本主要來自持續維護和調優整套基礎設施的人力成本和硬件成本。
A:根據您的了解,當前企業嘗試落地湖倉一體的時候遇到的問題和挑戰主要有哪些?現在是采用湖倉一體的好時機嗎?
Q:現在大多數企業都還沒有用到湖倉一體的新架構,他們要么選擇了數據湖方案,要么選擇了數倉方案。湖倉一體作為一個新興架構,很多企業目前還在早期探索階段。有些企業在把數據放到數據湖上之后,發現在數據湖上做好數據治理或者數據管理相對比較困難,這個時候再去采用湖倉一體模式,在現有相對更靈活但不夠管理化的數據上,再抽象一層數倉層和治理層,對數據做更好的管理和治理。對于數倉的用戶,如果采用的數倉系統支持湖倉一體架構,直接掛載數據湖就好了。
企業嘗試落地湖倉一體時會遇到的問題和挑戰主要有幾點。首先,如果團隊沒有足夠好的數據治理或數據管理經驗,挑戰會比較大。這也是為什么我們推出的方案幾乎都在向全托管或全服務的 SaaS 模式走,就是希望能夠降低門檻。
其次,對于自建湖倉一體的企業,他們會遇到的挑戰主要是湖倉一體的高復雜度,特別是湖倉之間如何協同的問題,這里面涉及到兩套系統存儲打通的問題、元數據一致性問題、湖和倉上不同引擎之間數據交叉引用的問題,以及帶寬問題、安全問題,等等。另外,由于湖倉一體架構底層是一個二元體系,那向上面向用戶的時候,用戶是不是能看到兩個體系?如果用戶能夠看到兩個體系的話,如何區分和引導?如果用戶看不到的話,那底下開發需要做什么樣的封裝?這些都是自建湖倉體系會遇到的問題。
總之,如果企業并不是一定要大力投入做基礎設施的話,直接采用全托管版本的湖倉一體的架構會簡單很多。
最后,湖倉一體還是一個新興的方向,很多問題還在探索中,比如哪些數據放在數倉 / 數據湖?更適合有一定探索和創新意愿的企業。