2014-03-01 23 views
4

我正在使用Hadoop2.3.0並在CentOS 6.4上將它安裝爲單節點集羣(psuedo-distributed模式)Amazon EC2實例,實例存儲容量爲420GB和7.5GB的RAM,我的理解是,「溢出失敗」異常只發生在節點磁盤空間不足的情況下,但是在短時間內運行map/reduce任務後(沒有接近420 GB的數據)我得到以下例外。在具有420GB實例存儲的ec2實例中出現Hadoop「溢出失敗」異常

我想提一下,我將同一節點上的Hadoop安裝從8GB的EBS卷(最初安裝的位置)移動到同一節點上的420GB實例存儲卷,並更改了$ HADOOP_HOME環境變量和其他屬性相應地指向實例存儲卷,Hadoop2.3.0現在完全包含在420GB的驅動器中。

但是我仍然看到以下異常,請問我是否除Diskspace之外還有可能導致Spill Failed異常的東西?

2014-02-28 15:35:07,630 ERROR [IPC Server handler 12 on 58189] org.apache.hadoop.mapred.TaskAttemptListenerImpl: Task: attempt_1393591821307_0013_m_000000_0 - exited : 
java.io.IOException: Spill failed 
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.checkSpillException(MapTask.java:1533) 
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.flush(MapTask.java:1442) 
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:437) 
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:342) 
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Unknown Source) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1548) 
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:163) 
Caused by: org.apache.hadoop.util.DiskChecker$DiskErrorException: Could not find any valid local directory for attempt_1393591821307_0013_m_000000_0_spill_26.out 
    at org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.getLocalPathForWrite(LocalDirAllocator.java:402) 
    at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:150) 
    at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:131) 
    at org.apache.hadoop.mapred.YarnOutputFiles.getSpillFileForWrite(YarnOutputFiles.java:159) 
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.sortAndSpill(MapTask.java:1564) 
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.access$900(MapTask.java:853) 
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer$SpillThread.run(MapTask.java:1503) 


2014-02-28 15:35:07,604 WARN [main] org.apache.hadoop.security.UserGroupInformation: PriviledgedActionException as:root (auth:SIMPLE) cause:java.io.IOException: Spill failed 
2014-02-28 15:35:07,605 WARN [main] org.apache.hadoop.mapred.YarnChild: Exception running child : java.io.IOException: Spill failed 
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.checkSpillException(MapTask.java:1533) 
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.flush(MapTask.java:1442) 
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:437) 
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:342) 
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Unknown Source) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1548) 
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:163) 
Caused by: org.apache.hadoop.util.DiskChecker$DiskErrorException: Could not find any valid local directory for attempt_1393591821307_0013_m_000000_0_spill_26.out 
    at org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.getLocalPathForWrite(LocalDirAllocator.java:402) 
    at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:150) 
    at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathForWrite(LocalDirAllocator.java:131) 
    at org.apache.hadoop.mapred.YarnOutputFiles.getSpillFileForWrite(YarnOutputFiles.java:159) 
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.sortAndSpill(MapTask.java:1564) 
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.access$900(MapTask.java:853) 
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer$SpillThread.run(MapTask.java:1503) 

回答

4

我能夠通過hadoop.tmp.dir值的設置,在instace存儲的東西解決這個問題,默認情況下它是指向EBS背根卷。