第一部分 知識準備

?家在學習hudi的(de)(de)時候,上?這(zhe)張圖(tu)?定是(shi)(shi)最先看(kan)到的(de)(de),也是(shi)(shi)看(kan)到最多的(de)(de),但是(shi)(shi)每次(ci)看(kan)到這(zhe)張圖(tu),相(xiang)信?家都有共(gong)同(tong)的(de)(de)疑問:TimeLine是(shi)(shi)啥?Commit是(shi)(shi)啥?這(zhe)些東?結合在?起如(ru)何實現(xian)hudi的(de)(de)準實時查詢,如(ru)何實現(xian)HUDI的(de)(de)CRUD語義,本(ben)篇?章我們以Spark On Hudi為例,通過分析(xi)Spark On Hudi的(de)(de) UpSert流程,深?理解Hudi的(de)(de)內部機制。
?、什么是TimeLine
個?理解TimeLine是將?戶感(gan)興(xing)趣(qu)的(de)(de),針對對Hudi表的(de)(de)變更操(cao)(cao)作,從時間維(wei)度上連接起來,?戶可以通過(guo)timeline找到某個時間范圍內(nei)??感(gan)興(xing)趣(qu)操(cao)(cao)作的(de)(de)元(yuan)數據,?如數據的(de)(de)增加/修改(gai)/刪除(chu),或(huo)者由Hudi后臺運?的(de)(de)clean/compact/clustering操(cao)(cao)作。所(suo)以TimeLine是由?些在時間維(wei)度上有(you)先后關系的(de)(de),對hudi表有(you)更新(xin)的(de)(de)操(cao)(cao)作的(de)(de)元(yuan)數據的(de)(de)集合,在hudi的(de)(de)源碼中可以隨(sui)處看(kan)到創建TimeLine的(de)(de)操(cao)(cao)作,?如

以上代(dai)碼就是將hudi表未完成的Compact操(cao)作過濾(lv)出來,并創建新的TimeLine 。
TimeLine主要由instances、details和metaClient組成
(?)instances就是對hudi表操作的集合,TimeLine會掃描hudi表的.hoodie路徑下的擁有合法擴展名的所有?件,并創建對應的HoodieInstance,最后加?到instances集合
HoodieInstance就是某個時間點對hoodie表的修改操作,每個HoodieInstance都有針對的操作以及所屬的狀態
HoodieInstance常?的操作有:commit、deltacommit、clean、rollback、compaction
HoodieInstance對應的狀態有:REQUESTED、INFLIGHT、COMPLETED、INVALID
不(bu)同的操(cao)作以及狀(zhuang)態(tai)的組合對(dui)應(ying)了不(bu)同的instance?件名,如下:

(?)details是(shi)?個函數(shu)成(cheng)員,定(ding)義了怎(zen)么(me)從(cong)給定(ding)的instance中讀取元數(shu)據內容

(三)metaClient?于獲取元數(shu)據位于的?件(jian)系統以及路徑
?、表存儲結構
下?我們來梳理下hudi中與表存儲結構相關的概念:Partition、FileGroup、FileID、Slice、BaseFile、
LogFile等(deng)概念:
(?)hudi表根據partition進?分區,和所有流?的OLAP查詢引擎數據存儲?式?樣,根據分區減少
數據的訪問量
(?)partition下以?件的形式保存了hudi表數據,不同表類型保存的?件形式不?樣。?個分區下的
數據?般需要分為若??件(和Hive?樣)。
(三)COW表(biao)數據在(zai)BaseFile中,?MOR表(biao)在(zai)BaseFile和LogFile?件中


實際的(de)?產環境如圖所示(shi)

(四)為了?持Hudi表的修改操作,?件有不同的版本,每個版本稱為slice,?個?件所有的slice(版本)組合起來就是?個FileGroup。
總結?下,?個hudi表由不同的partition組成,?個partition中的數據分散在不同的FileGroup中,FileGroup通過FileGroupID標識,FileGroupID由partitionPath以及FileID組成。FileGroup由不同的slice組成,slice表示不同時間提交的數據版本,COW的slice由BaseFile組成,MOR的slice由
BaseFile+LogFile組成,?個FileGroup下的slice擁有(you)相同的FileId,通過FileId+instanceTime可以定位到?個具體(ti)的BaseFile或者FileGroup。
Copy On Write表(biao)


接下(xia)來我們再把這些概念(nian)串(chuan)起來,看看不同表類(lei)型upsert的整(zheng)體流程


