Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop为java.nio.ByteBuffer的键类型抛出ClassCastException_Hadoop_Mapreduce_Bytebuffer_Hadoop Streaming - Fatal编程技术网

Hadoop为java.nio.ByteBuffer的键类型抛出ClassCastException

Hadoop为java.nio.ByteBuffer的键类型抛出ClassCastException,hadoop,mapreduce,bytebuffer,hadoop-streaming,Hadoop,Mapreduce,Bytebuffer,Hadoop Streaming,我正在使用“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

我正在使用“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)
12/01/13 15:09:00信息映射。作业客户端:任务Id:尝试\u 201201131428\u 0005\u m\u000001\u 2,状态:失败
java.lang.ClassCastException:类java.nio.ByteBuffer
在java.lang.Class.asSubclass(Class.java:3018)中
位于org.apache.hadoop.mapred.JobConf.getOutputKeyComparator(JobConf.java:776)
位于org.apache.hadoop.mapred.MapTask$MapOutputBuffer。(MapTask.java:958)
位于org.apache.hadoop.mapred.MapTask$NewOutputCollector。(MapTask.java:673)
位于org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:755)
位于org.apache.hadoop.mapred.MapTask.run(MapTask.java:369)
位于org.apache.hadoop.mapred.Child$4.run(Child.java:259)
位于java.security.AccessController.doPrivileged(本机方法)
位于javax.security.auth.Subject.doAs(Subject.java:396)
位于org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059)
位于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));
}
public RawComparator getOutputKeyComparator(){

Class@samarth您可以改为将字节数组包装在org.apache.hadoop.io.BytesWritable中