Spark母公司Databricks數磚將Delta Lake開源了

2019年的Spark Summit大會上,大紅大紫的開源項目Spark背後的獨角獸公司DataBricks宣佈開源了他們的Delta Lake。

Delta Lake誕生背景

很多公司內部數據架構中都有數據湖,數據湖即一種大型數據存儲和處理引擎,能夠存儲大量各種類型的數據,擁有強大的信息處理能力和處理幾乎無限的兵法任務和工作的能力。

然而,自建的數據湖一般面臨很多問題,比如:

  • 數據湖的讀寫是不可靠的。數據工程師經常遇到不安全寫入數據湖的問題,導致讀者在寫入期間看到垃圾數據。他們必須構建方法以確保讀者在寫入期間始終看到一致的數據。
  • 數據湖中的數據質量很低。將非結構化數據轉儲到數據湖中是非常容易的。但這是以數據質量爲代價的。沒有任何驗證模式和數據的機制,導致數據湖的數據質量很差。因此,努力挖掘這些數據的分析項目也會失敗。
  • 隨着數據的增加,處理性能很差。隨着數據湖中存儲的數據量增加,文件和目錄的數量也會增加。處理數據的作業和查詢引擎在處理元數據操作上花費大量時間。在有流作業的情況下,這個問題更加明顯。
  • 數據湖中數據的更新非常困難。工程師需要構建複雜的管道來讀取整個分區或表,修改數據並將其寫回。這種模式效率低,並且難以維護。

Delta Lake針對以上問題,提供以下主要功能

  • 支持 ACID 事務。Delta Lake 在多併發寫入之間提供 ACID 事務保證。每次寫入都是一個事務,並且在事務日誌中記錄了寫入的序列順序。事務日誌跟蹤文件級別的寫入並使用樂觀併發控制,這非常適合數據湖,因爲多次寫入/修改相同的文件很少發生。在存在衝突的情況下,Delta Lake 會拋出併發修改異常以便用戶能夠處理它們並重試其作業。Delta Lake 還提供強大的可序列化隔離級別,允許工程師持續寫入目錄或表,並允許消費者繼續從同一目錄或表中讀取。讀者將看到閱讀開始時存在的最新快照。
  • 模式管理(Schema management)Delta Lake 自動驗證正在被寫的 DataFrame 模式是否與表的模式兼容。表中存在但不在 DataFrame 中的列設置爲 null。如果 DataFrame 有表中不存在的列,則此操作會引發異常。Delta Lake 具有顯式添加新列的 DDL 以及自動更新模式的能力。
  • 可擴展元數據處理。Delta Lake 將表或目錄的元數據信息存儲在事務日誌中,而不是 Metastore 中。這允許 Delta Lake 在恆定時間內列出大型目錄中的文件,同時在讀取數據時非常高效。
  • 數據版本。Delta Lake 允許用戶讀取表或目錄之前的快照。當文件被修改文件時,Delta Lake 會創建較新版本的文件並保留舊版本的文件。當用戶想要讀取舊版本的表或目錄時,他們可以在 Apache Spark 的讀取 API 中提供時間戳或版本號,Delta Lake 根據事務日誌中的信息構建該時間戳或版本的完整快照。這允許用戶重現之前的數據,並在需要時將表還原爲舊版本的數據。
  • 統一流和批處理 Sink。除批量寫入外,Delta Lake 還可用作 Apache Spark structured streaming 的高效流式 sink。結合 ACID 事務和可擴展的元數據處理,高效的流式 sink 現在可以實現大量近實時分析用例,而無需同時維護複雜的流式傳輸和批處理管道。
  • 數據存儲格式採用開源的。Delta Lake 中的所有數據都是使用 Apache Parquet 格式存儲,使 Delta Lake 能夠利用 Parquet 原生的高效壓縮和編碼方案。
  • 記錄更新和刪除。這個功能馬上可以使用。Delta Lake 將支持 merge, update 和 delete 等 DML 命令。這使得數據工程師可以輕鬆地在數據湖中插入/更新和刪除記錄。 由於 Delta Lake 以文件級粒度跟蹤和修改數據,因此它比讀取和覆蓋整個分區或表更有效。
  • 數據異常處理。Delta Lake 還將支持新的 API 來設置表或目錄的數據異常。工程師能夠設置一個布爾條件並調整報警閾值以處理數據異常。當 Apache Spark 作業寫入表或目錄時,Delta Lake 將自動驗證記錄,當數據存在異常時,它將根據提供的設置來處理記錄。
  • 100% 兼容 Apache Spark API。開發人員可以將 Delta Lake 與他們現有的數據管道一起使用,僅需要做一些細微的修改。如下:
//Data Pipeline
dataframe
 .write
 .format("parquet")
 .save("/data")
 
//Delta Lake
dataframe
 .write
 .format("delta")
 .save("/data") 

本質來說,開源還是不開源都是商業行爲決定的。DataBricks肯定不是活雷鋒,但是廣大喫瓜羣衆也肯定會因爲這個開源受益。

附上Delta Lake官宣傳送門

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章