重磅 | Apache Spark 社群期待的 Delta Lake 開源了
本文原文 (點選下面 閱讀原文 即可進入) https://www.iteblog.com/archives/2545.html
2019年4月24日在美國舊金山召開的 Spark+AI Summit 2019 會上,Databricks 的聯合創始人及 CEO Ali Ghodsi 宣佈將 Databricks Runtime 裡面的 Delta Lake 基於 Apache License 2.0 協議開源。 Delta Lake 是一個儲存層,為 Apache Spark 和大資料 workloads 提供 ACID 事務能力,其通過寫和快照隔離之間的樂觀併發控制(optimistic concurrency control),在寫入資料期間提供一致性的讀取,從而為構建在 HDFS 和雲端儲存上的資料湖(data lakes)帶來可靠性。 Delta Lake 還提供內建資料版本控制,以便輕鬆回滾。 目前 Delta Lake 專案地址為 https://delta.io/,程式碼維護地址 https://github.com/delta-io/delta。
本次會議的視訊,關注 iteblog_hadoop 公眾號,並回復 detla 獲取本視訊的高清版下載地址。
為什麼需要 Delta Lake
現在很多公司內部資料架構中都存在資料湖,資料湖是一種大型資料儲存庫和處理引擎。 它能夠儲存大量各種型別的資料,擁有強大的資訊處理能力和處理幾乎無限的併發任務或工作的能力,最早由 Pentaho 首席技術官詹姆斯迪克森在2011年的時候提出。 雖然資料湖在資料範圍方面邁出了一大步,但是也面臨了很多問題,主要概括如下:
-
資料湖的讀寫是不可靠的。 資料工程師經常遇到不安全寫入資料湖的問題,導致讀者在寫入期間看到垃圾資料。 他們必須構建方法以確保讀者在寫入期間始終看到一致的資料。
-
資料湖中的資料質量很低。 將非結構化資料轉儲到資料湖中是非常容易的。 但這是以資料質量為代價的。 沒有任何驗證模式和資料的機制,導致資料湖的資料質量很差。 因此,努力挖掘這些資料的分析專案也會失敗。
-
隨著資料的增加,處理效能很差。 隨著資料湖中儲存的資料量增加,檔案和目錄的數量也會增加。 處理資料的作業和查詢引擎在處理元資料操作上花費大量時間。 在有流作業的情況下,這個問題更加明顯。
-
資料湖中資料的更新非常困難。 工程師需要構建複雜的管道來讀取整個分割槽或表,修改資料並將其寫回。 這種模式效率低,並且難以維護。
由於存在這些挑戰,許多大資料專案無法實現其願景,有時甚至完全失敗。 我們需要一種解決方案,使資料從業者能夠利用他們現有的資料湖,同時確保資料質量。 這就是 Delta Lake 產生的背景。
Delta Lake 開源專案介紹
Delta Lake 很好地解決了上述問題,以簡化我們構建資料湖的方式。 Delta Lake 提供以下主要功能:
如果想及時瞭解Spark、Hadoop或者HBase相關的文章,歡迎關注微信公眾號:iteblog_hadoop
支援 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 與他們現有的資料管道一起使用,僅需要做一些細微的修改。 比如我們之前將處理結果儲存成 Parquet 檔案,如果想使用 Delta Lake 僅僅需要做如下修改: