Apache Hudi 0.7.0版本重磅發布


重點特性

1. Clustering

0.7.0版本中支持了對Hudi表數據進行Clustering(對數據按照數據特征進行聚簇,以便優化文件大小和數據布局),Clustering提供了更靈活地方式增加文件大小,有了Clustering特性,便可更快速地攝取數據,然后聚簇為更大的文件,實驗數據表明查詢性能可以提升34倍,文件數可以減少1020倍;另外Clustering對於查詢側優化也很明顯,在查詢時通常會基於字段進行Clustering,通過完全跳過一些文件來極大提升查詢性能,這與雲數倉Snowflake提供的Clustering功能非常類似,我們非常高興地宣稱這個特性在0.7.0版本中完全開源免費。

想要了解更多Clustering細節,可以參考RFC-19,可以查閱這些配置來在你的數據管道中啟用Clustering,現在Hudi支持同步和異步的Clustering模式。

2. Metadata表

Hudi項目始於Uber,開始是基於HDFS實現的數據湖,對於雲上對象存儲的數據湖性能不如HDFS。在0.7.0版本,我們解決了該問題,即支持了內部Metadata表,此表可存儲索引數據,其他元數據信息等。

Metadata表的實現使用了Hudi MOR表,這意味着像其他任何Hudi表一樣,可以被壓縮(Compaction)、清理(Clean)、增量更新(incrementally updated)。 而且與其他項目中的類似實現不同,我們選擇將文件列表等信息索引為HFile格式(格式可插拔),HFile提供了很好的點查性能,可以高效獲取分區文件列表等信息。

在0.7.0版本中,在寫入端配置hoodie.metadata.enable=true即可構建Metadata表,這樣后續操作將不再調用fs.listStatus()接口,我們引入了一種同步機制來保證對數據timeline中進行的文件新增/刪除操作都會同步到Metadata表。

測試有25W個文件的表,Metadata表相比使用Spark並發Listing要快2~3倍,更多設計細節可查閱RFC-15,其他Metadata表相關配置可參考這里,提供了參數以便在生產環境中安全使用該特性。

3. Flink/Java客戶端

Hudi最開始設計時依賴Spark,但隨着項目成為Apache頂級項目,我們意識到需要抽象內部表格式、表服務、寫入層的代碼以支持更多的引擎。在0.7.0版本,我們完成了寫入層的解耦,添加了Flink和Java客戶端,現在你可以使用HoodieFlinkStreamer來消費Kafka中的數據,以寫入Hudi的COW表中。

4. 寫入端優化

  • Spark3支持;0.7.0版本支持使用Spark3進行寫入和查詢,請注意使用scala 2.12版本的hudi-spark-bundle包
  • 並行Listing;我們已將所有List操作移至HoodieTableMetadata接口下,該接口可以多線程/Spark並行執行,該優化可以在未開啟Metadata表時提升清理、壓縮性能。
  • Kafka Commit Callbacks;0.7.0添加了HoodieWriteCommitKafkaCallback接口,當每次進行commit后可以向Kafka中發送事件,以此來觸發派生/ETL數據管道,類似Apache Airflow中的Sensors
  • Insert Overwrite/Insert Overwrite Table;0.7.0版本中新增了這兩種操作類型,主要用於批處理ETL作業,該作業通常會在每次運行時覆蓋整個表/分區。考慮到這些操作可以批量替換目標表,因此這些操作比upsert更合適,請查看[示例](/docs/ quick-start-guide.html#insert-overwrite-table)。
  • 刪除分區支持:對於使用WriteClient/RDD級別API的用戶,Hudi提供了一個新的API來刪除整個分區,而不是采用記錄級別刪除方式。
  • 新增DefaultHoodieRecordPayload解決亂序問題;當前默認的OverwriteWithLatestAvroPayload將覆蓋存儲中已有的值,即使使用較舊值進行upsert。0.7.0版本添加了一個新的DefaultHoodieRecordPayload和一個有效負載配置hoodie.payload.ordering.field來指定一個字段,可以將傳入的upsert記錄與已存儲的記錄進行比較,以決定是否覆蓋。推薦用戶使用這種更新、更靈活的Payload模型。
  • Hive同步;支持使用SlashEncodedHourPartitionValueExtractor同步小時分區至Hive中。
  • 支持IBM雲對象存儲、Open Java 9版本。

5. 查詢端優化

  • MOR增量查詢(Spark Datasource),0.7.0版本支持使用Spark datasource增量查詢MOR表,在后續版本中會繼續加強和重構該特性。
  • Metadata表支持File Listings,用戶還可以將元數據表用於以下查詢端,對於Hive,設置hoodie.metadata.enable = true會話
    屬性,對於使用SparkSQL查詢注冊的Hive表,請使用參數--conf spark.hadoop.hoodie.metadata.enable = true來允許從元數據中獲取分區的文件列表,而非使用File Listing。

貢獻者

prashantwasonTrevor-zhangsatishkothanbalajeewangxianghuhddongnsivabalanxushiyancdmikechengaryli1019kwondwsreeram26chuangehhzhedoubushishimodi95linshan-maKarl-WangSKbvaradarliujinhui1994shenh062326xushiyanpratyakshsharmaafilipchikKaiuxlw309637554vinothchandardugenkui03leesfyanghuarmpiferhj2016guykhazmabhasudhahotienvun3nashv3nkateshpengzhiwei2018yui2010jshmchenxidanny0405yui2010lichang-bdnbalajeeumehrot2


免責聲明!

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



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