Apache Hudi 0.7.0版本重磅發佈

重點特性

1. Clustering

0.7.0版本中支持了對Hudi表數據進行Clustering(對數據按照數據特徵進行聚簇,以便優化文件大小和數據佈局),Clustering提供了更靈活地方式增長文件大小,有了Clustering特性,即可更快速地攝取數據,而後聚簇爲更大的文件,實驗數據代表查詢性能能夠提高34倍,文件數能夠減小1020倍;另外Clustering對於查詢側優化也很明顯,在查詢時一般會基於字段進行Clustering,經過徹底跳過一些文件來極大提高查詢性能,這與雲數倉Snowflake提供的Clustering功能很是相似,咱們很是高興地宣稱這個特性在0.7.0版本中徹底開源免費。html

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

2. Metadata表

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

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

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

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

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多線程

相關文章
相關標籤/搜索