博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MapReduce——java.lang.NoSuchMethodException错误原因
阅读量:4094 次
发布时间:2019-05-25

本文共 1230 字,大约阅读时间需要 4 分钟。

        运行环境:虚拟机,Ubuntu16,Ubuntu Server 做Hadoop集群(一主两从),编程软件eclipse。

       集群搭建和eclipse环境配置没有问题,其他的MapReduce程序可以正常运行,在运行某一程序时出现

java.lang.Exception: java.lang.RuntimeException: java.lang.NoSuchMethodException: weatherMax.Weather$WeatherMapper.<init>()  

没有匹配的Mapper和Reduce方法。

试了很多方法,最后发现是自己的主类中定义Mapper函数和Reduce函数时候是按public class定义的:

public class WeatherMapper extends Mapper
public class WeatherReduce extends Reducer

随后改为 private static class,再次运行,程序正常。难道是Java语法问题吗,我做了一下尝试:

public class PersonDemo{	public static void main(String args[]){		System.out.println("hi");	}		class XiaoBai {}	//正确	public class XiaoHei {}	//正确}class XiaoBai2 {}	//正确public class XiaoHei2 {}	//错误,error: class XiaoHei is public, should be declared in a file named XiaoHei.java//由于Java程序里面每个类都会生成一个 .class 文件,上面四个类对应的生成 .class 文件如下,在主类中定义的//类会用 “$” 符号表,如下://Person.class  PersonDemo.class  PersonDemo.java  PersonDemo$XiaoBai2.class  PersonDemo$XiaoHei2.class 
从上面可以看出来,
Java程序中只要求:

同一个java文件(就是一个后缀为java的文本)只能有一个pulic class  

如果向使用多个class 有两中办法  
     1 在你的java文件里的public class类外面写class类 前面不能加public 

     2 在你的java文件里的public class类里面写public class类作为成员 

Java内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类 ,具体参考见如下链接:

结论:Hadoop程序中的Mapper类和Reduce类的定义使用private static,至于为什么,以后深入研究以后再来填坑吧!

转载地址:http://intii.baihongyu.com/

你可能感兴趣的文章
责任链模式 Chain of Responsibility
查看>>
高并发与大数据解决方案概述
查看>>
解决SimpleDateFormat线程安全问题NumberFormatException: multiple points
查看>>
MySQL数据库存储引擎简介
查看>>
处理Maven本地仓库.lastUpdated文件
查看>>
Kafka | 请求是怎么被处理的?
查看>>
Java并发编程1-线程池
查看>>
CentOS7,玩转samba服务,基于身份验证的共享
查看>>
计算机网络-网络协议模型
查看>>
计算机网络-OSI各层概述
查看>>
Java--String/StringBuffer/StringBuilder区别
查看>>
mySQL--深入理解事务隔离级别
查看>>
分布式之redis复习精讲
查看>>
数据结构与算法7-栈
查看>>
线性数据结构学习笔记
查看>>
数据结构与算法14-跳表
查看>>
Java并发编程 | 一不小心就死锁了,怎么办?
查看>>
(python版)《剑指Offer》JZ01:二维数组中的查找
查看>>
(python版)《剑指Offer》JZ06:旋转数组的最小数字
查看>>
(python版)《剑指Offer》JZ13:调整数组顺序使奇数位于偶数前面
查看>>