当我从命令提示符运行Hadoop .jar文件时,它将引发异常,提示没有此类方法StockKey方法。
StockKey是为我自己的密钥类型定义的自定义类。
这是例外:
12/07/12 00:18:47 INFO mapred.JobClient: Task Id : attempt_201207082224_0007_m_000000_1, Status : FAILED java.lang.RuntimeException: java.lang.NoSuchMethodException: SecondarySort$StockKey. <init>() at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:115) at org.apache.hadoop.io.WritableComparator.newKey(WritableComparator.java:109) at org.apache.hadoop.io.WritableComparator.<init>(WritableComparator.java:95) at org.apache.hadoop.io.WritableComparator.get(WritableComparator.java:51) at org.apache.hadoop.mapred.JobConf.getOutputKeyComparator(JobConf.java:795) at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:817) at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:383) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:325) at org.apache.hadoop.mapred.Child$4.run(Child.java:270) 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:1127) at org.apache.hadoop.mapred.Child.main(Child.java:264)
您必须在键类中提供一个空的默认构造函数。Hadoop使用反射,它无法猜测要馈送的任何参数。
因此,只需添加默认构造函数:
public StockKey(){}