当前位置: 代码迷 >> 综合 >> 运行MapReduce程序报错--java.lang.Exception: java.lang.RuntimeException: java.lang.NoSuchMethodException
  详细解决方案

运行MapReduce程序报错--java.lang.Exception: java.lang.RuntimeException: java.lang.NoSuchMethodException

热度:57   发布时间:2023-12-04 15:32:07.0

报错描述

编写的MapReduce是用一个 .java文件,Mapper和Reducer都是内部类,运行时报如下错误:

java.lang.Exception: java.lang.RuntimeException: java.lang.NoSuchMethodException: com.gyt.collaborativeFiltering.CollaborativeFilteringByUser$ColFilterMapper.<init>()at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462)at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:522)
Caused by: java.lang.RuntimeException: java.lang.NoSuchMethodException: com.gyt.collaborativeFiltering.CollaborativeFilteringByUser$ColFilterMapper.<init>()at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:134)at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:745)at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:243)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NoSuchMethodException: com.gyt.collaborativeFiltering.CollaborativeFilteringByUser$ColFilterMapper.<init>()at java.lang.Class.getConstructor0(Class.java:3082)at java.lang.Class.getDeclaredConstructor(Class.java:2178)at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:128)... 8 more

解决办法

在Mapper和Reducer类前加上 static,如:
在这里插入图片描述

好像并没有什么技术问题,就单纯的是Java的语法规则,静态与非静态的区别。

完!

  相关解决方案