Apache Hudi 0.9.0版本重磅發布!更強大的流式數據湖平台


1. 重點特性

1.1 Spark SQL支持

0.9.0 添加了對使用 Spark SQL 的 DDL/DML 的支持,朝着使所有角色(非工程師、分析師等)更容易訪問和操作 Hudi 邁出了一大步。 用戶現在可以使用 CREATE TABLE....USING HUDICREATE TABLE .. AS SELECT 語句直接在 Hive 等目錄中創建和管理表。 然后用戶可以使用 INSERTUPDATEMERGE INTODELETE 語句來操作數據。 此外,INSERT OVERWRITE 語句可用於覆蓋現有批處理 ETL 管道的表或分區中的現有數據。 有關更多信息,請在此處單擊 SparkSQL 查看文檔。 有關更多實現細節,請參閱 RFC-25

1.2 Flink集成

  • Flink寫入支持 CDC Format的 MOR 表,打開選項 changelog.enabled時,Hudi 會持久化每條記錄的所有更改標志,使用 Flink 的流讀取器,用戶可以根據這些更改日志進行有狀態的計算。請注意當使用異步壓縮時,所有中間更改都合並為一個(最后一條記錄),僅具有 UPSERT 語義。
  • 支持Bulk insert來加載現有表,可以將 write.operation 設置為 bulk_insert 來使用。
  • Flink支持流式讀取 COW 表。
  • 刪除消息默認在流式讀取模式下發出,當 changelog.enabledfalse 時,下游接收 DELETE 消息作為帶有空負載的 Hudi 記錄。
  • Flink寫入現在可以更新歷史分區,即刪除歷史分區中的舊記錄然后在當前分區插入新記錄,打開 index.global.enabled 使用。
  • 通過支持不同的 Hive 版本(1.x、2.x、3.x),大大改善了 Hive 同步。
  • Flink 支持純日志追加模式,在這種模式下沒有記錄去重,對於 COWMOR 表,每次刷新都直接寫入 parquet,關閉 write.insert.deduplicate 以開啟這種模式。

1.3 查詢端改進

  • Hudi 現在可以在 Spark 中注冊為數據源表。
  • 基於Metadata Table的 Spark 讀取改進。
  • 添加了對時間旅行查詢的支持。 請參考時間旅行

1.4 寫入端改進

  • 添加了虛擬鍵支持,用戶可以避免將元字段添加到 Hudi 表並利用現有的字段來填充記錄鍵和分區路徑。 請參考 具體配置來開啟虛擬鍵。

  • Clustering改進

    • DeltaStreamer 和 Spark Streaming 都添加了異步Clustering支持。可以在這篇博客文章中找到更多細節。
    • 增量讀取也適用於Clustering數據。
    • 添加了 HoodieClusteringJob 以作為獨立作業來構建和執行Clustering計划。
    • 添加了一個配置(hoodie.clustering.plan.strategy.daybased.skipfromlatest.partitions)以在創建Clustering計划時跳過最近的 N 個分區。
  • 增強 Bulk_Insert模式(新增行寫入器模式),並缺省打開,用戶可以使用行寫入器模式以獲得更好的性能。

  • 在 HiveSyncTool 中添加了對 HMS 的支持。 HMSDDLExecutor 是一個 DDLExecutor 實現,基於使用 HMS 的 HMS apis 直接用於執行所有 DDL 。

  • Spark 引擎中添加了預提交驗證器框架。 用戶可以利用該框架來添加驗證給定提交的文件是否都存在,或是否已經刪除所有無效文件等。

    這些可以通過設置 hoodie.precommit.validators=<逗號分隔的驗證器類名稱列表> 來配置。 用戶還可以通過擴展抽象類 SparkPreCommitValidator 並覆蓋此方法來提供自己的實現。

  • 用戶可以選擇刪除用於生成分區路徑的字段(hoodie.datasource.write.drop.partition.columns),以支持使用BigQuery系統查詢Hudi快照。

  • 支持華為雲、百度雲、金山雲對象存儲。

  • 添加了對delete_partition操作的支持,用戶可以在需要時利用它刪除舊分區。

  • ORC格式支持,現在用戶可以指定存儲格式為ORC,注意現在暫時只支持Spark查詢。

  • Hudi 使用不同類型的可溢出映射,用於內部處理合並(壓縮、更新甚至 MOR 快照查詢)。 在 0.9.0 中,我們添加了對 bitcask默認選項的壓縮支持,並引入了由 RocksDB 支持,它可以在大批量更新或處理大型基本文件時性能更高。

  • 增強對未提交的數據的自動清理,該增強在雲存儲上性能更優,具體來說是新增了一種新的標記機制,利用時間線服務器對底層存儲執行集中協調的文件標記批量讀/寫。 你可以使用這個配置來啟用,並在這個博客上了解更多。

