解决之道:
在bin/hadoop jar hadoop-0.19.0-streaming.jar -input /home/luoli/input/goodman -output /home/luoli/output -mapper org.apache.hadoop.mapred.lib.IdentityMapper -reducer /usr/bin/wc命令后加上-jobconf 设置,并指定map的输出时准备的key类型是LongWritable类型的。-jobconf mapred.mapoutput.key.class=org.apache.hadoop.io.LongWritable,或者是-D mapred.mapoutput.key.class=org.apache.hadoop.io.LongWritable.
总结:
hadoop的mapreduce程序的数据流分成几个阶段,首先是从原始输入文件到InputFormat,InputFormat根据它自己的实现和输入文件的格式为Mapper准备数据 (<key,value>),然后这些数据被Mapper读入,并在map函数中进行处理,同样map中也会输出一定格式的中间结果,这些中间结果也同样是<key,value>的对,而且读入和输出的key和value类型不一定要相同。然后Reducer从Mapper的输出中按照同样的格式读入数据,并在reduce方法中进行处理,最后按照OutputFormat的格式进行输出。这中间的任何一个过程如果出现了格式不匹配或者无法转型,就会报出上述类似的错误,其实如果仔细查看自己的程序的数据流向中的格式是否匹配,通常就能解决问题了。