Hadoop実行Job時報DiskChecker$DiskErrorException異常原因

1863 ワード

バージョン:
 
$ hadoop version 
Hadoop 0.20.2-cdh3u4
Subversion git://ubuntu-slave01/var/lib/jenkins/workspace/CDH3u4-Full-RC/build/cdh3/hadoop20/0.20.2-cdh3u4/source -r 214dd731e3bdb687cb55988d3f47dd9e248c5690
Compiled by jenkins on Mon May  7 13:01:39 PDT 2012
From source with checksum a60c9795e41a3248b212344fb131c12c

 
問題の説明:
HadoopがMRを実行するときに投げる.apache.hadoop.util.DiskChecker$DiskErrorException異常、詳細は以下の通りです.
 
org.apache.hadoop.util.DiskChecker$DiskErrorException: Could not find any valid local directory for output/map_4.out
        at org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.getLocalPathForWrite(LocalDirAllocator.java:376)
        at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:146)
        at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:127)
        at org.apache.hadoop.mapred.MapOutputFile.getInputFileForWrite(MapOutputFile.java:176)
        at org.apache.hadoop.mapred.ReduceTask$ReduceCopier.createKVIterator(ReduceTask.java:2374)
        at org.apache.hadoop.mapred.ReduceTask$ReduceCopier.access$400(ReduceTask.java:582)

問題の原因:
 
実行org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.getLocalPathForWrite(...)ディスク容量不足で放出異常
解決方法:
1.ユーザーロゴを探してそのjobが占める空間が大きいことを見る
du -m --max-depth=1 /yourpath/mapred/local/userlogs | sort -n

 2.このjobが実行済みであれば直接rm-rfでよい
最終的なソリューション:
hadoopがユーザーログを保持する時間を変更し、mapred-siteを変更します.xmlのmapred.userlog.retain.hours
  <property>
    <name>mapred.userlog.retain.hours</name>
    <value>10</value>
  </property>