您好,登錄后才能下訂單哦!
這篇文章主要介紹“什么是HDFS配額”,在日常操作中,相信很多人在什么是HDFS配額問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”什么是HDFS配額”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
【配額】
HDFS中,配額用于限制目錄的使用空間,具體可分為名稱配額和空間配額。
空間配額指的是單個(gè)目錄中所有文件總的大小限制,文件副本的大小也計(jì)算在內(nèi)。
名稱配額指的是根目錄樹中的文件和目錄的最大數(shù)量,即遞歸計(jì)算子目錄,孫子目錄下的文件和目錄數(shù)。
通過如下命令可以對具體目錄設(shè)置其配額:
# 設(shè)置名稱配額# max_number 為最大文件/目錄數(shù)# dirname 為指定的目錄hdfs dfsadmin -setQuota <max_number> <dirname># 設(shè)置空間配額# bytes 為最大存儲(chǔ)字節(jié)數(shù)hdfs dfsadmin -setSpaceQuota <bytes> <dirname>
通過如下命令可以查看目錄的配額情況:
hdfs dfs -count -q /tmp/hncscwc# 顯示結(jié)果 # 名稱配額大小 名稱配額剩余大小 空間配額大小 空間配額剩余大小 目錄數(shù) 文件數(shù) 文件大小 目錄的路徑 none inf 536870912 536870912 1 0 0 /tmp/hncscwc
通過如下命令可以清除配額:
# 清除名稱配額hdfs dfsadmin -clrQuota <dirname># 清除空間配額額hdfs dfsadmin -clrSpaceQuota <dirname>
【內(nèi)部實(shí)現(xiàn)】
配額在內(nèi)存中的保存
配額在內(nèi)存中是跟隨目錄信息一并存儲(chǔ)的。
在NN的內(nèi)部實(shí)現(xiàn)中,INodeDirectory類記錄目錄的相關(guān)信息,每個(gè)目錄都有一個(gè)具體的實(shí)例對象,該類繼承自抽象類INodeWithAdditionalFields,在父類中有一個(gè)features的成員變量,保存了該inode上的所有特性,包括ACL,配額,快照,附加屬性等等。其中配額屬性就記錄了該inode的空間配額,名稱配額以及當(dāng)前的使用情況。
配額的持久化保存
設(shè)置的配額信息最后會(huì)作為一個(gè)操作持久化到editlog中,具體記錄目錄的路徑、對應(yīng)的空間配額、名稱配額。
隨著checkpoint的執(zhí)行,editlog中的操作信息最終會(huì)記錄到fsiamge中保存。
配額的使用
NN在處理創(chuàng)建文件、目錄、或者寫新的文件,append已有的文件等請求時(shí),會(huì)進(jìn)行對應(yīng)目錄配額的校驗(yàn)判斷(包括當(dāng)前目錄的配額,逐級往上父目錄的配額,祖父目錄的配額等),如果未超過設(shè)置的配額,則允許其操作,并在內(nèi)存中更新當(dāng)前目錄的使用情況。
【能否針對用戶進(jìn)行配額的設(shè)置】
在HDFS中有用戶、用戶組的概念,即每個(gè)文件/目錄屬于指定用戶、用戶組。同時(shí)可以通過開啟ACL,為文件/目錄設(shè)置訪問權(quán)限。這樣HDFS也就支持多用戶了。
在多用戶的真實(shí)場景中,通常是以用戶為單位來設(shè)置配額,即某個(gè)用戶能使用多大的空間。對照HDFS的配額,可能就需要指定某個(gè)用戶能寫哪些目錄,然后為這些目錄分別設(shè)置配額,來實(shí)現(xiàn)用戶配額的功能。
那么,HDFS能否支持直接按照用戶來進(jìn)行配額呢?或者說,如果要支持按照用戶來進(jìn)行配額,HDFS需要做哪些改動(dòng)呢?
首先要考慮到的就是,用戶的配額信息需要進(jìn)行持久化的存儲(chǔ),因此需要添加對應(yīng)的editlog操作,同時(shí)fsiamge中也需要進(jìn)行對應(yīng)的存儲(chǔ)(即改變fsiamge的存儲(chǔ)信息),然后每個(gè)文件進(jìn)行寫操作,文件拷貝,快照等操作時(shí),需要判斷是否超過用戶的配額。此外在聯(lián)邦的場景中,考慮的情況會(huì)更復(fù)雜。
到目前為止,官方的版本中是不支持對用戶進(jìn)行配額的設(shè)置的。
在社區(qū)中,看到有類似的問題討論,但沒有實(shí)際結(jié)論或計(jì)劃進(jìn)行相應(yīng)的設(shè)計(jì)開發(fā)。
【FAQ】
對某個(gè)目錄設(shè)置了配額,如果將該目錄改名會(huì)怎樣?
從上面的內(nèi)部實(shí)現(xiàn)中可以知道,配額是目錄屬性的一部分,通過mv將目錄改名,在HDFS中,該目錄對應(yīng)的inode沒有變化,因此配額信息仍舊是跟隨該目錄一起的。
hdfs dfsadmin -setSpaceQuota 536870912 /tmp/hncscwchdfs dfs -count -q /tmp/hncscwc none inf 536870912 536870912 1 0 0 /tmp/hncscwchdfs dfs -mv /tmp/hncscwc /tmp/spurshdfs dfs -count -q /tmp/hncscwc none inf 536870912 536870912 1 0 0 /tmp/spurs
子目錄的配額能否大于父目錄的配額?
子目錄的配額可以大于父目錄的配額,也就是說,HDFS的實(shí)現(xiàn)中,設(shè)置配額時(shí),并沒有逐級往上去判斷父目錄的配額情況。
但是,在真正進(jìn)行文件存儲(chǔ)的時(shí)候,就會(huì)逐級往上判斷是否超過父目錄,祖父目錄等的配額,如果超過則寫入失敗。
hdfs dfs -count -q /tmp/hncscwc /tmp/hncscwc/hadoop none inf 536870912 536870912 2 0 0 /tmp/hncscwc none inf 1073741824 1073741824 1 0 0 /tmp/hncscwc/hadoop
如果查看當(dāng)前目錄已使用的空間?
通過"dfs -count"可以看到具體目錄的配額和已經(jīng)剩余空間,這樣可以推斷出實(shí)際的使用空間。但是對于未設(shè)置配額的目錄,配額顯示為none,剩余空間顯示為inf,這樣就無法推斷出目錄實(shí)際的使用空間。
查看源碼發(fā)現(xiàn),可以通過客戶端的getQuotaUsage接口獲取到具體目錄的配額與實(shí)際已使用空間大小。
實(shí)際上,"dfs -count"命令也就是調(diào)用了該接口拿到相關(guān)信息,只是增加了判斷,如果配額為空,則不進(jìn)行剩余空間的計(jì)算。
到此,關(guān)于“什么是HDFS配額”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。