掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
???

創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括澤州網(wǎng)站建設(shè)、澤州網(wǎng)站制作、澤州網(wǎng)頁制作以及澤州網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,澤州網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到澤州省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
元數(shù)據(jù)同步是Alluxio的重要特性。這篇文章描述了設(shè)計(jì)、實(shí)現(xiàn)和其他內(nèi)部流程,用以調(diào)整性能。
元數(shù)據(jù)同步(sync)是Alluxio中的核心功能,它使文件和目錄與所在存儲(chǔ)系統(tǒng)下真實(shí)的來源保持一致,進(jìn)而使用戶能夠輕松地從Alluxio中檢索出最新版的數(shù)據(jù)。同時(shí)了解內(nèi)部流程對(duì)調(diào)整性能也非常重要。本文介紹了Alluxio中保持元數(shù)據(jù)同步的設(shè)計(jì)和實(shí)現(xiàn)。
在Alluxio中,元數(shù)據(jù)指的是Alluxio文件系統(tǒng)中文件和目錄的信息,包括它們的所有者、組、權(quán)限、創(chuàng)建以及修改時(shí)間等信息。元數(shù)據(jù)獨(dú)立于其內(nèi)容——即使文件或目錄是空的,但它仍然具有關(guān)聯(lián)的元數(shù)據(jù)。
Alluxio維護(hù)文件系統(tǒng)或底層存儲(chǔ)系統(tǒng)的對(duì)象存儲(chǔ)命名空間的副本。在Alluxio中,元數(shù)據(jù)一致性很重要,尤其是不同集群在數(shù)據(jù)管道中寫入或讀取數(shù)據(jù)后,并在Alluxio之外進(jìn)行更改時(shí)。
???
在上圖中是一個(gè)典型的場(chǎng)景,結(jié)合了Spark ETL和Presto SQL的數(shù)據(jù)管道。ETL集群(不帶Alluxio)寫入數(shù)據(jù),然后是分析集群,Alluxio讀取轉(zhuǎn)換后的數(shù)據(jù)。因?yàn)锳lluxio維護(hù)了底層存儲(chǔ)的元數(shù)據(jù)副本并管理元數(shù)據(jù),因此當(dāng)?shù)讓哟鎯?chǔ)中的數(shù)據(jù)通過ETL步驟發(fā)生變化時(shí),必須使分析群集上的Alluxio實(shí)例感知到并與底層存儲(chǔ)系統(tǒng)中的元數(shù)據(jù)保持一致以便正確操作。
Alluxio在一個(gè)或多個(gè)底層存儲(chǔ)系統(tǒng)上的統(tǒng)一命名空間中提供了文件系統(tǒng)抽象。通過Alluxio訪問文件或目錄,會(huì)得到和直接訪問under storage一樣的結(jié)果。比如如果掛載到Alluxio根目錄的底層存儲(chǔ)是s3://bucket/data,那么在Alluxio中列出“/”目錄與在s3://bucket/data中列出對(duì)象并在其中打印“/file”產(chǎn)生相同的結(jié)果應(yīng)該返回與s3://bucket/data/file一樣的結(jié)果。
在Alluxio中元數(shù)據(jù)只從Alluxio master中存儲(chǔ)和提供,但單個(gè)文件的內(nèi)容則由Alluxio worker提供。
默認(rèn)情況下,Alluxio根據(jù)需要從底層存儲(chǔ)加載元數(shù)據(jù)。在上面的例子中,一個(gè)從空開始的Alluxio master在啟動(dòng)后沒有任何關(guān)于s3://bucket/data/file的信息。僅當(dāng)某些用戶在Alluxio中列出“/”目錄或嘗試訪問“/file”時(shí)才會(huì)識(shí)別此文件。這種“惰性”行為可以防止不必要的工作并能顯著提高性能,因?yàn)榈讓哟鎯?chǔ)中的元數(shù)據(jù)操作可能很慢。
注意,更新元數(shù)據(jù)可以是雙向的。如果對(duì)文件系統(tǒng)的所有修改都是通過Alluxio發(fā)生,那么Alluxio只需要掃描一次under storage即可檢索初始狀態(tài),然后作為文件系統(tǒng)RPC調(diào)用的一部分同步應(yīng)用Alluxio和under storage中的更改。這將為用戶提供一致的存儲(chǔ)不足視圖。然而實(shí)際上Alluxio之外的存儲(chǔ)不足經(jīng)常發(fā)生變化,因此Alluxio master必須監(jiān)控對(duì)under storage中文件和方向的添加、刪除和更新,并將更改應(yīng)用到Alluxio文件系統(tǒng)中。這個(gè)同步兩個(gè)命名空間的過程稱為元數(shù)據(jù)同步。
當(dāng)應(yīng)用程序更改了 Alluxio 文件的元數(shù)據(jù)并且該文件被持久化時(shí),更改將始終同步傳播到底層存儲(chǔ)無需觸發(fā)元數(shù)據(jù)同步。當(dāng)應(yīng)用程序在存儲(chǔ)文件下更新而不讓 Alluxio 知道時(shí),有兩種方法可以控制元數(shù)據(jù)同步的時(shí)間。
將同步間隔設(shè)置到Alluxio屬性鍵“alluxio.user.file.metadata.sync.interval”上。
注意,使用這種方式如果從未訪問過Alluxio中的路徑,則它將永遠(yuǎn)不會(huì)觸發(fā)同步。一旦在同步間隔到期后訪問路徑,Alluxio將再次與under storage同步。例如在Presto作業(yè)中,查詢計(jì)劃階段列出了該作業(yè)所需的所有文件,如果這些路徑最近未被訪問則會(huì)觸發(fā)同步。但是除非作業(yè)持續(xù)時(shí)間超過同步間隔,否則作業(yè)的后續(xù)階段將不會(huì)同步。
因此,在這種情況下,從技術(shù)上來講我們可以比同步間隔更頻繁地重新同步。
可以使用全新的全局默認(rèn)值(在 alluxio-site.properties 中設(shè)置時(shí))進(jìn)行自定義,也可以在目錄基礎(chǔ)上遞歸地應(yīng)用其所有子項(xiàng)來自定義此屬性鍵。
如果同步元數(shù)據(jù)時(shí)由于同步間隔而未發(fā)生,則大多數(shù)Alluxio操作將繼續(xù)使用Alluxio文件系統(tǒng)中當(dāng)前的元數(shù)據(jù)執(zhí)行,但也有一些例外:
當(dāng)Alluxio master收到RPC請(qǐng)求檢索此路徑的元數(shù)據(jù)時(shí),Alluxio master可能會(huì)在Alluxio路徑上觸發(fā)元數(shù)據(jù)同步。而不是有一個(gè)專用的服務(wù)來遍歷整個(gè)文件系統(tǒng)inode樹并保持同步,這項(xiàng)工作由master上的每個(gè)單獨(dú)的Alluxio文件系統(tǒng)操作來分?jǐn)?。?RPC 請(qǐng)求中同步的高級(jí)過程是:
注意如果元數(shù)據(jù)同步過程涉及inode樹的同一部分,則元數(shù)據(jù)同步過程可能會(huì)相對(duì)昂貴,并且會(huì)阻止其他操作。這是因?yàn)橥竭M(jìn)程可能會(huì)寫鎖定它正在更新的文件系統(tǒng)的元數(shù)據(jù)部分。特別是當(dāng)同步樹中的特定路徑時(shí),RPC處理線程將首先獲取文件整個(gè)路徑上的讀鎖。因?yàn)橥骄€程也需要?jiǎng)?chuàng)建路徑的能力,所以它需要同步根路徑的寫鎖。
當(dāng)同步線程處理根路徑下的每個(gè)路徑時(shí)會(huì)獲得額外的鎖,同步線程獲取文件路徑的寫鎖并在處理路徑后立即釋放。
可以通過控制三個(gè)配置參數(shù)來調(diào)整并行度來同步元數(shù)據(jù):
有三種類型的不同緩存,在元數(shù)據(jù)同步過程中具有不同的目標(biāo)和用途。以下是所有這些內(nèi)容的快速總結(jié)。
元數(shù)據(jù)同步是Alluxio中最重要的功能之一。有多種不同的方法可以觸發(fā)同步,但需要權(quán)衡不同的性能。在Alluxio master內(nèi)部有一個(gè)優(yōu)化列表,用于加速同步。
朱鋼,社區(qū)編輯,2019年CSDN博客專家20強(qiáng),2020年騰訊云+社區(qū)優(yōu)秀作者,10年一線開發(fā)經(jīng)驗(yàn),曾參與獵頭服務(wù)網(wǎng)站架構(gòu)設(shè)計(jì),企業(yè)智能客服以及大型電子政務(wù)系統(tǒng)開發(fā),主導(dǎo)某大型央企內(nèi)部防泄密和電子文檔安全監(jiān)控系統(tǒng)的建設(shè),目前在BIM頭部企業(yè)從事招投標(biāo)軟件開發(fā)。
原文標(biāo)題:Metadata Synchronization in Alluxio: Design, Implementation, and Optimization,作者:David Zhu
【譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為.com】

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流