Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
螺纹“中的异常;主&x201D;java.lang.ClassNotFoundException:MaxTemperature_Java_Hadoop_Mapreduce - Fatal编程技术网

螺纹“中的异常;主&x201D;java.lang.ClassNotFoundException:MaxTemperature

螺纹“中的异常;主&x201D;java.lang.ClassNotFoundException:MaxTemperature,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我正在运行单节点hadoop,在尝试运行mapreduce应用程序后,出现以下异常: 线程“main”java.lang.ClassNotFoundException中的异常:src.main.java.com.hadoop.bi.MapReduce.MaxTemperature 在java.net.URLClassLoader$1.run(URLClassLoader.java:366) 在java.net.URLClassLoader$1.run(URLClassLoader.java:35

我正在运行单节点hadoop,在尝试运行mapreduce应用程序后,出现以下异常:

线程“main”java.lang.ClassNotFoundException中的异常:src.main.java.com.hadoop.bi.MapReduce.MaxTemperature 在java.net.URLClassLoader$1.run(URLClassLoader.java:366) 在java.net.URLClassLoader$1.run(URLClassLoader.java:355) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.net.URLClassLoader.findClass(URLClassLoader.java:354) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:425) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:358) 位于java.lang.Class.forName0(本机方法) 位于java.lang.Class.forName(Class.java:270) 位于org.apache.hadoop.util.RunJar.main(RunJar.java:201)

我在终端运行的是:

[root@devMapReduce]#hadoop jar target/MapReduce-0.0.1-SNAPSHOT.jar src/main/java/com/hadoop/bi/MapReduce/MaxTemperature sample.txt/out

以下是我的MaxTempreture课程内容:

    package com.hadoop.bi.MapReduce;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class MaxTemperature {

  public static void main(String[] args) throws Exception {
    if (args.length != 2) {
      System.err.println("Usage: MaxTemperature <input path> <output path>");
      System.exit(-1);
    }
    Configuration conf = new Configuration();
    Job job = new Job(conf, "MaxTemperature");  
    job.setJarByClass(MaxTemperature.class);


    FileInputFormat.addInputPath(job, new Path(args[0]));
    FileOutputFormat.setOutputPath(job, new Path(args[1]));

    job.setMapperClass(MaxTemperatureMapper.class);
    job.setReducerClass(MaxTemperatureReducer.class);

    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);

    System.exit(job.waitForCompletion(true) ? 0 : 1);
  }
}
package com.hadoop.bi.MapReduce;
导入org.apache.hadoop.conf.Configuration;
导入org.apache.hadoop.fs.Path;
导入org.apache.hadoop.io.IntWritable;
导入org.apache.hadoop.io.Text;
导入org.apache.hadoop.mapreduce.Job;
导入org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
导入org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
公共类最大温度{
公共静态void main(字符串[]args)引发异常{
如果(参数长度!=2){
System.err.println(“用法:MaxTemperature”);
系统退出(-1);
}
Configuration conf=新配置();
作业作业=新作业(配置,“MaxTemperature”);
job.setJarByClass(MaxTemperature.class);
addInputPath(作业,新路径(args[0]);
setOutputPath(作业,新路径(args[1]);
setMapperClass(MaxTemperatureMapper.class);
job.setReducerClass(MaxTemperatureReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
系统退出(作业等待完成(真)?0:1;
}
}

我在互联网上关注了大多数类似的问题,但我还没有找到解决办法。有人知道问题是什么以及如何解决吗

尝试删除
抛出异常
语句

您不需要在main函数中声明抛出语句,因为它是入口点,也是调用堆栈上的最后一个方法。它不需要向任何人报告


我对JVM了解不多,但我猜它是在试图寻找一个特定的main签名,并添加
抛出异常
,使JVM无法识别main方法。

尝试删除
抛出异常
语句

您不需要在main函数中声明抛出语句,因为它是入口点,也是调用堆栈上的最后一个方法。它不需要向任何人报告


我对JVM知道的不多,但我猜它是在试图寻找一个特定的main签名,并添加
抛出异常
,使JVM无法识别main方法。

执行所述类的命令行不正确。您正在提供包含文件夹的路径。相反,您应该给出完全限定的类名

[root@devMapReduce]#hadoop jar目标/MapReduce-0.0.1-SNAPSHOT.jar src/main/java/com/hadoop/bi/MapReduce/maxtempture sample.txt/out

应改为

[root@devMapReduce]#hadoop jar目标/MapReduce-0.0.1-SNAPSHOT.jar com/hadoop/bi/MapReduce/maxtempture sample.txt/out

按照你的计划,继承人


希望这有帮助。

执行上述类的命令行不正确。您正在提供包含文件夹的路径。相反,您应该给出完全限定的类名

[root@devMapReduce]#hadoop jar目标/MapReduce-0.0.1-SNAPSHOT.jar src/main/java/com/hadoop/bi/MapReduce/maxtempture sample.txt/out

应改为

[root@devMapReduce]#hadoop jar目标/MapReduce-0.0.1-SNAPSHOT.jar com/hadoop/bi/MapReduce/maxtempture sample.txt/out

按照你的计划,继承人


希望这有帮助。

我认为语法应该是

hadoop jar target/MapReduce-0.0.1-SNAPSHOT.jar com.hadoop.bi.MapReduce.MaxTemperature sample.txt /out

我认为语法应该是这样的

hadoop jar target/MapReduce-0.0.1-SNAPSHOT.jar com.hadoop.bi.MapReduce.MaxTemperature sample.txt /out

在做这件事之前,你编译过Java源文件吗?我使用maven构建和创建了一个jar文件。你必须确保你的jar包含你编写的任何和所有类/库:我通常使用maven插件(比如shaded插件)来实现这一点,以便在一个jar中为你提供一个插件:打开你的.jar,看看它是否真的包含了你所需要的类expect。我检查了,它包含我的主类。它包含MaxTemperatureMapper和MaxTemperatureReducer类吗?在执行此操作之前是否编译了Java源文件?我使用maven构建并创建了一个jar文件。您必须确保您的jar包含您编写的任何和所有类/库:我通常使用maven进行此操作例如shaded plugin这样的插件可以为您提供一个一体式jar:打开您的.jar,看看它是否真的包含您期望的类。我检查了它,它包含了我的主类。它是否包含MaxTemperatureMapper和MaxTemperatureReducer类?允许
main
方法抛出异常允许
main
方法抛出异常抛出异常