Hudi
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)和日志服務SLS等日志數據至Hudi中,同時也支持實時同步數據庫Binlog產生的變更數據。
Hudi優化了數據寫入過程中產生的小文件。因此,相比其他傳統的文件格式,Hudi對HDFS文件系統更加的友好。
近實時數據分析
Hudi支持多種數據分析引擎,包括Hive、Spark、Presto和Impala。Hudi作為一種文件格式,不需要依賴額外的服務進程,在使用上也更加的輕量化。
增量數據處理
Hudi支持Incremental Query查詢類型,您可以通過Spark Streaming查詢給定COMMIT后發生變更的數據。Hudi提供了一種消費HDFS變化數據的能力,可以用來優化現有的系統架構。