Apache?Hudi的多版本清理服務(wù)徹底講解
Apache Hudi提供了MVCC并發(fā)模型,保證寫入端和讀取端之間快照級(jí)別隔離。在本篇博客中我們將介紹如何配置來管理多個(gè)文件版本,此外還將討論用戶可使用的清理機(jī)制,以了解如何維護(hù)所需數(shù)量的舊文件版本,以使長(zhǎng)時(shí)間運(yùn)行的讀取端不會(huì)失敗。
1. 回收空間以控制存儲(chǔ)成本
Hudi 提供不同的表管理服務(wù)來管理數(shù)據(jù)湖上表的數(shù)據(jù),其中一項(xiàng)服務(wù)稱為Cleaner(清理服務(wù))。 隨著用戶向表中寫入更多數(shù)據(jù),對(duì)于每次更新,Hudi會(huì)生成一個(gè)新版本的數(shù)據(jù)文件用于保存更新后的記錄(COPY_ON_WRITE) 或?qū)⑦@些增量更新寫入日志文件以避免重寫更新版本的數(shù)據(jù)文件 (MERGE_ON_READ)。 在這種情況下,根據(jù)更新頻率,文件版本數(shù)可能會(huì)無限增長(zhǎng),但如果不需要保留無限的歷史記錄,則必須有一個(gè)流程(服務(wù))來回收舊版本的數(shù)據(jù),這就是 Hudi 的清理服務(wù)。
2. 問題描述
在數(shù)據(jù)湖架構(gòu)中,讀取端和寫入端同時(shí)訪問同一張表是非常常見的場(chǎng)景。由于 Hudi 清理服務(wù)會(huì)定期回收較舊的文件版本,因此可能會(huì)出現(xiàn)長(zhǎng)時(shí)間運(yùn)行的查詢?cè)L問到被清理服務(wù)回收的文件版本的情況,因此需要使用正確的配置來確保查詢不會(huì)失敗。
3. 深入了解 Hudi清理服務(wù)
針對(duì)上述場(chǎng)景,我們先了解一下 Hudi 提供的不同清理策略以及需要配置的相應(yīng)屬性,Hudi提供了異步或同步清理兩種方式。在詳細(xì)介紹之前我們先解釋一些基本概念:
- Hudi 基礎(chǔ)文件(HoodieBaseFile):由壓縮后的最終數(shù)據(jù)組成的列式文件,基本文件的名稱遵循以下命名約定:<fileId>_<writeToken>_<instantTime>.parquet。在此文件的后續(xù)寫入中文件 ID 保持不變,并且提交時(shí)間會(huì)更新以顯示最新版本。這也意味著記錄的任何特定版本,給定其分區(qū)路徑,都可以使用文件 ID 和 instantTime進(jìn)行唯一定位。
- 文件切片(FileSlice):在 MERGE_ON_READ 表類型的情況下,文件切片由基本文件和由多個(gè)增量日志文件組成。
- Hudi 文件組(FileGroup):Hudi 中的任何文件組都由分區(qū)路徑和文件ID 唯一標(biāo)識(shí),該組中的文件作為其名稱的一部分。文件組由特定分區(qū)路徑中的所有文件片組成。此外任何分區(qū)路徑都可以有多個(gè)文件組。
4. 清理服務(wù)
Hudi 清理服務(wù)目前支持以下清理策略:
- KEEP_LATEST_COMMITS:這是默認(rèn)策略。該清理策略可確保回溯前X次提交中發(fā)生的所有更改。假設(shè)每 30 分鐘將數(shù)據(jù)攝取到 Hudi 數(shù)據(jù)集,并且最長(zhǎng)的運(yùn)行查詢可能需要 5 小時(shí)才能完成,那么用戶應(yīng)該至少保留最后 10 次提交。通過這樣的配置,我們確保文件的最舊版本在磁盤上保留至少 5 小時(shí),從而防止運(yùn)行時(shí)間最長(zhǎng)的查詢?cè)谌魏螘r(shí)間點(diǎn)失敗,使用此策略也可以進(jìn)行增量清理。
- KEEP_LATEST_FILE_VERSIONS:此策略具有保持 N 個(gè)文件版本而不受時(shí)間限制的效果。當(dāng)知道在任何給定時(shí)間想要保留多少個(gè) MAX 版本的文件時(shí),此策略很有用,為了實(shí)現(xiàn)與以前相同的防止長(zhǎng)時(shí)間運(yùn)行的查詢失敗的行為,應(yīng)該根據(jù)數(shù)據(jù)模式進(jìn)行計(jì)算,或者如果用戶只想維護(hù)文件的 1 個(gè)最新版本,此策略也很有用。
5. 例子
假設(shè)用戶每 30 分鐘將數(shù)據(jù)攝取到 COPY_ON_WRITE 類型的 Hudi 數(shù)據(jù)集,如下所示:
圖1:每30分鐘將傳入的記錄提取到hudi數(shù)據(jù)集中
該圖顯示了 DFS 上的一個(gè)特定分區(qū),其中提交和相應(yīng)的文件版本是彩色編碼的。在該分區(qū)中創(chuàng)建了 4 個(gè)不同的文件組,如 fileId1、fileId2、fileId3 和 fileId4 所示。 fileId2 對(duì)應(yīng)的文件組包含所有 5 次提交的記錄,而 fileId4 對(duì)應(yīng)的組僅包含最近 2 次提交的記錄。
假設(shè)使用以下配置進(jìn)行清理:
hoodie.cleaner.policy=KEEP_LATEST_COMMITS hoodie.cleaner.commits.retained=2
Cleaner 通過處理以下事項(xiàng)來選擇要清理的文件版本:
- 不應(yīng)清理文件的最新版本。
- 確定最后 2 次(已配置)+ 1 次提交的提交時(shí)間。在圖 1 中,commit 10:30 和 commit 10:00 對(duì)應(yīng)于時(shí)間線中最新的 2 個(gè)提交。包含一個(gè)額外的提交,因?yàn)楸A籼峤坏臅r(shí)間窗口本質(zhì)上等于最長(zhǎng)的查詢運(yùn)行時(shí)間。因此如果最長(zhǎng)的查詢需要 1 小時(shí)才能完成,并且每 30 分鐘發(fā)生一次攝取,則您需要保留自 2*30 = 60(1 小時(shí))以來的最后 2 次提交。此時(shí)最長(zhǎng)的查詢?nèi)匀豢梢允褂靡韵喾错樞蛟诘?3 次提交中寫入的文件。這意味著如果一個(gè)查詢?cè)?nbsp;commit 9:30 之后開始執(zhí)行,當(dāng)在 commit 10:30 之后觸發(fā)清理操作時(shí),它仍然會(huì)運(yùn)行,如圖 2 所示。
- 現(xiàn)在對(duì)于任何文件組,只有那些沒有保存點(diǎn)(另一個(gè) Hudi 表服務(wù))且提交時(shí)間小于第 3 次提交(下圖中的“提交 9:30”)的文件切片被清理。
圖2:保留最近3次提交對(duì)應(yīng)的文件
假設(shè)使用以下配置進(jìn)行清理:
hoodie.cleaner.policy=KEEP_LATEST_FILE_VERSIONS hoodie.cleaner.fileversions.retained=1
清理服務(wù)執(zhí)行以下操作:
- 對(duì)于任何文件組,文件切片的最新版本(包括任何待壓縮的)被保留,其余的清理掉。 如圖 3 所示,如果在 commit 10:30之后立即觸發(fā)清理操作,清理服務(wù)將簡(jiǎn)單地保留每個(gè)文件組中的最新版本并刪除其余的。
圖3:保留每個(gè)文件組中的最新文件版本
6. 配置
可以在 此處 中找到有關(guān)所有可能配置的詳細(xì)信息以及默認(rèn)值。
7. 運(yùn)行命令
Hudi 的清理表服務(wù)可以作為單獨(dú)的進(jìn)程運(yùn)行,可以與數(shù)據(jù)攝取一起運(yùn)行。正如前面提到的,它會(huì)清除了任何陳舊文件。如果您想將它與攝取數(shù)據(jù)一起運(yùn)行,可以使用配置同步或異步運(yùn)行?;蛘呖梢允褂靡韵旅瞠?dú)立運(yùn)行清理服務(wù):
[hoodie]$ spark-submit --class org.apache.hudi.utilities.HoodieCleaner \ --props s3:///temp/hudi-ingestion-config/config.properties \ --target-base-path s3:///temp/hudi \ --spark-master yarn-cluster
如果您希望與寫入異步運(yùn)行清理服務(wù),可以配置如下內(nèi)容:
hoodie.clean.automatic=true hoodie.clean.async=true
此外還可以使用 Hudi CLI 來管理 Hudi 數(shù)據(jù)集。CLI 為清理服務(wù)提供了以下命令:
cleans show
clean showpartitions
clean run
可以在 org.apache.hudi.cli.commands.CleansCommand 類 中找到這些命令的更多詳細(xì)信息和相關(guān)代碼。
8. 未來計(jì)劃
目前正在進(jìn)行根據(jù)已流逝的時(shí)間間隔引入新的清理策略,即無論攝取發(fā)生的頻率如何,都可以保留想要的文件版本,可以在 此處 跟蹤進(jìn)度。
我們希望這篇博客能讓您了解如何配置 Hudi 清理服務(wù)和支持的清理策略。請(qǐng)?jiān)L問博客部分 以更深入地了解各種 Hudi 概念。
以上就是Apache Hudi的多版本清理服務(wù)徹底講解的詳細(xì)內(nèi)容,更多關(guān)于Apache Hudi多版本清理服務(wù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 深入解析Apache?Hudi內(nèi)核文件標(biāo)記機(jī)制
- Apache Hudi數(shù)據(jù)布局黑科技降低一半查詢時(shí)間
- Apache?Hudi異步Clustering部署操作的掌握
- Apache?Hudi基于華米科技應(yīng)用湖倉(cāng)一體化改造
- Apache教程Hudi與Hive集成手冊(cè)
- OnZoom基于Apache Hudi的一體架構(gòu)實(shí)踐解析
- Apache Hudi結(jié)合Flink的億級(jí)數(shù)據(jù)入湖實(shí)踐解析
- Apache Hudi性能提升三倍的查詢優(yōu)化
- Apache?Hudi靈活的Payload機(jī)制硬核解析
- Vertica集成Apache Hudi重磅使用指南
相關(guān)文章
將下載到本地的JAR包手動(dòng)添加到Maven倉(cāng)庫(kù)的方法
下面小編就為大家分享一篇將下載到本地的JAR包手動(dòng)添加到Maven倉(cāng)庫(kù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助2017-11-11微服務(wù)架構(gòu)之服務(wù)注冊(cè)與發(fā)現(xiàn)功能詳解
這篇文章主要為大家介紹了微服務(wù)架構(gòu)之服務(wù)注冊(cè)與發(fā)現(xiàn)的功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-01-01游戲服務(wù)器中的Netty應(yīng)用以及源碼剖析
這篇文章主要為大家介紹了游戲服務(wù)器中的Netty應(yīng)用以及源碼剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08FileZilla Server搭建FTP服務(wù)器配置及425錯(cuò)誤與TLS警告解決方法詳解
本文詳細(xì)講解了FileZilla Server搭建FTP服務(wù)器配置以及425 Can't open data,You appear to be behind a NAT router,FTP over TLS is not enabled等相關(guān)問題的解決方法2018-10-10虛擬主機(jī)管理系統(tǒng)DirectAdmin、Websitepanel和Cpanel功能對(duì)比評(píng)測(cè)
最近不少人問DirectAdmin、Websitepanel和Cpanel的區(qū)別,這里簡(jiǎn)單介紹下,方便需要的朋友2013-12-12