Hadoop-Spill Fehler
Ich bin momentan an einem Projekt mit Hadoop 0.21.0, 985326 und ein cluster mit 6 worker-Knoten und ein head-Knoten.
Die Einreichung einer regelmäßigen mapreduce-job schlägt fehl, aber ich habe keine Ahnung, warum. Hat jemand gesehen, diese Ausnahme vor?
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
Derzeit, ich experimentiere mit ein paar Konfigurations-Parameter in der Hoffnung, dass dieser Fehler verschwindet, aber bis jetzt war dies nicht erfolgreich.
Die Konfigurationsparameter ich bin tweaking sind:
- mapred.Karte.Aufgaben = 60
- mapred.reduzieren.Aufgaben = 12
- Job.MAP_OUTPUT_COMPRESS (oder mapreduce.Karte.Ausgabe.komprimieren) = true
- Job.IO_SORT_FACTOR (oder mapreduce.Aufgabe.io.Art.Faktor) = 10
- Job.IO_SORT_MB (oder mapreduce.Aufgabe.io.Art.mb) = 256
- Job.MAP_JAVA_OPTS (oder mapreduce.Karte.java.opts) = "-Xmx256" oder "-Xmx512"
- Job.REDUCE_JAVA_OPTS (oder mapreduce.reduzieren.java.opts) = "-Xmx256" oder "-Xmx512"
Kann jemand erklären, warum die Ausnahme oben kommt? Und wie es zu vermeiden? Oder einfach nur eine kurze Erklärung, was die hadoop-spill operation impliziert?
InformationsquelleAutor Nico | 2010-11-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, alle Probleme sind gelöst.
Den Map-reduce-Serialisierung Betrieb muss intern eine default-Konstruktor für org.apache.hadoop.io.ArrayWritable.
Hadoops Umsetzung nicht eine Standard-Konstruktor für ArrayWritable.
Das ist der Grund, warum die java.lang.NoSuchMethodException: org.apache.hadoop.io.ArrayWritable.() ausgelöst wurde, und verursacht die seltsame spill Ausnahme.
Einen einfachen wrapper gemacht ArrayWritable wirklich beschreibbar ist und es behoben! Seltsam, dass Hadoop nicht zur Verfügung stellen.
InformationsquelleAutor Nico
Diesem problem kam ist für mich, wenn die Ausgabe von einem meiner jobs anzeigen erzeugt ein tab-Zeichen (\t) oder Zeilenumbruch ("\r" oder "\n") - Hadoop nicht handhaben das gut, und scheitert. Ich war in der Lage, dies zu lösen, mit diesem Stück Python-code:
Möglicherweise haben Sie zu tun, etwas anderes für die app.
InformationsquelleAutor Suman