Hadoop on Mac with IntelliJ IDEA - 9 解决Type mismatch in value from map问题

修改陆喜恒. Hadoop实战(第2版)5.3排序的代码时遇到IO异常。

环境:Mac OS X 10.9.5, IntelliJ IDEA 13.1.5, Hadoop 1.2.1

异常具体信息如下

 1 14/10/06 03:08:51 INFO mapred.JobClient: Task Id : attempt_201410021756_0043_m_000000_0, Status : FAILED
 2 java.io.IOException: Type mismatch in value from map: expected org.apache.hadoop.io.IntWritable, recieved org.apache.hadoop.io.Text
 3     at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.collect(MapTask.java:1024)
 4     at org.apache.hadoop.mapred.MapTask$NewOutputCollector.write(MapTask.java:690)
 5     at org.apache.hadoop.mapreduce.TaskInputOutputContext.write(TaskInputOutputContext.java:80)
 6     at main.ch5.ReSort$Map.map(ReSort.java:51)
 7     at main.ch5.ReSort$Map.map(ReSort.java:43)
 8     at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)
 9     at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)
10     at org.apache.hadoop.mapred.MapTask.run(MapTask.java:364)
11     at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
12     at java.security.AccessController.doPrivileged(Native Method)
13     at javax.security.auth.Subject.doAs(Subject.java:396)
14     at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)
15     at org.apache.hadoop.mapred.Child.main(Child.java:249)

相关代码如下

public static class Map extends Mapper<LongWritable, Text, IntWritable, Text> {
        // ...
}

public static class Reduce extends Reducer<IntWritable, Text, IntWritable, IntWritable> {
        // ...
}

public static void main(String[] args){
        // ...
        job.setOutputFormatClass(TextOutputFormat.class);
        job.setOutputKeyClass(IntWritable.class);
        job.setOutputValueClass(IntWritable.class);
        // ...
}

Map的输出与Reduce的输入类型相符。但是,根据错误信息,Map的value值预期为IntWritable,接受到的却是Text,两者类型不匹配。另外,错误提示与代码定义也不同,因为定义声明了map阶段输出值为<IntWritable, Text>。

造成这个问题的原因等以后阅读源码时再分析,先处理问题。配置作业的MapOutputKeyClass和MapOutputValueClass参数,将其设置成Map输出类型即可。

job.setMapOutputKeyClass(/*K2*/IntWritable.class);
job.setMapOutputValueClass(/*V2*/Text.class);
时间: 2024-10-07 08:11:42

Hadoop on Mac with IntelliJ IDEA - 9 解决Type mismatch in value from map问题的相关文章

Hadoop on Mac with IntelliJ IDEA - 7 解决failed to report status for 600 seconds. Killing!问题

本文讲述作业在Hadoop 1.2.1完成map后ruduce阶段遇到failed to report status for 600 seconds. Killing!问题的解决过程. 环境:Mac OS X 10.9.5, IntelliJ IDEA 13.1.4, Hadoop 1.2.1 Hadoop放在虚拟机中,宿主机通过SSH连接,IDE和数据文件在宿主机.IDEA自身运行于JDK 1.8,IDEA工程及Hadoop使用JDK 1.6. 提交作业到hadoop后,作业执行时间过长,输出

Hadoop on Mac with IntelliJ IDEA: 1 解决输入路径不存在问题

本文讲述使用IntelliJ IDEA时遇到Hadoop提示input path does not exist(输入路径不存在)的一种解决办法. 环境:Mac OS X 10.9.5, IntelliJ IDEA 13.1.4, Hadoop 1.2.1 Hadoop放在虚拟机中,宿主机通过SSH连接,IDE和数据文件在宿主机. 这是自学Hadoop的第三天.以前做过点.NET开发,Mac.IntelliJ IDEA.Hadoop.CentOS对我而言,相当陌生.第一份Hadoop代码就遇到了问

Hadoop on Mac with IntelliJ IDEA - 5 解决java heap space问题

