Delta Lake是DataBricks公司推出的一種數據湖方案。Delta Lake以數據為中心,圍繞數據流走向(數據從流入數據湖、數據組織管理和數據查詢到流出數據湖)推出了一系列功能特性,協助您搭配第三方上下游工具,搭建快捷、易用和安全的數據湖。
背景信息
通常的數據湖方案是選取大數據存儲引擎構建數據湖(例如,阿里云對象存儲OSS產品或云下HDFS),然后將產生的各種類型數據存儲在該存儲引擎中。在使用數據時,通過Spark或Presto對接數據分析引擎并進行數據解析。但該套方案存在如下問題:
- 數據導入可能會失敗,失敗后清理臟數據和恢復作業困難。
- 方案中沒有ETL(Extract Transform Load)過程,缺少必要的數據質量監管。
- 方案中沒有事務將讀和寫隔離,致使流式和批式讀寫無法相互隔離。
Delta數據湖方案如下:
- 在大數據存儲層之上提供了數據管理層,該數據管理層等同于數據庫中的元數據管理,其元數據隨著數據一起存放并對用戶可見(例如圖 1所示)。
- Delta基于元數據管理引入了ACID,解決了因數據導入失敗而產生臟數據和數據導入時的讀寫隔離問題。
- 元數據存儲了數據的字段信息,Delta提供了數據導入時數據校驗功能,保證數據質量。
- 事務功能使得批式讀寫和流式讀寫能夠互相隔離。
說明 ACID指數據庫事務正確執行的四個基本要素的縮寫。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability)。
Data Warehouse、Data Lake和Delta Lake對比如下所示。
對比項 | Data Warehouse | Data Lake | Delta Lake |
---|---|---|---|
架構 | 計算存儲一體或分離 | 計算存儲分離 | 計算存儲分離 |
存儲管理 | 嚴格、非通用 | 原生格式 | 通用格式、輕量級 |
場景 | 報表、分析 | 報表、分析、數據科學 | 報表、分析、數據科學 |
靈活性 | 低 | 高 | 較高 |
數據質量和可靠性 | 很高 | 低 | 較高 |
事務性 | 支持 | 不支持 | 支持 |
性能 | 高 | 低 | 較高 |
擴展性 | 依賴于具體實現 | 高 | 高 |
面向人員 | 管理人員 | 管理人員、數據科學家 | 管理人員、數據科學家 |
成本 | 高 | 低 | 低 |
適用場景
Delta適用于云上數據湖數據管理解決方案。如果您存在以下場景,可以使用Delta:
- 實時查詢:數據實時從上游流入Delta,查詢側即可查詢該數據,例如,在CDC場景下,Spark Streaming實時消費binlog時,使用Delta merge功能,實時將上游的數據通過merge更新到Delta Lake,然后可以使用Hive、Spark或Presto實時查詢。同時,由于支持ACID,保證了數據的流入和查詢的隔離性,不會產生臟讀數據。
- 刪除或更新,GDPR(General Data Protection Regulation):通常數據湖方案不支持數據的刪除或更新。如果需要刪除或更新數據,則需要把原始數據清理掉,然后把更新后的數據寫入存儲。而Delta支持數據的刪除或更新。
- 數據實時同步,CDC(Change Data Capture):使用Delta merge功能,啟動流作業,實時將上游的數據通過merge更新到Delta Lake。
- 數據質量控制:借助于Delta Schema校驗功能,在數據導入時剔除異常數據,或者對異常數據做進一步處理。
- 數據演化:數據的Schema并非固定不變,Delta支持通過API 方式改變數據的Schema。
- 實時機器學習:在機器學習場景中,通常需要花費大量的時間用于處理數據,例如數據清洗、轉換、提取特征等等。同時,您還需要對歷史和實時數據分別處理。而Delta簡化了工作流程,整條數據處理過程是一條完整的、可靠的實時流,其數據的清洗、轉換、特征化等操作都是流上的節點動作,無需對歷史和實時數據分別處理。
與開源Delta Lake對比
EMR-Delta Lake豐富了開源Delta Lake的特性,例如對SQL和Optimize的支持等。下表列出了Delta Lake的基本特性,并對比EMR-Delta Lake與開源Delta Lake(0.6.1)。
特性 | EMR-Delta | 開源Delta |
---|---|---|
SQL |
|
|
API |
|
|
Hive connector | 支持 | 支持 |
Presto connector | 支持 | 支持 |
Parquet | 支持 | 支持 |
ORC | 不支持 | 不支持 |
文本格式 | 不支持 | 不支持 |
Data Skipping | 支持 | 不支持 |
ZOrder | 支持 | 不支持 |
Native DeltaLog | 支持 | 不支持 |