Apache Hudi是一種資料湖的儲存格式,在Hadoop檔案系統之上提供了更新資料和刪除資料的能力以及消費變化資料的能力。
Hudi表類型
Hudi支援如下兩種表類型:
Copy On Write
使用Parquet格式儲存資料。Copy On Write表的更新操作需要通過重寫實現。
Merge On Read
使用列式檔案格式(Parquet)和行式檔案格式(Avro)混合的方式來儲存資料。Merge On Read使用列式格式存放Base資料,同時使用行式格式存放增量資料。最新寫入的增量資料存放至行式檔案中,根據可配置的策略執行COMPACTION操作合并增量資料至列式檔案中。
針對不同表類型的差異點如下表所示。
Trade-off | Copy On Write | Merge On Read |
Data Latency | 高 | 低 |
Query Latency | 低 | 高 |
Update cost (I/O) | 高(重寫整個Parquet) | Lower(追加到Delta Log) |
Parquet File Size | 小 (高更新(I/O)開銷) | 大(低更新開銷) |
Write Amplification | 高(寫放大較高) | 低(取決於合并策略) |
Hudi查詢類型
Hudi支援如下三種查詢類型:
Snapshot Queries
可以查詢最新COMMIT的快照資料。針對Merge On Read類型的表,查詢時需要線上合并列存中的Base資料和日誌中的即時資料;針對Copy On Write表,可以查詢最新版本的Parquet資料。
Copy On Write和Merge On Read表支援該類型的查詢。
Incremental Queries
支援增量查詢的能力,可以查詢給定COMMIT之後的最新資料。
Copy On Write和Merge On Read表支援該類型的查詢。
Read Optimized Queries
只能查詢到給定COMMIT之前所限定範圍的最新資料。Read Optimized Queries是對Merge On Read表類型快照查詢的最佳化,通過犧牲查詢資料的時效性,來減少線上合并日誌資料產生的查詢延遲。
針對不同查詢類型的差異點如下表所示。
Trade-off | Snapshort Queries | Read Optimized Queries |
Data Latency | 低 | 高 |
Query Latency | 對於Merge On Read類型,高 | 低 |
應用情境
近即時資料攝取
Hudi支援插入、更新和刪除資料的能力。您可以即時攝取訊息佇列(Kafka)和Log ServiceSLS等日誌資料至Hudi中,同時也支援即時同步資料庫Binlog產生的變更資料。
Hudi最佳化了資料寫入過程中產生的小檔案。因此,相比其他傳統的檔案格式,Hudi對HDFS檔案系統更加的友好。
近即時資料分析
Hudi支援多種資料分析引擎,包括Hive、Spark、Presto和Impala。Hudi作為一種檔案格式,不需要依賴額外的服務進程,在使用上也更加的輕量化。
增量資料處理
Hudi支援Incremental Query查詢類型,您可以通過Spark Streaming查詢給定COMMIT後發生變更的資料。Hudi提供了一種消費HDFS變化資料的能力,可以用來最佳化現有的系統架構。