本文讲述在CentOS 6.5中提交作业到hadoop 1.2.1于reduce阶段遇到Error: java heap space错误导致作业重新计算的解决过程.解决办法适用Linux.Mac OS X 和Windows操作系统. 环境:Mac OS X 10.9.5, IntelliJ IDEA 13.1.4, Hadoop 1.2.1 Hadoop放在虚拟机中,宿主机通过SSH连接,IDE和数据文件在宿主机.IDEA自身运行于JDK 1.8,IDEA工程及Hadoop使用JDK 1.6.

Hadoop on Mac with IntelliJ IDEA - 2 解决URI错误导致Permission denied

本文讲述在IntelliJ IDEA中使用FileSystem.copyFromLocalFile操作Hadoop时因URI格式有误导致Permission denied的解决过程. 环境:Mac OS X 10.9.5, IntelliJ IDEA 13.1.4, Hadoop 1.2.1 Hadoop放在虚拟机中,宿主机通过SSH连接,IDE和数据文件在宿主机. 操作代码如下 1 public class CopyFromLocalTestDriver { 2 public static v

Hadoop on Mac with IntelliJ IDEA - 6 解决KeyValueTextInputFormat读取时只有key值问题

本文讲述使用KeyValueTextInputFormat在Hadoop 0.x正常工作.Hadoop 1.2.1失效的解决过程. 环境:Mac OS X 10.9.5, IntelliJ IDEA 13.1.4, Hadoop 1.2.1 Hadoop放在虚拟机中,宿主机通过SSH连接,IDE和数据文件在宿主机.IDEA自身运行于JDK 1.8,IDEA工程及Hadoop使用JDK 1.6. 还在折腾Hadoop In Action第4章的代码,书的写法,如下所示. job.setInputF

java.io.IOException: Type mismatch in key from map:解决方法

执行MR程序的时候发生异常:java.lang.Exception: java.io.IOException: Type mismatch in key from map: expected org.apache.hadoop.io.Text, received org.apache.hadoop.io.LongWritable 日志如下: 2016-05-09 21:33:28,871 INFO [org.apache.hadoop.conf.Configuration.deprecation

Hadoop on Mac with IntelliJ IDEA - 4 制作jar包

本文讲述使用IntelliJ IDEA打包Project的过程,即,打jar包. 环境:Mac OS X 10.9.5, IntelliJ IDEA 13.1.4, Hadoop 1.2.1 Hadoop放在虚拟机中,宿主机通过SSH连接,IDE和数据文件在宿主机.IDEA自身运行于JDK 1.8,IDEA工程及Hadoop使用JDK 1.6. 在本系列博文的第一篇,我因不会使用IDEA打jar包,不得不直接调试代码,遇到输入路径不存在问题.今天,我打了几次jar包,结果不都满意,默认情况,ID

Hadoop on Mac with IntelliJ IDEA - 8 单表关联NullPointerException

简化陆喜恒. Hadoop实战(第2版)5.4单表关联的代码时遇到空指向异常,经分析是逻辑问题,在此做个记录. 环境:Mac OS X 10.9.5, IntelliJ IDEA 13.1.5, Hadoop 1.2.1 改好的代码如下,在reduce阶段遇到了NullPointerException. 1 public class STjoinEx { 2 private static final String TIMES = "TIMES"; 3 4 public static v

Hadoop on Mac with IntelliJ IDEA - 11 Hadoop版本衍化

最近阅读的材料总是提到Hadoop 0.20.0.23等版本号,导致个人对Hadoop版本感到相当讶异:1.2.1竟然比0.23还落后,你特么在逗我.好奇之下,搜索一把,找到了一个文档,以下内容均来自该文档,在此作个备份. 摘自迪伦. Hadoop大数据解决方案进阶应用 - Hadoop 2.0(1). 1.第一代Hadoop:Hadoop 1.0 包含三个大版本,分别是0.20.x.0.21.x.0.22.x和CDH3 0.20.x最后演化成1.0.x,变成了稳定版 0.21.x和0.22.x