HDFS配額設定和測試

2021-07-31 03:34:07 字數 3470 閱讀 4964

名稱配額是在對應的目錄下所有檔案和目錄名稱的數量上的限制。當超過這個配額的時候,檔案或目錄就會建立失敗,重新命名後名稱配額仍然有效。

因為比較簡單,所以我們直接測試:

[root@testbig1 ~]# hdfs dfs -mkdir /data/test_quota1

[root@testbig1 ~]# hdfs dfsadmin -setquota 2 /data/test_quota1

[root@testbig1 ~]# hdfs dfs -count -q /data/test_quota1

2               1            none             inf            1            0                  0  /data/test_quota1

注:這裡對上面的返回結果進行解釋:

第1個值表示檔案數限額

第2個值表示可用檔案數

第3個值表示空間限額大小(位元組)

第4個值表示可用空間大小(位元組)

第5個值表示目錄數

第6個值表示檔案數

第7個值表示總大小

第8個值表示檔案/目錄名     

[root@testbig1 ~]# hdfs dfs -put fair-scheduler.xml /data/test_quota1/

[root@testbig1 ~]# hdfs dfs -count -q /data/test_quota1

2               0            none             inf            1            1               1469 /data/test_quota1

[root@testbig1~]# hdfs dfs -put griffin.keytab /data/test_quota1/

put: the namespace quota (directories andfiles) of directory /data/test_quota1 is exceeded: quota=2 file count=3

可能有朋友發現問題了,上面設定/data/test_quota1的名稱配額為2,為啥測試後發現只能存放乙個檔案數呢?

這是因為hdfs在設計的時候,將目錄本身也包含了,即占用乙個配額數,所以設定為2時,其實只能放乙個檔案或目錄。

[root@testbig1 ~]# hdfs dfsadmin -clrquota /data/test_quota1

[root@testbig1 ~]# hdfs dfs -put griffin.keytab /data/test_quota1/

可以看到put成功了,再次檢視配額資訊:

[root@testbig1 ~]# hdfs dfs -count -q /data/test_quota1

none             inf            none             inf            1            2               2575 /data/test_quota1

如果前面兩個值為none和inf時,表示沒有設定名稱配額。

空間配額是目錄的空間大小限制。如果超過這個配額,塊寫入操作會失敗。副本也算配額中的一部分。空間配額為0的時候,可以建立檔案,但是不能向檔案中寫入內容。

我們還是直接來測試,這樣更好地理解。

[root@testbig1 ~]# hdfs dfs -mkdir /data/test_quota2

[root@testbig1 ~]# dd if=/dev/zero of=./file bs=1m count=100

100+0 records in

100+0 records out

104857600 bytes (105 mb) copied, 0.12234 s,857 mb/s

[root@testbig1 ~]# du -sh file

100m        file

[root@testbig1 ~]# hdfs dfsadmin -setspacequota 209715200 /data/test_quota2

[root@testbig1 ~]# hdfs dfs -put file /data/test_quota2/

put: the diskspace quota of/data/test_quota2 is exceeded: quota = 209715200 b = 200 mb but diskspaceconsumed = 402653184 b = 384 mb

這裡估計朋友又好奇了,這是什麼鬼,明明設定為200mb大小的配額,為啥100mb的檔案都放不下。這裡我再解釋一下:

其實這個跟hdfs的塊大小有關係。我們環境的hdfs的blocksize(dfs.block.size, dfs.blocksize)大小設定為128mb,副本因子為3。

namenode 寫檔案時會分配block倍數的大小,然後檢查對應目錄的空間配額。

當「目錄已經寫入的容量+ 當前blocksize*3」與 「目錄空間配額」 進行比較,如果前者大於後者,就會報錯。對於我們上面的測試,即0+384mb > 200mb,大於空間配額的設定,所以會失敗。

為了更直觀的認識,我們將空間配額設定為385mb,再測試一下:

[root@testbig1 ~]# hdfs dfsadmin -setspacequota 403701760 /data/test_quota2

[root@testbig1 ~]# hdfs dfs -put file/data/test_quota2/

可以看到已經成功了。

當然我們也可以檢視空間配額的資訊:

[root@testbig1 ~]# hdfs dfs -count -q /data/test_quota2/

none             inf       403701760        89128960            1            1          104857600 /data/test_quota2

第3個值表示:空間限額

第4個值表示:可用空間

再次上傳,又會出現錯誤:

[root@testbig1 ~]# hdfs dfs -put file /data/test_quota2/fsf

put: the diskspace quota of/data/test_quota2 is exceeded: quota = 403701760 b = 385 mb but diskspaceconsumed = 717225984 b = 684 mb

[root@testbig1 ~]# hdfs dfsadmin -clrspacequota /data/test_quota2

[root@testbig1 ~]# hdfs dfs -put file /data/test_quota2/fsf

可以看到,清除空間配額後,再次成功上傳上面的檔案了。

磁碟配額設定

1.建立myquota使用者,對此使用者設定磁碟配額。2.建立乙個邏輯分割槽,對此分割槽設定配額。3.建立檔案sda6的掛載點 其中修改 etc fstab配置檔案資訊如下,主要要使用mount a使配置檔案生效。4.使用quotacheck命令生成配置磁碟配置的資料庫檔案,若selinux開啟的話...

hdfs配額Quota的增刪查

hdfs允許管理員為每乙個使用者和每乙個資料夾設定配額 命名配額和空間配額。name quota 該目錄下的名字數量做硬性限制,為資料夾下的數量作出的限制,超過限制則會報錯 quota exceed,最大值配額 long.max valus。新建立的資料夾沒有分配quota。space quota ...

linux 磁碟配額設定

linux是多使用者多工的作業系統,這就難免出現多個使用者共享磁碟的情況,如何使多個使用者公平的使用磁碟,就是磁碟配置要解決的問題。當然也可以在沒建立乙個使用者的時候,將它的主目錄建在乙個單獨的邏輯分割槽上,但是這樣太麻煩了,也不靈活。以針對使用者的配置為例,設定使用者的磁碟配額。環境 red ha...