1.数据湖deltalake初识
轉(zhuǎn)載自??1.數(shù)據(jù)湖deltalake初識(shí)
1.delta特性簡(jiǎn)介
Delta Lake是Spark計(jì)算框架和存儲(chǔ)系統(tǒng)之間帶有Schema信息數(shù)據(jù)的存儲(chǔ)中間層。它給Spark帶來了三個(gè)最主要的功能:
第一,Delta Lake使得Spark能支持?jǐn)?shù)據(jù)更新和刪除功能;
第二,Delta Lake使得Spark能支持事務(wù);
第三,支持?jǐn)?shù)據(jù)版本管理,運(yùn)行用戶查詢歷史數(shù)據(jù)快照。
核心特性
ACID事務(wù):為數(shù)據(jù)湖提供ACID事務(wù),確保在多個(gè)數(shù)據(jù)管道并發(fā)讀寫數(shù)據(jù)時(shí),數(shù)據(jù)能保持完整性。
數(shù)據(jù)版本管理和時(shí)間旅行:提供了數(shù)據(jù)快照,使開發(fā)人員能夠訪問和還原早期版本的數(shù)據(jù)以進(jìn)行審核、回滾或重現(xiàn)實(shí)驗(yàn)
可伸縮的元數(shù)據(jù)管理:存儲(chǔ)表或者文件的元數(shù)據(jù)信息,并且把元數(shù)據(jù)也作為數(shù)據(jù)處理,元數(shù)據(jù)與數(shù)據(jù)的對(duì)應(yīng)關(guān)系存放在事務(wù)日志中;
流和批統(tǒng)一處理:Delta中的表既有批量的,也有流式和sink的;
數(shù)據(jù)操作審計(jì):事務(wù)日志記錄對(duì)數(shù)據(jù)所做的每個(gè)更改的詳細(xì)信息,提供對(duì)更改的完整審計(jì)跟蹤;
Schema管理功能:提供自動(dòng)驗(yàn)證寫入數(shù)據(jù)的Schema與表的Schema是否兼容的能力,并提供顯示增加列和自動(dòng)更新Schema的能力;
數(shù)據(jù)表操作(類似于傳統(tǒng)數(shù)據(jù)庫的SQL):合并、更新和刪除等,提供完全兼容Spark的Java/scala API;
統(tǒng)一格式:Delta中所有的數(shù)據(jù)和元數(shù)據(jù)都存儲(chǔ)為Apache Parquet。
Delta的特性實(shí)現(xiàn)是基于事務(wù)日志,比如ACID事務(wù)管理、數(shù)據(jù)原子性、元數(shù)據(jù)處理和時(shí)間旅行等功能。
Delta Lake 說白了就是一個(gè)lib庫
Delta Lake 是一個(gè)lib 而不是一個(gè)service,不同于HBase,他不需要單獨(dú)部署,而是直接依附于計(jì)算引擎的。目前只支持Spark引擎。這意味什么呢?Delta Lake 和普通的parquet文件使用方式?jīng)]有任何差異,你只要在你的Spark代碼項(xiàng)目里引入delta包,按標(biāo)準(zhǔn)的Spark datasource操作即可,可謂部署和使用成本極低。
?
Delta Lake真實(shí)內(nèi)容幕
Parquet文件 + Meta 文件 + 一組操作的API = Delta Lake.
所以Delta沒啥神秘的,和parquet沒有任何區(qū)別。但是他通過meta文件以及相應(yīng)的API,提供眾多特性功能的支持。在Spark中使用它和使用parquet的唯一區(qū)別就是把format parquet換成detla。
上圖可以看出,數(shù)據(jù)湖目的實(shí)一站式提供各種數(shù)據(jù)服務(wù)。
?
2.delta測(cè)試
采用的Spark 3.0版本,delta是0.7版本進(jìn)行測(cè)試,首先是導(dǎo)入依賴:
<dependency> <groupId>io.delta</groupId> <artifactId>delta-core_2.12</artifactId> <version>0.7.0</version></dependency>spark使用delta也很簡(jiǎn)單,就如使用json,csv等數(shù)據(jù)格式一樣,只需要在format函數(shù)傳入delta字符串就可以了。比如創(chuàng)建一張表,scala的表達(dá)如下:
val data = spark.range(0, 5)data.write.format("delta").save("tmp/delta-table")schema信息,他自己會(huì)從dataframe中推斷出來。
讀取一張表
spark.read.format("delta").load("tmp/delta-table").show()?
3.總結(jié)
本文的目標(biāo)只是讓大家對(duì)delta有個(gè)大致的認(rèn)識(shí)。其實(shí),delta lake的api對(duì)于spark來說基本是一致的,沒啥變動(dòng)。delta底層是完全基于spark的,而且可以支持實(shí)時(shí)和離線,對(duì)于多讀少更新,多批次更新的場(chǎng)景也是可以的。
總結(jié)
以上是生活随笔為你收集整理的1.数据湖deltalake初识的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.数据湖DeltaLake之DDL操作
- 下一篇: 案例分析 | 由Decimal操作计算引