HUDI基礎(chǔ)

什么是Hudi?

image.png

HUDI(Hadoop Upserts Deletes and Incrementals)是一個(gè)開源的數(shù)據(jù)湖工具,用于管理大規(guī)模數(shù)據(jù)湖中的數(shù)據(jù)。

HUDI旨在解決數(shù)據(jù)湖中常見的一些挑戰(zhàn),如數(shù)據(jù)的增量更新、刪除和查詢等。它提供了一套API和工具,可以幫助用戶在數(shù)據(jù)湖中進(jìn)行寫入、更新、刪除和查詢等操作,并提供了高效的數(shù)據(jù)索引和存儲機(jī)制,以加速數(shù)據(jù)的訪問和處理。

HUDI的核心理念是將數(shù)據(jù)分為小的、可修改的單元,稱為"寫時(shí)復(fù)制(copy-on-write)"。當(dāng)數(shù)據(jù)需要更新或刪除時(shí),HUDI會創(chuàng)建一個(gè)新的數(shù)據(jù)文件,而不是直接修改原始數(shù)據(jù)文件。這種設(shè)計(jì)可以保證數(shù)據(jù)的不可變性,同時(shí)提供了高效的增量更新和刪除操作。

HUDI還提供了用于數(shù)據(jù)管理的元數(shù)據(jù)存儲和查詢功能,可以跟蹤數(shù)據(jù)的版本、變更歷史和元數(shù)據(jù)信息。這使得用戶可以輕松地追蹤和管理數(shù)據(jù)的變更,同時(shí)支持time-travel查詢,即可以查詢數(shù)據(jù)在不同時(shí)間點(diǎn)的版本。

Hudi Timeline

Hudi timeline是HUDI用于跟蹤和管理數(shù)據(jù)變更歷史的一種機(jī)制。它記錄了數(shù)據(jù)湖中各個(gè)數(shù)據(jù)集的不同版本和變更操作,以及它們在時(shí)間上的順序。

Timeline的核心概念是HUDI數(shù)據(jù)集的不可變性。每當(dāng)對HUDI數(shù)據(jù)集進(jìn)行寫入、更新或刪除操作時(shí),HUDI會創(chuàng)建一個(gè)新的數(shù)據(jù)文件或目錄,而不是直接修改原始數(shù)據(jù)文件。每個(gè)數(shù)據(jù)文件或目錄都被分配一個(gè)唯一的時(shí)間戳,用于表示它的創(chuàng)建時(shí)間。

Timeline維護(hù)了所有數(shù)據(jù)文件和目錄的時(shí)間戳信息,并按照時(shí)間順序組織它們。這使得HUDI能夠追蹤數(shù)據(jù)集的完整變更歷史,并支持time-travel query。通過Timeline,用戶可以查詢數(shù)據(jù)集在不同時(shí)間點(diǎn)的版本,回溯到過去的數(shù)據(jù)狀態(tài)。

HUDI Timeline還提供了一些其他功能,如支持增量數(shù)據(jù)拉?。╥ncremental data pull)和增量數(shù)據(jù)合并(incremental data merge)。增量數(shù)據(jù)拉取允許用戶只拉取數(shù)據(jù)集中發(fā)生變化的部分,而不必處理整個(gè)數(shù)據(jù)集。增量數(shù)據(jù)合并則可以將多個(gè)HUDI數(shù)據(jù)集合并為一個(gè)數(shù)據(jù)集,并保持?jǐn)?shù)據(jù)的一致性和有序性。

Hudi的Timeline由一系列按時(shí)間順序的Instants組成,Instant有下面三部分:

  • Instant action: 對于Hudi table的操作類型;
  • Instant time:操作發(fā)生時(shí)間戳(比如20190117010349);
  • Instant state: Instant的當(dāng)前狀態(tài)。

Instant Action主要有以下幾種:

  • COMMITS:commit表示將一批記錄原子的寫入到hudi table中;
  • CLEANS:刪除表中不再需要的舊版本文件,后臺活動。
  • DELTA_COMMIT:delta_commit指的是將一批記錄原子寫入 MergeOnRead 類型的表中,其中一些/所有數(shù)據(jù)可以只寫入delta logs。
  • COMPACTION: 將delta logs里的數(shù)據(jù)與parquet data files合并。
  • ROLLBACK:表示commit/delta commit不成功并回滾,刪除在此類寫入期間產(chǎn)生的任何partial data files。
  • SAVEPOINT:將某些file group標(biāo)記為“saved”,這樣cleaner就不會刪除它們。 在發(fā)生災(zāi)難/數(shù)據(jù)恢復(fù)情況時(shí),它有助于將表恢復(fù)到timeline上的某個(gè)點(diǎn)。

