hadoop< init>

umuewwlo  于 2021-05-29  发布在  Hadoop
关注(0)|答案(6)|浏览(349)

当我从命令提示符运行hadoop.jar文件时,它抛出一个异常,表示没有这样的方法stockkey method。
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)
kb5ga3dv

kb5ga3dv1#

也面临着同样的问题。通过跟随@thomas和@chris的指针修复。
似乎需要这两种解决方案来解决问题:
当hadoop使用反射和构建大型项目时,需要@thomas的回答。
当使用内部类并从main()调用Map器/还原器时,需要@chris的回答。

sq1bmfud

sq1bmfud2#

对于scala,我也修复了添加默认构造函数的问题,如下所示,

class IntPair (first : IntWritable, second : IntWritable) extends WritableComparable[IntPair] {

     def this() = this(first = new IntWritable(), second = new IntWritable())

     def getFirst () : IntWritable = {
         first
     }

     def getSecond () : IntWritable = {
         second
     }

}
rqdpfwrv

rqdpfwrv3#

您必须在密钥类中提供一个空的默认构造函数。hadoop使用反射,它不能猜测任何要输入的参数。
所以只需添加默认构造函数:

public StockKey(){}
kq0g1dla

kq0g1dla4#

确保您有默认的构造函数,但我还必须添加 static 关键字到我的类声明。也就是说,

public class SecondarySort {
  public static void main(String[] args) {...}

  public static class StockKey extends ... {}
}
ohtdti5x

ohtdti5x5#

没有任何答案对我有帮助。
在我的情况下,它发生时,我降低了建设者的能见度错误或匆忙。
e、 父构造函数是公共的,继承类的构造函数是默认的或受保护的!

lpwwtiir

lpwwtiir6#

对于可写类、Map类、归约类等,当出现这样的错误时,还有一件事需要检查。
如果类是内部类,请确保声明了它 static (即不需要封闭类的示例)。否则,hadoop无法示例化内部类,并将给出相同的错误-需要零参数构造函数。

相关问题