一、Timeline
Hudi 的核心是維護不同時間對表執行的所有操作的事件表,這有助於提供表的即時視圖,同時還有效地支持按到達順序進行數據檢索。
Hudi 包含以下組件∶
1)Instant action∶在表上的操作類型
2)Instant time∶ 操作開始的一個時間戳,該時間戳會按照開始時間順序單調遞增
3)state∶即時狀態
Hudi 保證在時間軸上執行的操作都是原子性的,所有執行的操作包括∶
1)commits∶原子的寫入一張表的操作
2)cleans∶后台消除了表中的舊版本數據,即表中不在需要的數據
3)delta_commit增量提交,將一批數據原子寫入到 MergeOnRead表中,並且只記錄到增量日志中
4)compaction∶后台協調 Hudi 中的差異數據
5)rollback∶回滾,刪除在寫入過程中的數據
6)savepoint∶將某些文件標記"已保存",以便清理數據時不會刪除它們,一般用於表的還原,可以將數據還原到某個時間點
任何操作都可以處於以下狀態
1)Requested∶表示已安排操作行為,但是尚未開始
2)Inflight∶表示正在執行當前操作
3)Completed∶表示已完成操作
二、File management
Hudi將表組織成 DFS上基本路徑下的目錄結構。與hive類似,有相應的分區,每個分區均有唯一標示。
在每個分區內,有多個數據組,每個數據組包含幾個segment,其中segment包含基本文件和日志文件。Hudi采用 MVCC設計,其中壓縮操作將日志文件和基本數據文件合並成新的文件片,將未使用的文件片去除。
三、索引
Hudi通過使用索引機制,生成 hoodie密鑰映射對應文件ID,從而提供高效 upsert 操作。
四、表類型
1)Copy on Write∶僅使用列式存儲,例如 parquet。僅更新版本號,通過寫入過程中執行同步合並來重寫文件
2)Merge on Read∶基於列式存儲(parquet)和行式存儲(arvo)結合的文件更始進行存儲。更新記錄到增量文件,壓縮同步和異步生成新版本的文件
五、查詢類型
1)快照查詢(Snapshot Queries)∶查詢操作將查詢最新快照的表數據。如果是 Merge on Read類型的表,它將動態合並最新文件版本的基本數據和增量數據用於顯示查詢。如果是 Copy On Write 類型的表,它直接查詢 parquet 表,同時提供upsert/delete 操作.
2)增量查詢(Incremental Queries)∶查詢只能看到寫入表的新數據。這有效的提供了 change streams 來啟用增量數據管道。
3)優化讀查詢(Read Optimized Queries)∶ 查詢將查看給定提交/壓縮操作表的最新快 照
4)表查詢異同:快照查詢(實時查詢)數據延遲更低,查詢延遲更高(合並列式 + 基於行的增量);優化讀查詢:數據延遲高,查詢性能低(原始列式存儲)