Instant State主要有以下幾種:

  • REQUESTED:表示已經(jīng)被scheduled,但尚未啟動的操作。
  • INFLIGHT:表示操作正在進(jìn)行。
  • COMPLETED:表示操作已經(jīng)完成。

Hudi Table/Query Type

在Hudi中,有幾種常見的表類型,用于滿足不同的數(shù)據(jù)管理和處理需求。下面是Hudi中常見的表類型:

  • Copy-on-Write (COW)表:COW表是Hudi最基本的表類型。它采用了寫時(shí)復(fù)制的策略,每次更新操作都會創(chuàng)建一個(gè)新版本的完整數(shù)據(jù)集。新版本以一組新的文件形式存儲,而原始數(shù)據(jù)保持不變。COW表適合那些數(shù)據(jù)寫入一次后多次讀取的場景。
  • Merge-on-Read (MOR)表:MOR表是Hudi引入的一種改進(jìn)型表類型。它采用了基于讀取時(shí)合并的策略。數(shù)據(jù)被組織成基礎(chǔ)文件(base files)和日志文件(log files)?;A(chǔ)文件包含不可變的數(shù)據(jù),而日志文件則記錄了基礎(chǔ)文件的增量更改。在查詢執(zhí)行期間,Hudi會動態(tài)地合并基礎(chǔ)文件和日志文件,以提供一致的數(shù)據(jù)視圖。MOR表適合那些需要頻繁更新和低延遲查詢的場景。


    image.png

在Hudi中,有幾種常見的查詢類型可以用來檢索和分析數(shù)據(jù)。下面是Hudi中常用的查詢類型:

  • Snapshot Query:Snapshot查詢是一種基于數(shù)據(jù)快照(Snapshot)的查詢方式。它可以獲取Hudi表中的某個(gè)commit或compaction的數(shù)據(jù)快照,并以只讀方式進(jìn)行查詢和分析。通過指定特定的時(shí)間戳或快照ID,可以獲取表在該時(shí)間點(diǎn)的一致視圖。
  • Incremental Query:Hudi支持增量查詢,即只查詢某個(gè)commit或compaction以來有變化的數(shù)據(jù)。增量查詢利用Hudi表的增量存儲和索引結(jié)構(gòu),可以快速檢索到最新的變化數(shù)據(jù),避免全表掃描,提高查詢效率。
  • Read Optimized Queries:查詢給定某個(gè)commit或compaction的snapshot。僅暴露file group中的base/columnar文件,不暴漏delta log文件,以期獲得與非Hudi 列存表相同的查詢性能。


    image.png

Hudi File Layout

  • Hudi將數(shù)據(jù)表組織成分布式文件系統(tǒng)上base path下的目錄結(jié)構(gòu)。
  • 表被分割成多個(gè)partition。
  • 在每個(gè)partition內(nèi),文件被組織成file group,由file ID唯一標(biāo)識。
  • 每個(gè)file group包含多個(gè)file slices。
  • 每個(gè)file slice包含在某個(gè)commit/compaction instant生成的base file(.parquet),以及一組delta log(.log.*),這些delta log文件包含了自base file生成以來對base file的插入/更新操作。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、背景 傳統(tǒng)數(shù)倉分為離線和實(shí)時(shí)兩個(gè)部分 離線部分屬于業(yè)務(wù)驅(qū)動,固定的計(jì)算邏輯,通過定時(shí)調(diào)度,最后產(chǎn)出報(bào)表; 實(shí)時(shí)...
    TOTower閱讀 1,555評論 0 1
  • Hudi架構(gòu) 一. 時(shí)間軸(TimeLine) 1.1 時(shí)間軸(TimeLine)概念 Hudi的核心是維護(hù)在不同...
    只是甲閱讀 759評論 0 0
  • Flink 使用介紹相關(guān)文檔目錄 Flink 使用介紹相關(guān)文檔目錄[http://www.itdecent.cn...
    AlienPaul閱讀 13,583評論 4 10
  • [TOC] 數(shù)據(jù)實(shí)時(shí)處理和實(shí)時(shí)的數(shù)據(jù) 實(shí)時(shí)分為處理的實(shí)時(shí)和數(shù)據(jù)的實(shí)時(shí)即席分析是要求對數(shù)據(jù)實(shí)時(shí)的處理,馬上要得到對應(yīng)...
    西北偏北閱讀 1,417評論 0 0
  • 背景 本篇為Hudi概念和特性相關(guān)介紹。依據(jù)于官網(wǎng)和相關(guān)博客資料,融入了個(gè)人理解。內(nèi)容可能會有疏漏,歡迎大家指正和...
    AlienPaul閱讀 13,815評論 0 10

友情鏈接更多精彩內(nèi)容