Question

J'utilise "Hadoop-0.20.203.0rc1.tar.gz" pour ma configuration du cluster. Chaque fois que je job.setMapOutputKeyClass(ByteBuffer.class); ensemble

et exécuter le travail que je me exception suivante:

    12/01/13 15:09:00 INFO mapred.JobClient: Task Id : attempt_201201131428_0005_m_000001_2, Status : FAILED
java.lang.ClassCastException: class java.nio.ByteBuffer
        at java.lang.Class.asSubclass(Class.java:3018)
        at org.apache.hadoop.mapred.JobConf.getOutputKeyComparator(JobConf.java:776)
        at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:958)
        at org.apache.hadoop.mapred.MapTask$NewOutputCollector.<init>(MapTask.java:673)
        at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:755)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:369)
        at org.apache.hadoop.mapred.Child$4.run(Child.java:259)
        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:1059)
        at org.apache.hadoop.mapred.Child.main(Child.java:253)

Aussi j'ai remarqué que ByteBuffer est comparable et non inscriptibles est que faire une diffrence? Permettez-moi de savoir si des informations supplémentaires nécessaires.

Était-ce utile?

La solution

est où l'exception est levée. Voici le Code de SVN.

public RawComparator getOutputKeyComparator() {
    Class<? extends RawComparator> theClass = getClass("mapred.output.key.comparator.class",
        null, RawComparator.class);
    if (theClass != null)
        return ReflectionUtils.newInstance(theClass, this);
    return WritableComparator.get(getMapOutputKeyClass().asSubclass(WritableComparable.class));
}

Si la propriété de mapred.output.key.comparator.class n'est pas défini sur JobConf alors la clé doit implémenter l'interface WritableComparable. classe ByteBuffer ne met pas en oeuvre l'interface WritableComparable, de sorte que l'exception.

BTW, l'interface de WritableComparable est sous-interface de inscriptibles et des classes comparables.

scroll top