1.5 DeltaStreamer改進

  • JDBC Source 可以采用提取 SQL 語句並從支持 JDBC 的源中增量獲取數據。 這對於例如從 RDBMS 源讀取數據時很有用。 請注意,這種方法可能需要定期重新引導以確保數據一致性,盡管在基於 CDC 的方法上操作要簡單得多。
  • SQLSource 使用 Spark SQL 語句從現有表中提取數據,對於基於 SQL 的簡單回填用例非常有用,例如:過去 N 個月只回填一列。
  • S3EventsHoodieIncrSourceS3EventsSource 有助於從 S3 讀取數據,可靠且高效地將數據攝取到 Hudi。 現有使用 DFSSource 的方法是使用文件的最后修改時間作為檢查點來拉入新文件,但是如果大量文件具有相同的修改時間,則可能會遇到丟失一些要從源讀取的文件的問題。 這兩個源(S3EventsHoodieIncrSource 和 S3EventsSource)通過利用從源存儲桶訂閱文件事件的 AWS SNS 和 SQS 服務,共同確保將數據從 S3 可靠地攝取到 Hudi。
  • 除了使用 DeltaStreamer 使用常規偏移格式(topic_name,partition_num:offset,partition_num:offset,....),我們還為 kafka 源提取數據添加了兩種新格式,即基於時間戳和組消費者偏移量。
  • 添加了在 deltastreamer 中使用模式提供程序在模式注冊表提供程序 url 中傳遞基本身份驗證憑據的支持。
  • hudi-cli 的一些改進,例如SCHEDULE COMPACTIONRUN COMPACTION語句,以便輕松在 Hudi 表上調度和運行Compaction、Clustering。

2. 遷移指南

  • 如果從 0.5.3 之前的版本遷移,還請檢查下面每個后續版本的升級說明。
  • Hudi 在 0.9.0 中添加了更多表屬性,以幫助將現有的 Hudi 表與 spark-sql 結合使用。 為了順利地遷移,這些屬性添加到 hoodie.properties 文件中。 每當 Hudi 使用較新的表版本啟動時,即 2(或從 0.9.0 之前移動到 0.9.0),升級步驟將自動執行。 這個自動升級步驟對於每個 Hudi 表只會發生一次,因為hoodie.table.version 將在升級完成后在屬性文件中更新。
  • 同樣如果某些用戶想要將 Hudi 從表版本 2 降級到 1 或從 Hudi 0.9.0 移動到 0.9.0 之前,則添加了用於降級的命令行工具(command - downgrade),需要使用0.9.0版本中的hudi-cli工具。
  • 在此版本中我們添加了一個新框架來跟蹤代碼中的配置屬性,不再使用包含屬性名稱和值的字符串變量。 這一舉措有助於我們自動生成配置文檔。雖然我們仍然支持舊的字符串變量,但鼓勵用戶使用新的 ConfigProperty 配置項。在大多數情況下,它就像在相應的替代方法上調用 .key().defaultValue() 一樣簡單。 例如 RECORDKEY_FIELD_OPT_KEY 可以替換為 RECORDKEY_FIELD_NAME.key()

3. 感謝

感謝參與0.9.0版本的所有貢獻者,歡迎廣大數據湖愛好者加入Apache Hudi社區,歡迎star & fork https://github.com/apache/hudi

4. 源碼下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM