java - Hadoop <init> 没有这样的方法异常

标签 java hadoop mapreduce

当我从命令提示符运行 Hadoop .jar 文件时,它会抛出一个异常,指出没有 StockKey 方法这样的方法。

StockKey 是我为我自己的 key 类型定义的自定义类。

这是一个异常(exception):

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)

最佳答案

对于可写对象、映射器、reducer 等类,当出现此类错误时,还有一件事需要检查。

如果类是内部类,请确保它被声明为static(即不需要封闭类的实例)。否则,Hadoop 无法实例化您的内部类并会给出同样的错误 - 需要一个零参数的构造函数。

关于java - Hadoop <init> 没有这样的方法异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11446635/

相关文章:

hadoop - 瘤胃和定制柜台

对同一日期使用不同方法的 java.util.Date 类给出不同的输出

hadoop - 我已经配置了hadoop完全分布式模式,它可以正常工作,但是现在重新启动后,我的namenode无法启动

java - 如何在 Hadoop 上的 OpenNLP 中训练意大利语模型?

hadoop - 如何为 hadoop 流指定分区程序

java - 在hadoop mapreduce中读取2个输入文件

java - 为什么我收到 java.lang.NullPointerException?

java - 为 scala.js 指定 mainClass?

java - 给定加速度计的加速度,如何对模块的空间位置进行建模?

hadoop - 使用 sed 将 JAVA_HOME 环境变量添加到 hadoop-env,sh 文件