前言
本文翻譯自大資料技術公司 Databricks 針對資料湖 Delta Lake 系列技術文章。衆所周知,Databricks 主導着開源大資料社群 Apache Spark、Delta Lake 以及 ML Flow 等衆多熱門技術,而 Delta Lake 作為資料湖核心存儲引擎方案給企業帶來諸多的優勢。
此外,阿裡雲和 Apache Spark 及 Delta Lake 的原廠 Databricks 引擎團隊合作,推出了基于阿裡雲的企業版全托管 Spark 産品——Databricks 資料洞察,該産品原生內建企業版 Delta Engine 引擎,無需額外配置,提供高性能計算能力。有興趣的同學可以搜尋` Databricks 資料洞察`或`阿裡雲 Databricks `進入官網,或者直接通路
https://www.aliyun.com/product/bigdata/spark了解詳情。
譯者:韓宗澤(棕澤),阿裡雲計算平台事業部技術專家,負責開源大資料生态企業團隊的研發工作。

Delta Lake技術系列 - 湖倉一體(Lakehouse)
——整合資料湖和資料倉庫的最佳優勢
目錄
- Chapter-01 什麼是湖倉一體?
- Chapter-02 深入探讨 Lakehouse 和 Delta Lake 的内部工作原理
- Chapter-03 探究 Delta Engine
本文介紹内容
Delta Lake 系列電子書由 Databricks 出版,阿裡雲計算平台事業部大資料生态企業團隊翻譯,旨在幫助上司者和實踐者了解 Delta Lake 的全部功能以及它所處的場景。在本文中,Delta Lake 系列-湖倉一體( Lakehouse ),重點介紹湖倉一體。
後續
讀完本文後,您不僅可以了解 Delta Lake 提供了什麼特性,還可以了解這些特性是如何帶來實質性的性能改進的。
什麼是資料湖?
Delta Lake是一個統一的資料管理系統,可為雲資料湖帶來資料可靠性和快速分析能力。Delta Lake 可以在現有資料湖之上運作,并且與 Apache Spark API 完全相容。
在Databricks 公司内部,我們已經看到了 Delta Lake 如何為資料湖帶來可靠性保證,性能優化和生命周期管理。 使用 Delta Lake 可以解決以下問題:資料格式錯誤,資料合規性删除或對個别資料進行修改。同時,借助 Delta Lake,高品質資料可以快速寫入資料湖,通過雲服務(安全且可擴充)部署以提高資料的利用效率。
Chapter-01 什麼是湖倉一體?
在過去的幾年裡,Lakehouse 作為一種新的資料管理範式,已獨立出現在 Databricks的許多使用者和應用案例中。在這篇文章中,我們将闡述這種新範式以及它相對于之前方案的優勢。
資料倉庫在決策支援和商業智能應用程式方面擁有悠久的曆史。 自1980年代末建立以來,資料倉庫技術一直在發展,MPP 架構使得系統能夠處理更大規模的資料量。
盡管倉庫非常适合結構化資料,但是許多現代企業必須處理非結構化資料,半結構化資料以及具有高多樣性、高速度和高容量的資料。資料倉庫不适用于許多此類場景,并且成本效益并非最佳。
随着公司開始從許多不同的來源收集大量資料,架構師們開始構想一個單一的系統來容納許多不同的分析産品和工作任務産生的資料。
大約十年前,我們開始建立
資料湖——一種多種格式的原始資料的存儲資料庫。資料湖雖然适合存儲資料,但缺少一些關鍵功能:它們不支援事務處理,不保證資料品質,并且缺乏一緻性/隔離性,進而幾乎無法實作混合追加和讀取資料,以及完成批處理和流式作業。 由于這些原因,資料湖的許多功能尚未實作,并且在很多時候喪失了資料湖的優勢。
很多公司對各類資料應用包括 SQL 分析、實時監控、資料科學和機器學習的靈活性、高性能系統的需求并未減少。AI 的大部分最新進展是基于更好地處理非結構化資料(如 text、images、video、audio )的模型,但這些恰恰是資料倉庫未針對優化的資料類型。一種常見的解決方案是使用融合資料湖、多個資料倉庫以及其他的如流、時間序列、圖和圖像資料庫的系統。但是,維護這一整套系統是非常複雜的(維護成本相對較高)。此外,資料專業人員通常需要跨系統進行資料的移動或複制,這又會導緻一定的延遲。
湖倉一體整合了資料湖和資料倉庫二者的優勢
Lakehouse 是一種結合了資料湖和資料倉庫優勢的新範式,解決了資料湖的局限性。Lakehouse 使用新的系統設計:直接在用于資料湖的低成本存儲上實作與資料倉庫中類似的資料結構和資料管理功能。如果你現在需要重新設計資料倉庫,現在有了廉價且高可靠(以對象存儲的格式)的存儲可用,不妨考慮使用 Lakehouse。
Lakehouse有如下關鍵特性:
- 事務支援:Lakehouse 在企業級應用中,許多資料管道通常會同時讀取和寫入資料。通常多方同時使用 SQL 讀取或寫入資料,Lakehouse 保證支援ACID事務的一緻性。
- 模式實施和治理:Lakehouse 應該有一種支援模式實施和演變的方法,支援 DW 模式規範,例如 star /snowflake-schemas。該系統應該能夠推理資料完整性,并且應該具有健壯的治理和稽核機制。
- BI支援:Lakehouse 可以直接在源資料上使用BI工具。這樣可以減少陳舊度和等待時間,提高新近度,并且降低必須在資料湖和倉庫中操作兩個資料副本的成本。
- 存儲與計算分離:事實上,這意味着存儲和計算使用單獨的群集,是以這些系統能夠擴充到更多并發使用者和更大資料量。 一些現代資料倉庫也具有這種屬性。
- 相容性:Lakehouse 使用的存儲格式是開放式和标準化的,例如 Parquet,并且它提供了多種 API,包括機器學習和 Python/R 庫,是以各種工具和引擎都可以直接有效地通路資料。
- 支援從非結構化資料到結構化資料的多種資料類型:Lakehouse 可用于存儲,優化,分析和通路許多新資料應用程式所需的資料類型,包括圖像,視訊,音頻,半結構化資料和文本。
- 支援各種工作場景:包括資料科學,機器學習和 SQL 分析。這些可能依賴于多種工具來支援的工作場景,它們都依賴于相同的資料存儲庫。
- 端到端流式任務:實時報告是許多企業的日常需要。對流處理的支援消除了對專門服務于實時資料應用程式的單獨系統的需求。
這些是 Lakehouse 的關鍵特征。企業級系統需要更多功能。安全和通路控制工具是基本需求。尤其是根據最近的隐私法規,包括稽核,保留和沿襲在内的資料治理功能已變得至關重要,諸如資料目錄和資料使用量度等資料發現工具也需要被啟用。使用Lakehouse,上述企業特點隻需要在單套系統中被部署、測試和管理。
閱讀以下研究 Delta Lake:基于雲對象存儲的高性能 ACID 表存儲
摘要:
雲對象存儲(例如阿裡雲 OSS)是一些現有的最大、最具成本效益的存儲系統,它是存儲大型資料倉庫和資料湖的主要選擇。具有局限性的是,它們作為鍵值存儲的實作方式使其很難實作 ACID 事務和高性能,因為中繼資料操作(例如列出對象)非常昂貴,并且一緻性保證受到限制。在本文中,我們介紹了 Delta Lake,這是最初由Databricks 開發的基于雲對象存儲的開源 ACID 表存儲層。 Delta Lake 使用 Apache Parquet 壓縮格式的事務日志來為大型表格資料集提供 ACID 屬性,時間旅行和快速的中繼資料操作(例如,能夠快速在數十億個分區中搜尋查詢)。它還利用此設計來提供進階功能,例如自動資料布局優化、更新、緩存和稽核日志。我們可以從 Apache Spark,Hive,Presto,Redshift 和其他系統通路 Delta Lake 表。Delta Lake 部署在數以千計的 Databricks 客戶中,這些客戶每天處理 EB 級資料,最大的執行個體管理 EB 級資料集和數十億個對象。
作者:Michael Armbrust, Tathagata Das, Liwen Sun, Burak Yavuz, Shixiong Zhu, Mukul Murthy, Joseph Torres, Herman van HÖvell, Adrian Ionescu, Alicja Łuszczak, Michał Szafra ń ski, Xiao Li, Takuya Ueshin, Mostafa Mokhtar, Peter Boncz, Ali Ghodsi, Sameer Paranjpye, Pieter Senster, Reynold Xin, Matei Zaharia
原文
Inner workings of the lakehouse.
早期案例
Databricks 統一資料平台在架構上支援 lakehouse。阿裡巴巴的 DDI 服務,已經與Databricks 內建,實作了類似 Lakehouse 的模式。其他托管服務(例如 BigQuery 和Redshift Spectrum)具有上面列出的一些 LakeHouse 功能特性,但它們是主要針對 BI和其他 SQL 應用。對于想要建構和實作自己系統的公司,可參考适合建構 Lakehouse的開源檔案格式( Delta Lake,Apache Iceberg,Apache Hudi )。
将資料湖和資料倉庫合并到一個系統中意味着資料團隊可以更快地移動資料,因為他們能夠使用資料而無需通路多個系統。在這些早期的 Lakehouse中,SQL 支援以及與BI 工具的內建通常足以滿足大多數企業資料倉庫的需求。執行個體化視圖和存儲過程是可以使用的,但是使用者可能需要采用其他機制,這些機制與傳統資料倉庫中的機制不同。後者對于“升降場景”尤為重要,“升降場景”要求系統所具有的語義與舊的商業資料倉庫的語義幾乎相同。
對其他類型的資料應用程式的支援是怎樣的呢? Lakehouse 的使用者可以使用各種标準工具(
Apache Spark,Python,R,機器學習庫)來處理非 BI 工作,例如資料科學和機器學習。 資料探索和完善是許多分析和資料科學應用程式的标準。Delta Lake 旨在讓使用者逐漸改善 Lakehouse 中的資料品質,直到可以使用為止。
盡管可以将分布式檔案系統用于存儲層,但對象存儲更适用于 Lakehouse。對象存儲提供了低成本,高可用性的存儲,在大規模并行讀取方面表現出色,這是現代資料倉庫的基本要求。
從BI到AI
Lakehouse 是一種新的資料管理體系結構,在機器學習覆寫各行各業的時代,它可以從根本上簡化企業資料基礎架構并加速創新。過去,公司産品或決策中涉及的大多數資料都是來自作業系統的結構化資料。而如今,許多産品都以計算機視覺和語音模型,文本挖掘等形式內建了AI。 為什麼要使用 Lakehouse 而不是資料湖來進行AI? Lakehouse 可為您提供資料版本控制、治理、安全性和 ACID 屬性,即使對于非結構化資料也是如此。
目前 Lakehouse 降低了成本,但是它們的性能仍然落後于實際投入和部署多年的專用系統(例如資料倉庫)。使用者可能會偏愛某些工具( BI工具,IDE,notebook ),是以 Lakehouse 還需要改進其 UX 以及與流行工具的連接配接器來吸引更多使用者。随着技術的不斷成熟和發展,這些問題都将得到解決。 随着技術進步,Lakehouse 将縮小這些差距,并且同時保留更簡單,更具成本效益和更能服務于各種資料應用程式的核心屬性。
Chapter02 深入探讨 Lakehouse 和 Delta Lake 的内部工作原理
【詳談 Delta Lake 】系列技術專題 之 湖倉一體( Lakehouse )前言Delta Lake技術系列 - 湖倉一體(Lakehouse)Chapter-01 什麼是湖倉一體?Chapter02 深入探讨 Lakehouse 和 Delta Lake 的内部工作原理Chapter03 探究 Delta Engine後續
Databricks 寫了一篇
部落格,概述了越來越多的企業采用 Lakehouse 模式。該部落格引起了技術愛好者的極大興趣。盡管許多人稱贊它為下一代資料體系結構,但有些人認為湖倉一體與資料湖是一回事。最近,我們的幾位工程師和創始人寫了一篇研究論文,描述了使湖倉一體架構與資料湖區分開的一些核心技術挑戰和解決方案,該論文已在The International Conference on Very Large Databases (VLDB) 2020接受并發表,“
Delta Lake: High-Performance ACID Table Storage Over Cloud Object Stores”。
十多年前,雲為資料存儲開辟了新的發展方向。像 Amazon S3 這樣的雲對象存儲已成為世界上一些最大,最具成本效益的存儲系統,這使它們成為更有吸引力的資料存儲倉庫和資料湖平台。但是,它們作為鍵值存儲的性質使得許多公司所需的 ACID 事物特性變得困難。而且,昂貴的中繼資料操作(例如列出對象)和受限的一緻性保證也影響了性能。
基于雲對象存儲的特點,出現了三種方案:
Data lakes (資料湖)
Data lakes 将表存儲為對象集合的檔案目錄(即資料湖),通常使用列式(例如Apache Parquet )存儲。 這是一種獨特的方法。因為表隻是一組對象,可以通過多種工具進行通路,而無需使用其他資料存儲系統,但是這樣會導緻性能和一緻性問題。 性能上由于事務執行失敗導緻隐藏的資料損壞的情況時有發生,最終導緻查詢不一緻,等待時間長,并且基本的管理功能(如表版本控制和稽核日志)不可用。
Custom storage engines (自定義存儲引擎)
第二種方法是定制存儲引擎,例如為雲建構的專有系統,如 Snowflake 資料倉庫。 這些系統可以提供單一的資料源,通過在獨立且高度一緻的服務中管理中繼資料,進而可以避免資料湖的一緻性挑戰。 但是,所有 I/O 操作都需要連接配接到此中繼資料服務,這可能會增加雲資源成本并降低性能和可用性。 此外,要實作現有計算引擎(例如 Apache Spark,Tensorflow 和 Pytorch )的連接配接器還需要進行大量工程化工作,這對于使用各種計算引擎的資料處理團隊而言可能是一個挑戰。非結構化資料會加劇工程上的挑戰,因為這些系統通常針對傳統的結構化資料類型進行了優化。最令人不能接受的是,專有中繼資料服務将客戶鎖定在特定的服務提供商中,如果客戶将來決定采用新服務,他們将不得不面對始終高昂的價格和費時的遷移成本。
Lakehouse (湖倉一體)
Delta Lake 是一種雲對象存儲之上的開源 ACID 表存儲層。好比我們尋求建造一輛汽車,而不是尋找更快的馬。湖倉一體是一種新架構,結合了資料湖和資料倉庫的優勢。它不僅擁有更好的資料存儲性能,而且在存儲和使用資料的方式上發生了根本性的變化。新的系統設計支援 Lakehouse:直接在用于資料湖的低成本存儲上實作與資料倉庫中類似的資料結構和資料管理功能。如果您想要設計新的存儲引擎,那麼這種價格低廉且可靠性高的存儲(以對象存儲的形式)就是您所想要的。
Delta Lake 使用壓縮到 Parquet 中的預寫日志,以 ACID 方式維護資料表的部分對象資訊,該日志也會存儲在雲對象存儲中。這種設計允許用戶端一次更新多個對象,以可串行化的方式用另一個對象替換對象的一個子集,進而可以獲得很高的并行讀/寫性能。該日志還為大型表格資料集提供了顯着更快的中繼資料操作。
Delta Lake 還提供了:時間旅行(資料版本控制支援復原),自動優化小檔案,更新支援,緩存和稽核日志。這些功能共同提高了在雲對象存儲中處理資料的可管理性和性能,最終為 Lakehouse 架構打開了大門。該架構結合了資料倉庫和資料湖的關鍵功能,建立了更好,更簡單的資料架構。
如今,Delta Lake 已被成千上萬的 Databricks 客戶以及開源社群中的許多組織所使用,每天處理數十億位元組的結構化和非結構化資料。這些用例涵蓋了各種資料源和應用程式。存儲的資料類型包括來自企業OLTP系統的更改資料捕獲( CDC )日志,應用程式日志,時間序列資料,圖形,用于報告的聚合表以及用于機器學習的圖像或特征資料。這些應用程式包括 SQL 分析工作(最常見),商業智能化,流處理,資料科學,機器學習和圖形分析。總體而言,Delta Lake已證明它非常适合大多數使用結構化存儲格式(例如 Parquet 或 ORC )和許多傳統資料倉庫工作負載的資料湖應用程式。
在這些用例中,我們發現客戶經常使用 Delta Lake 來大幅簡化其資料架構,他們直接針對雲對象存儲運作更多工作負載。更多時候,他們通過建立具有資料湖和事務功能的 Lakehouse 來替換消息隊列(例如 Apache Kafka ),資料湖或雲資料倉庫(例如 Snowflake,Amazon Redshift )提供的部分或全部功能。
在上述這篇
文章的研究中,作者還提供了以下介紹:
• 對象存儲的特征和挑戰
• Delta Lake 的存儲格式和通路協定
• Delta Lake 目前的特征,優勢和局限性
• 當下常用的核心用例和專用用例
• 性能實驗,包括 TPC-DS 性能
通過本文,您将更好地了解 Delta Lake,以及它如何為低成本雲存儲中的資料啟用類似于 DBMS 的性能和管理功能。您還将了解到 Delta Lake 的存儲格式和通路協定是如何幫助它變得易于操作,高可用并能夠提供對象存儲的高帶寬通路。
Chapter03 探究 Delta Engine
Delta 引擎将與 Apache Spark 100%相容的矢量化查詢引擎聯系在一起,通過利用現代CPU體系結構對 Spark 3.0的查詢優化器和緩存功能進行了優化,這些功能是作為Databricks Runtime 7.0的一部分推出的。這些功能加在一起,可以顯着提高資料湖(尤其是由
支援的資料湖)上的查詢性能,進而使客戶可以更輕松地采用和擴充
Lakehouse 體系結構。
擴充執行性能
過去幾年中最大的硬體變化趨勢之一是 CPU 時脈速度已趨于平穩。 其具體原因不在本章的讨論範圍之内,但重要的是,我們必須找到新的方法來以超出原始計算能力的速度去更快地處理資料。 一個最有效的方法是提高可以并行處理的資料量。 但是,資料處理引擎需要專門設計以利用這種并行性。
此外,随着業務步伐的加快,留給研發團隊提供良好的資料模組化的時間越來越少。為了更好的業務靈活性而進行的較差的模組化會導緻較差的查詢性能。是以,這不是理想的狀态,我們希望找到使靈活性和性能最大化的方法。
提出高查詢性能的 Delta Engine
Delta Engine 通過三個元件來提高 Delta Lake 的 SQL 和 DataFrame 工作負載的性能:一個改良好的查詢優化器,一個位于執行層和雲對象存儲之間的緩存層,一個用C++ 編寫的本機矢量執行引擎。
改進的查詢優化器通過更優化的統計資訊擴充了 Spark 3.0中已有的功能(基于成本的優化器,自适應查詢執行和動态運作時過濾器),進而使星型架構工作負載的性能提高了18倍。
Delta Engine 的緩存層會自動選擇要為使用者緩存的輸入資料,并以更高效的 CPU 格式對代碼進行轉碼,進而更好地利用NVMe SSD的更高存儲速度。幾乎所有工作負載的掃描性能最高可提高5倍。
事實上,Delta Engine 的最大創新點是本地執行引擎,它解決了當今資料團隊所面臨的挑戰,我們将其稱為 Photon(衆所周知,它是一個引擎中的引擎)。這個完全重構的 Databricks 執行引擎的建構旨在最大限度地提高現代雲硬體中新變化帶來的性能。它為所有工作負載類型帶來了性能改進,同時仍與開源 Spark API 完全相容。
Delta Engine 入門
通過将這三個元件連結在一起,客戶将更容易了解 Databricks 是如何将多個部分的代碼聚合在一起進行改進,進而大大提高在資料湖上進行分析的工作負載的性能。
我們對 Delta Engine 為客戶帶來的價值感到興奮。它在時間和成本的節約方面具有很大價值。更重要的是在 Lakehouse 模式中,它支援資料團隊設計資料體系結構以提高統一性和簡化性,并取得很多新進展。
有關 Delta Engine 詳情,請觀看 Spark + AI Summit 2020上的主題演講:
Delta Engine: High-Performance Query Engine for Delta Lake您已經了解了 Delta Lake 及其特性,以及如何進行性能優化,本系列還包括其他内容:
- Delta Lake 技術系列-基礎和性能
- Delta Lake 技術系列-特性
- Delta Lake 技術系列-Streaming
- Delta Lake 技術系列-客戶用例(Use Case)
擷取更詳細的 Databricks 資料洞察相關資訊,可至産品詳情頁檢視:
阿裡巴巴開源大資料技術團隊成立 Apache Spark 中國技術社群,定期推送精彩案例,技術專家直播,隻為營造純粹的 Spark 氛圍,歡迎關注公衆号!
掃描下方二維碼入 Databricks 資料洞察産品交流釘釘群一起參與交流讨論!