今天在写一个MapReduce的程序时,遇到了一个java.lang.NullPointerException。具体的错误信息如下:
java.lang.NullPointerException
at org.apache.hadoop.io.serializer.SerializationFactory.getSerializer(SerializationFactory.java:73)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:797)
at org.apache.hadoop.mapred.MapTask$NewOutputCollector.<init>(MapTask.java:524)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:613)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:305)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:177)
经过自己一段时间的调试没有任何结果,后来在网上浏览了一段时间,找到了解决问题的方法。出现这种错误多半是map或者reduce中的数据类型出错了。例如:Text,IntWritable等。
解决方法:
确定map和reduce中的数据类型是否正确,各个环节的key/value的类型是否匹配,包括job驱动中同import导入的数据
类型是否正确。我出现这种错误的原因就是Text的类型通过eclipse自动导入的时候,导入的是javax.xml.soap.Text不是org.apache.hadoop.io.Text。