認識 Delta Lake

語言: CN / TW / HK

百花齊放的大數據生態

17,18是計算引擎火熱的兩年,19年已然是紅海了。計算引擎中的王者是Spark,綜合指標最好,生態也好,當其他引擎還在ETL,交互查詢,流上廝殺時,Spark已經在AI領域越走越遠。

​對比明顯的是,計算層的上層和下層在17,18年卻乏善可陳。但是到19年整個局勢開發生變化,向下走是存儲層Delta Lake耀眼奪目,解決了原先數倉的諸多痛點,讓數倉進化到數據湖。向上走是交互應用層的Linkis一馬當先,形成交互標準,粘合周邊生態,很好的銜接了應用交互層和計算引擎層的銜接。

問題重重的數據存儲層

前面我們提到,早先基於Hive的數倉或者傳統的文件存儲形式(比如Parquet/ORC),都存在一些長期難以解決的問題:

  • 小文件的問題
  • 併發讀寫問題
  • 有限的更新支持
  • 海量元數據(例如分區)導致Hive metastore不堪重負

細節展開的話,你會發現每一個問題又會引發眾多應用場景層面的問題。

比如併發讀寫還有更新問題讓實時數倉的實現變得很困難。小文件問題需要我們自己寫合併代碼,並且在合併過程中還會造成數據不可讀的問題。如此種種不一而足。

為了解決這些先天不足的問題,我們只能通過複雜的架構設計來解決這些問題(美其名曰lambda架構)。比如為了解決先天不足的更新問題,我們可能需要先將數據寫入一個其他的系統(如HBase),然後再將HBase導出成Parquet文件/Hive表供下游使用。在複雜的流程(超長的Pipeline)運行的過程中,還會不斷涉及到Schema的變換以及磁盤的讀取,所以架構複雜了不僅僅會導致運維成本高企,CPU/IO浪費也就變得異常嚴重。

其實上面這些問題的根源,都是因為存儲層不給力,為了曲線救國,我們無奈通過架構來彌補。Delta Lake單刀直入,直接解決存儲層的問題,帶來的益處就是極大的簡化我們的架構設計,簡化運維成本,降低服務器成本。

Delta Lake 生之逢時

天下苦傳統數倉久已,Delta Lake 橫空出世,那麼它是如何解決上面的存儲層問題呢?我列舉了如下幾個重要的特性:

以元數據也是大數據思想武裝自己,設計了基於HDFS存儲的元數據系統,解決metastore不堪重負的問題。

支持更多種類的更新模式,比如Merge/Update/Delete等操作,配合流式寫入或者讀取的支持,讓實時數據湖變得水到渠成。

流批操作可以共享同一張表版本概念,可以隨時回溯,避免一次誤操作或者代碼邏輯而無法恢復的災難性後果。

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。

和Hive如何整合

因為慣性以及歷史的積累,大家還是希望能像使用hive那樣使用delta,而不是去使用spark的datasource API。截止到筆者寫這些文字之前,官方還沒有支持。不過官方透露阿里的同學已經在做這塊的整合。另外最近版本的Delta Lake已經通過Manifests機制允許比如Presto之類的讀取數據了。

競爭對手

Apache Delta目前主要的競爭對手是Apache Hudi 以及 Apache IceBerg。我們統稱為數據湖三駕馬車。最後誰能走出來,拭目以待了。對於這三者之間總結性質的區別和看法,我引用邵賽賽的一段話,我覺得他總結的足夠好了:

Iceberg 的設計初衷更傾向於定義一個標準、開放且通用的數據組織格式,同時屏蔽底層數據存儲格式上的差異,向上提供統一的操作 API,使得不同的引擎可以通過其提供的 API 接入;Hudi 的設計初衷更像是為了解決流式數據的快速落地,並能夠通過 upsert 語義進行延遲數據修正;Delta Lake 作為 Databricks 開源的項目,更側重於在 Spark 層面上解決 Parquet、ORC 等存儲格式的固有問題,並帶來更多的能力提升。他們都提供了 ACID 的能力,都基於樂觀鎖實現了衝突解決和提供線性一致性,同時相應地提供了 time travel 的功能。

因為引用限制的問題,大家可以看看原文。

=========

歡迎大家關注我公眾號 【祝威廉】