天天看點

1.資料湖deltalake初識

1.delta特性簡介

Delta Lake是Spark計算架構和存儲系統之間帶有Schema資訊資料的存儲中間層。它給Spark帶來了三個最主要的功能:

第一,Delta Lake使得Spark能支援資料更新和删除功能;

第二,Delta Lake使得Spark能支援事務;

第三,支援資料版本管理,運作使用者查詢曆史資料快照。

核心特性

  1. ACID事務:為資料湖提供ACID事務,確定在多個資料管道并發讀寫資料時,資料能保持完整性。
  2. 資料版本管理和時間旅行:提供了資料快照,使開發人員能夠通路和還原早期版本的資料以進行稽核、復原或重制實驗
  3. 可伸縮的中繼資料管理:存儲表或者檔案的中繼資料資訊,并且把中繼資料也作為資料處理,中繼資料與資料的對應關系存放在事務日志中;
  4. 流和批統一處理:Delta中的表既有批量的,也有流式和sink的;
  5. 資料操作審計:事務日志記錄對資料所做的每個更改的詳細資訊,提供對更改的完整審計跟蹤;
  6. Schema管理功能:提供自動驗證寫入資料的Schema與表的Schema是否相容的能力,并提供顯示增加列和自動更新Schema的能力;
  7. 資料表操作(類似于傳統資料庫的SQL):合并、更新和删除等,提供完全相容Spark的Java/scala API;
  8. 統一格式:Delta中所有的資料和中繼資料都存儲為Apache Parquet。

Delta的特性實作是基于事務日志,比如ACID事務管理、資料原子性、中繼資料處理和時間旅行等功能。

Delta Lake 說白了就是一個lib庫

Delta Lake 是一個lib 而不是一個service,不同于HBase,他不需要單獨部署,而是直接依附于計算引擎的。目前隻支援Spark引擎。這意味什麼呢?Delta Lake 和普通的parquet檔案使用方式沒有任何差異,你隻要在你的Spark代碼項目裡引入delta包,按标準的Spark datasource操作即可,可謂部署和使用成本極低。

Delta Lake真實内容幕

Parquet檔案 + Meta 檔案 + 一組操作的API = Delta Lake.

是以Delta沒啥神秘的,和parquet沒有任何差別。但是他通過meta檔案以及相應的API,提供衆多特性功能的支援。在Spark中使用它和使用parquet的唯一差別就是把format parquet換成detla。

1.資料湖deltalake初識

上圖可以看出,資料湖目的實一站式提供各種資料服務。

2.delta測試

采用的Spark 3.0版本,delta是0.7版本進行測試,首先是導入依賴:

<dependency>  <groupId>io.delta</groupId>  <artifactId>delta-core_2.12</artifactId>  <version>0.7.0</version></dependency>      

spark使用delta也很簡單,就如使用json,csv等資料格式一樣,隻需要在format函數傳入delta字元串就可以了。比如建立一張表,scala的表達如下:

val data = spark.range(0, 5)data.write.format("delta").save("tmp/delta-table")      

schema資訊,他自己會從dataframe中推斷出來。

讀取一張表

spark.read.format("delta").load("tmp/delta-table").show()      

繼續閱讀