2010-11-20 68 views
3

我目前正在使用Hadoop 0.21.0,985326和一個由6個工作節點和一個頭節點組成的項目。 提交常規mapreduce作業失敗,但我不知道爲什麼。有沒有人看到過這個例外?Hadoop溢出失敗

org.apache.hadoop.mapred.Child: Exception running child : java.io.IOException: Spill failed 
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.checkSpillException(MapTask.java:1379) 
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.access$200(MapTask.java:711) 
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer$Buffer.write(MapTask.java:1193) 
    at java.io.DataOutputStream.write(DataOutputStream.java:90) 
    at org.apache.hadoop.io.Text.write(Text.java:290) 
    at org.apache.hadoop.io.serializer.WritableSerialization$WritableSerializer.serialize(WritableSerialization.java:100) 
    at org.apache.hadoop.io.serializer.WritableSerialization$WritableSerializer.serialize(WritableSerialization.java:84) 
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.collect(MapTask.java:967) 
    at org.apache.hadoop.mapred.MapTask$NewOutputCollector.write(MapTask.java:583) 
    at org.apache.hadoop.mapreduce.task.TaskInputOutputContextImpl.write(TaskInputOutputContextImpl.java:92) 
    at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.write(WrappedMapper.java:111) 
    at be.ac.ua.comp.ronny.riki.invertedindex.FilteredInvertedIndexBuilder$Map.map(FilteredInvertedIndexBuilder.java:113) 
    at be.ac.ua.comp.ronny.riki.invertedindex.FilteredInvertedIndexBuilder$Map.map(FilteredInvertedIndexBuilder.java:1) 
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144) 
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:652) 
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:328) 
    at org.apache.hadoop.mapred.Child$4.run(Child.java:217) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:396) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:742) 
    at org.apache.hadoop.mapred.Child.main(Child.java:211) 
Caused by: java.lang.RuntimeException: java.lang.NoSuchMethodException: org.apache.hadoop.io.ArrayWritable.<init>() 
    at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:123) 
    at org.apache.hadoop.io.serializer.WritableSerialization$WritableDeserializer.deserialize(WritableSerialization.java:68) 
    at org.apache.hadoop.io.serializer.WritableSerialization$WritableDeserializer.deserialize(WritableSerialization.java:44) 
    at org.apache.hadoop.mapreduce.task.ReduceContextImpl.nextKeyValue(ReduceContextImpl.java:145) 
    at org.apache.hadoop.mapreduce.task.ReduceContextImpl.nextKey(ReduceContextImpl.java:121) 
    at org.apache.hadoop.mapreduce.lib.reduce.WrappedReducer$Context.nextKey(WrappedReducer.java:291) 
    at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:168) 
    at org.apache.hadoop.mapred.Task$NewCombinerRunner.combine(Task.java:1432) 
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.sortAndSpill(MapTask.java:1457) 
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.access$600(MapTask.java:711) 
    at org.apache.hadoop.mapred.MapTask$MapOutputBuffer$SpillThread.run(MapTask.java:1349) 
Caused by: java.lang.NoSuchMethodException: org.apache.hadoop.io.ArrayWritable.<init>() 
    at java.lang.Class.getConstructor0(Class.java:2706) 
    at java.lang.Class.getDeclaredConstructor(Class.java:1985) 
    at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117) 
    ... 10 more 

目前,我有一些配置參數希望這個錯誤消失試驗,但到現在爲止,這是不成功的。 配置參數我調整是:

  • mapred.map.tasks = 60個
  • mapred.reduce.tasks = 12
  • Job.MAP_OUTPUT_COMPRESS(或mapreduce.map.output.compress)=真
  • Job.IO_SORT_FACTOR(或mapreduce.task.io.sort.factor)= 10
  • Job.IO_SORT_MB(或mapreduce.task.io.sort.mb)= 256個
  • Job.MAP_JAVA_OPTS(或映射精簡.map.java.opts)=「-Xmx256」或「-Xmx512」
  • Job.REDUCE_JAVA_OPTS(或mapreduce.reduce.java.opts)= 「-Xmx256」 或 「-Xmx512」

任何人能解釋爲什麼上面發生異常?以及如何避免它?或者只是一個簡短的解釋,hadoop泄漏操作意味着什麼?

回答

2

好的,所有問題都解決了。

Map-Reduce序列化操作需要一個默認的構造函數org.apache.hadoop.io.ArrayWritable
Hadoops實現沒有爲ArrayWritable提供默認構造函數。
這就是爲什麼java.lang.NoSuchMethodException:org.apache.hadoop.io.ArrayWritable。()被拋出並導致奇怪的溢出異常。

一個簡單的包裝使ArrayWritable真正可寫和修復它!奇怪的是,Hadoop沒有提供這個。

+0

看到這裏爲什麼是這樣的話我的回答:http://stackoverflow.com/questions/4386781/implementation-of-an-arraywritable-for-a-custom-hadoop-type/4390928#4390928 – MrGomez 2010-12-08 18:42:55

1

這個問題就爲我說話時,我的地圖的工作之一的輸出端產生一個製表符(「\ t」的)或換行符(「\ R」或「\ n」) - 的Hadoop不處理這好,失敗。我能解決這個使用這個Python代碼:

if "\t" in output: 
    output = output.replace("\t", "") 
if "\r" in output: 
    output = output.replace("\r", "") 
if "\n" in output: 
    output = output.replace("\n", "") 

您可能需要做別的事情了您的應用程序。