Hadoopは、java.nio.bytebufferのキータイプのClassCastExceptionをスローします
-
28-10-2019 - |
質問
クラスターのセットアップには、「Hadoop-0.20.203.0rc1.tar.gz」を使用しています。設定するたびに job.setMapOutputKeyClass(ByteBuffer.class);
そして、私が例外を獲得する仕事を実行します:
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が匹敵し、手紙が取れないことは、それが異なるものを作ることに気づきましたか?追加情報が必要かどうか教えてください。
解決
これは、例外がスローされている場所です。これが次のとおりです コード 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));
}
もしも mapred.output.key.comparator.class
プロパティはJobConfで定義されていません。キーは、WritableComparableインターフェイスを実装する必要があります。 ByteBufferクラスは、WritableComparable Interfaceを実装していないため、例外です。
ところで、 writablecomparable インターフェイスは、書き込み可能なクラスのサブインターフェイスです。
所属していません StackOverflow