2012-01-13 19 views
5

की कुंजीपटल के लिए क्लासकास्ट एक्सेप्शन फेंकता है मैं अपने क्लस्टर सेटअप के लिए "हैडऑप-0.20.203.0rc1.tar.gz" का उपयोग कर रहा हूं। जब भी मैं job.setMapOutputKeyClass(ByteBuffer.class);हैडोप java.nio.ByteBuffer

सेट और मैं अपवाद निम्नलिखित मिल काम चलाएँ:

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) 

इसके अलावा मैं देखा है कि ByteBuffer तुलनीय है और न लिखने योग्य है कि किसी भी diffrence कर रहा है? मुझे बताएं कि क्या कोई अतिरिक्त जानकारी चाहिए।

उत्तर

5

यह वह जगह है जहां अपवाद फेंक दिया जा रहा है। एसवीएन से code यहां है। mapred.output.key.comparator.class संपत्ति JobConf पर परिभाषित नहीं है

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)); 
} 

तो कुंजी WritableComparable इंटरफ़ेस को लागू करना होगा। बाइटबफर वर्ग WritableComparable इंटरफ़ेस को लागू नहीं करता है, इसलिए अपवाद।

बीटीडब्ल्यू, WritableComparable इंटरफ़ेस लिखने योग्य और तुलनात्मक कक्षाओं का उप-इंटरफ़ेस है।

+0

यदि आप बाइटबफर के लिए इसे सेट अप करने के तरीके को विस्तारित कर सकते हैं तो यह उपयोगी होगा .... – samarth

+0

@samarth आप org.apache.hadoop.io.Bytes में बाइट सरणी को लपेट सकते हैं इसके बजाय –

संबंधित मुद्दे