天天看點

hudi系列-檔案布局(file layout)概念檔案命名

概念

hudi的檔案布局是能實作增量查詢、資料更新等特性的基礎,每個hudi表有一個固定的目錄,存放中繼資料(.hoodie)以及資料檔案,其中資料檔案可以以分區方式進行劃分,每個分區有多個資料檔案(基礎檔案和日志檔案),這些資料檔案在邏輯上被組織為檔案組、檔案分片

  • 基礎檔案(base file):列式存儲的資料檔案,可以是orc,hfile,parquet格式,預設是parquet
  • 日志檔案(log file):行存儲的資料檔案,為avro格式,儲存的是資料的變更日志(redo log),隻是mor表才有,會定期與base file進行合并
  • 檔案組(file group):同一分區下,具有相同的fileId的所有basefiles+logfiles集合,一個分區可以有多個檔案組
  • 檔案切片(file slice):同一分區下,具有相同fileId以及相同instant的basefile + logfiles集合。即一個檔案組由N個檔案切片組成,每個一個檔案切片中basefile最多一個,logfiles大于等于0個
hudi系列-檔案布局(file layout)概念檔案命名

上面的示例中,2023-02-15這個分區下有一個檔案組,檔案中組中有3個檔案切片,其中一個隻有log檔案,一個隻有base檔案。

檔案命名

base檔案和log檔案都有固定的命名格式,兩者比較接近

base檔案:
<fileId>_<writeToken>_<instant>.<fileExtension>
log檔案:
.<fileId>_<instant>.<fileExtension>.<version>_<writeToken>
writeToken:
<taskPartitionId>-<stageId>-<taskAttemptId>
           
  • fileId:随便生成的uuid
  • writeToken:寫token用來辨別某一次IO操作,表示是哪個寫任務的第幾次寫
  • fileExtension:檔案擴充名,base檔案的預設為"parquet",log檔案的預設為"log"
  • version:日志版本,遞增
  • taskPartitionId:寫task的序号,[0,stageId)
  • stageId:寫算子的并行度
  • taskAttemptId:寫task的重試次數

hudi采用的是多版本控制機制(MVCC),通過壓縮動作合并log檔案和base檔案,生成新的檔案切片;通過清理動作來删除過舊的檔案切片,回收檔案系統空間。

繼續閱讀