Ik probeer via de Hadoop Pipes API een map/reduce taak te draaien met een custom InputFormat en RecordReader. Aangezien dit helaas niet puur in C++ te doen is, heb ik twee classes hiervoor in java gemaakt.
De twee classes gecompileerd en ingepakt in een jar. Als ik deze probeer te gebruiken in een map/reduce taak krijg ik een ClassCastException:
Wat ik uit de code van Hadoop opmaak is dat deze de LogInputFormat class probeert te casten naar een InputFormat class. Dit zou naar mijn beste weten gewoon moeten kunnen, ik extend de FileInputFormat class, die weer extend van de InputFormat class.
Het enige wat ik nog raar vind dat de cast die Hadoop doet (in Submitter.java op regel 437) naar een InputFormat is, wat zelf een templated class is, en er niet naar iets als InputFormat<X, Y> wordt gecast. Dit werkt echter wel met de built-in InputFormat classes, dus ik heb geen idee wat er nu precies aan de hand is.
code:
1
2
3
4
5
6
7
8
9
10
| /**
* LogInputFormat class
*
* Will split up larger log files into blocks
* of a maximum of 64 MB.
*/
public class LogInputFormat extends FileInputFormat<LongWritable, Text>
{
// snip createRecordReader en getSplits methodes
}; |
De twee classes gecompileerd en ingepakt in een jar. Als ik deze probeer te gebruiken in een map/reduce taak krijg ik een ClassCastException:
code:
1
2
3
4
5
| Exception in thread "main" java.lang.ClassCastException: class org.x.hadoop.mapreduce.LogInputFormat
at java.lang.Class.asSubclass(Class.java:3165)
at org.apache.hadoop.mapred.pipes.Submitter.getClass(Submitter.java:388)
at org.apache.hadoop.mapred.pipes.Submitter.run(Submitter.java:437)
at org.apache.hadoop.mapred.pipes.Submitter.main(Submitter.java:518) |
Wat ik uit de code van Hadoop opmaak is dat deze de LogInputFormat class probeert te casten naar een InputFormat class. Dit zou naar mijn beste weten gewoon moeten kunnen, ik extend de FileInputFormat class, die weer extend van de InputFormat class.
Het enige wat ik nog raar vind dat de cast die Hadoop doet (in Submitter.java op regel 437) naar een InputFormat is, wat zelf een templated class is, en er niet naar iets als InputFormat<X, Y> wordt gecast. Dit werkt echter wel met de built-in InputFormat classes, dus ik heb geen idee wat er nu precies aan de hand is.
Ik ontken het bestaan van IE.