Hudi介紹
Hudi介紹
Hudi是一種數(shù)據(jù)湖的存儲格式,在Hadoop文件系統(tǒng)之上提供了更新數(shù)據(jù)和刪除數(shù)據(jù)的能力以及消費變化數(shù)據(jù)的能力。支持多種計算引擎,提供IUD接口,在HDFS的數(shù)據(jù)集上提供了插入更新和增量拉取的流原語。
- Hudi結(jié)構(gòu)
Hudi結(jié)構(gòu)如左圖所示。
- Hudi特性介紹
1、ACID事務(wù)能力,支持實時入湖和批量入湖。
2、多種視圖能力(讀優(yōu)化視圖/增量視圖/實時視圖),支持快速數(shù)據(jù)分析。
3、MVCC設(shè)計,支持數(shù)據(jù)版本回溯。
4、自動管理文件大小和布局,以優(yōu)化查詢性能準實時攝取,為查詢提供最新數(shù)據(jù)。
5、支持并發(fā)讀寫,基于snapshot的隔離機制實現(xiàn)寫入時可讀取。
6、支持原地轉(zhuǎn)表,將存量的歷史表轉(zhuǎn)換為Hudi數(shù)據(jù)集。
- Hudi關(guān)鍵技術(shù)和優(yōu)勢
1、可插拔索引機制:Hudi提供多種索引機制,可以快速完成對海量數(shù)據(jù)的更新和刪除操作。
2、良好的生態(tài)支持:Hudi支持多種數(shù)據(jù)引擎接入包括Hive、Spark、Flink。
Hudi支持的表及視圖
-
Hudi支持兩種表類型
1、Copy On Write
寫時復(fù)制表也簡稱cow表,使用parquet文件存儲數(shù)據(jù),內(nèi)部的更新操作需要通過重寫原始parquet文件完成。
優(yōu)點:讀取時,只讀取對應(yīng)分區(qū)的一個數(shù)據(jù)文件即可,較為高效。
缺點:數(shù)據(jù)寫入的時候,需要復(fù)制一個先前的副本再在其基礎(chǔ)上生成新的數(shù)據(jù)文件,這個過程比較耗時。且由于耗時,讀請求讀取到的數(shù)據(jù)相對就會滯后。
2、Merge On Read
讀時合并表也簡稱mor表,使用列格式parquet和行格式Avro兩種方式混合存儲數(shù)據(jù)。其中parquet格式文件用于存儲基礎(chǔ)數(shù)據(jù),Avro格式文件(也可叫做log文件)用于存儲增量數(shù)據(jù)。
優(yōu)點:由于寫入數(shù)據(jù)先寫delta log,且delta log較小,所以寫入成本較低。
缺點:需要定期合并整理compact,否則碎片文件較多。由于需要將delta log和老數(shù)據(jù)文件合并,讀取性能較差。
1、Copy On Write
寫時復(fù)制表也簡稱cow表,使用parquet文件存儲數(shù)據(jù),內(nèi)部的更新操作需要通過重寫原始parquet文件完成。
優(yōu)點:讀取時,只讀取對應(yīng)分區(qū)的一個數(shù)據(jù)文件即可,較為高效。
缺點:數(shù)據(jù)寫入的時候,需要復(fù)制一個先前的副本再在其基礎(chǔ)上生成新的數(shù)據(jù)文件,這個過程比較耗時。且由于耗時,讀請求讀取到的數(shù)據(jù)相對就會滯后。
2、Merge On Read
讀時合并表也簡稱mor表,使用列格式parquet和行格式Avro兩種方式混合存儲數(shù)據(jù)。其中parquet格式文件用于存儲基礎(chǔ)數(shù)據(jù),Avro格式文件(也可叫做log文件)用于存儲增量數(shù)據(jù)。
優(yōu)點:由于寫入數(shù)據(jù)先寫delta log,且delta log較小,所以寫入成本較低
缺點:需要定期合并整理compact,否則碎片文件較多。由于需要將delta log和老數(shù)據(jù)文件合并,讀取性能較差。
-
Hudi支持三種視圖,針對不同場景提供相應(yīng)的讀能力
1、Snapshot View
Snapshot View即實時視圖,該視圖提供當前Hudi表最新的快照數(shù)據(jù),即一旦有最新的數(shù)據(jù)寫入Hudi表,通過該視圖就可以查出剛寫入的新數(shù)據(jù)。cow表和mor均支持該視圖能力。
2、Incremental View
Incremental View即增量視圖,該視圖提供增量查詢的能力,可以查詢指定COMMIT之后的增量數(shù)據(jù),可用于快速拉取增量數(shù)據(jù)。
cow表支持該種視圖能力, mor表也可以支持該視圖,但是一旦mor表完成compact操作其增量視圖能力消失。
3、Read Optimized View
Read Optimized View即讀優(yōu)化視圖,該視圖只會提供最新版本的parquet文件中存儲的數(shù)據(jù)。
該視圖在cow表和mor表上表現(xiàn)不同:
對于cow表,該視圖能力和實時視圖能力是一樣的(cow表只用parquet文件存數(shù)據(jù))。
對于mor表,僅訪問基本文件,提供給定文件片自上次執(zhí)行compact操作以來的數(shù)據(jù),可簡單理解為該視圖只會提供mor表parquet文件存儲的數(shù)據(jù),log文件里面的數(shù)據(jù)將被忽略。該視圖數(shù)據(jù)并不一定是最新的,但是mor表一旦完成compact操作,增量log數(shù)據(jù)被合入到了base數(shù)據(jù)里面,這個時候該視圖和實時視圖能力相同。
在Linux客戶端下,使用kafka-broker-info.sh查詢Broker ID與節(jié)點IP的對應(yīng)關(guān)系。