org.apache.hadoop.util.DiskChecker$DiskErrorException問題等價解決linux磁碟不足解決問題排查
解決“/dev/mapper/centos-root 100%”滿了, org.apache.hadoop.util.DiskChecker$DiskErrorException Could not find any valid local directory for....
錯誤資訊:如下所示
2021-12-09 00:40:58,559 INFO mapreduce.Job: Task Id : attempt_1638980473129_0001_m_000000_0, Status : FAILED
Error: org.apache.hadoop.util.DiskChecker$DiskErrorException: Could not find any valid local directory for output/attempt_1638980473129_0001_m_000000_0/file.out
at org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.getLocalPathForWrite(LocalDirAllocator.java:447)
at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:152)
at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:133)
at org.apache.hadoop.mapred.YarnOutputFiles.getOutputFileForWrite(YarnOutputFiles.java:82)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.mergeParts(MapTask.java:1881)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.flush(MapTask.java:1527)
at org.apache.hadoop.mapred.MapTask$NewOutputCollector.close(MapTask.java:735)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:805)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:347)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:174)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1729)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:168)
搜了很多教程發現要麼說的不是一個具體錯誤,要麼沒有用。最後發現確實是因為虛擬機器沒有空間再去輸出中間檔案了。網上如果說需要修改各模組tmp檔案路徑的也是有道理的,因為預設會存到/tmp下,這個再虛擬機器分配的時候可能會很小。
排查思路 記住df -h這個命令不斷的查下去 查到存快取的路徑為止:
cd /
sudo du -h -x --max-depth=1
:查這層資料夾各自總大小
可以看到這裡的/opt
有37G大小已經不對勁了,而我的hadoop是裝在這個opt下的,所以繼續安裝上述深入:
最終定位到:/opt/module/hadoop-3.1.3/data/nm-local-dir/usercache/hadoop/appcache/application_1638980473129_0001
這個資料夾下佔了幾十個G的目錄:ls檢視一下。。。。。結果。。。
rm -rf *
命令清除當前目錄下的所有out檔案即可。如果有叢集的話也要清理一下。
舒服了。。