Frage

Ich verwende "Hadoop-0.20.203.0RC1.tar.gz" für mein Cluster-Setup. Wann immer ich setze job.setMapOutputKeyClass(ByteBuffer.class);

Und führen Sie den Job aus, den ich folgt: Ausnahme:

    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)

Außerdem habe ich bemerkt, dass ByteBuffer vergleichbar und nicht beschreibbar ist, ist, dass dies Unterschied macht? Lassen Sie mich wissen, ob zusätzliche Informationen erforderlich sind.

War es hilfreich?

Lösung

Hier wird die Ausnahme ausgelöst. Hier ist der Code von 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));
}

Wenn mapred.output.key.comparator.class Die Eigenschaft ist nicht auf JobConf definiert, dann muss der Schlüssel die writeLableCompable -Schnittstelle implementieren. Die ByteBuffer -Klasse implementiert die writeLableCompable -Schnittstelle nicht, daher die Ausnahme.

Übrigens, Writable komparabel Die Schnittstelle ist die Untergrenze von beschreibbaren und vergleichbaren Klassen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top