1. 程式人生 > >HDFS中Non DFS Used使用過大

HDFS中Non DFS Used使用過大

問題描述:

在namenode頁面發現,好多主機的Non DFS Used使用非常大,大大減少了HDFS磁碟剩餘可用容量,存在異常

通常,Non DFS Used = 配置的容量 - 剩餘容量 - DFS使用容量

而配置容量 = 總容量 - 預留空間(總容量為磁碟的總大小,預留空間為預設的5%)

所以,Non DFS used=(總容量-預留空間)- 剩餘容量 - DFS使用容量

也可以通俗的說,"Non DFS used" 就是代表"配置的dfs空間有多少空間是被非hdfs檔案佔用了的"

 

造成Non DFS Used使用過大,可能產生的原因是:

       因為叢集裡啟動了historyserver,這個程序在刪除了臨時檔案之後,並沒有釋放檔案控制代碼,所以導致Non DFS Used 數值很大,而用df和du檢視的時候,磁碟空間並未被佔用。這個與版本也有一定的關係,在後期的新版本中,這個問題就比較少。

 

解決方法:

方法一:重啟存在問題節點上的datanode服務

方法二:重啟整個HDFS服務

方法三:重啟JobHistory服務

 

具體關於主機磁碟總容量與HDFS分配的容量對比與關係見下圖:

主機上的磁碟容量:40.6TB

每塊盤的總大小為:4000G

每塊盤可用的磁碟空間是:3.7T

HDFS中的配置:

HDFS系統預留引數:10G

NameNode頁面上的顯示:39.83TB

發現:NameNode頁面上顯示的39.83TB,與磁碟總共的40.6TB,差距了0.77TB,約等於800G。至於這800G去哪兒了,還有待以後觀察。如果有大神知道,希望指點一下。

 

注意點:

(1)其實NonDFSUsed預設包含了那檔案系統預留的5%空間

(2)可以協助排查問題的命令

lsof | grep delete    //識別已被刪除的檔案,因為Hadoop流程(像hive, yarn, and mapred and hdfs)可能會引用那些已經被刪除的檔案,而這些引用將佔用磁碟空間。

du -hsx * | sort -rh | head -10     //查詢佔用空間最大的前10個檔案

(3)Non DFS Used的計算方法

配置容量 = 總容量 - 預留空間(總容量為磁碟的總大小,預留空間為預設的5%)

Non DFS Used = 配置的容量 - 剩餘容量 - DFS使用容量

Non DFS used=(總容量-預留空間)- 剩餘容量 - DFS使用容量

(4)磁碟系統預留的空間,可以通過df -h檢視,計算方法為:

Used+Available,看是否等於Size,如果相等,可能沒有預留,或者預留的特別少,幾乎忽略不計。如果有,則可以通過差值/Size,得出具體的預留比例。

 

參考網址:

https://blog.csdn.net/levy_cui/article/details/53199360

https://blog.csdn.net/u014297175/article/details/48679321