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,得出具體的預留比例。
參考網址: