当前位置: 首页 > 知识库问答 >
问题:

Hadoop中的ClassNotFoundException

颛孙轩昂
2023-03-14

我正在使用Hadoop mapreduce编写代码来获取不同长度的子字符串。示例给出了字符串“ZYXCBA”和长度3。我的代码必须返回所有可能的字符串,长度为3(“ZYX”、“YXC”、“XCB”、“CBA”),长度为4(“ZYXC”、“YXCB”、“XCBA”),最后返回长度为5(“ZYXCB”、“YXCBA”)。

在map阶段,我做了以下工作:

key=我想要的子字符串的长度

value=“ZYXCBA”。

所以映射器输出是

3,"ZYXCBA"
4,"ZYXCBA"
5,"ZYXCBA"

在减少中,我取字符串(“ZYXCBA”)和键3来获取长度为3的所有子字符串。4,5也是如此。结果收集在ArrayList中。

我正在使用以下命令运行代码:

hduser@Ganesh:~/Documents$ hadoop jar Saishingles.jar hadoopshingles.Saishingles Behara/Shingles/input Behara/Shingles/output

我的代码如下所示:

package hadoopshingles;

import java.io.IOException;

import java.util.ArrayList;

import org.apache.hadoop.fs.Path; 

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Mapper;

import org.apache.hadoop.mapreduce.Reducer;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.mapreduce.Job;

import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;

import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;


public class Saishingles{

public static class shinglesmapper extends Mapper<Object, Text, IntWritable, Text>{

        public void map(Object key, Text value, Context context
                ) throws IOException, InterruptedException {

            String str = new String(value.toString());
            String[] list = str.split(" ");
            int index = Integer.parseInt(list[0]);
            String val = list[1];
            int length = val.length();
            for(int i = index; i <= length; i++)
            {
                context.write(new IntWritable(index),new Text(val));
            }       
        }

     }


public static class shinglesreducer extends Reducer<IntWritable,Text,IntWritable,ArrayList<String>> {
    private ArrayList<String> result = new ArrayList<String>();

    public void reduce(IntWritable key, Text value, Context context
            ) throws IOException, InterruptedException {
        String str = new String(value.toString());
        int newkey = key.get();
        int Tz = str.length() - newkey + 1;
        int position = 0;
        while (position <= Tz)
        {
            result.add(str.substring(position,position + newkey -1));
            position = position + 1;
        }   
        context.write(new IntWritable(newkey),result);
    }
}





public static void main(String[] args) throws Exception {

      Configuration conf = new Configuration();
      Job job = Job.getInstance(conf, "Saishingles");
      job.setJarByClass(hadoopshingles.Saishingles.class);
      job.setMapperClass(shinglesmapper.class);
      job.setCombinerClass(shinglesreducer.class);
      job.setReducerClass(shinglesreducer.class);
      job.setMapOutputKeyClass(IntWritable.class);
      job.setMapOutputValueClass(Text.class);
      job.setOutputKeyClass(IntWritable.class);
      job.setOutputValueClass(ArrayList.class);
      FileInputFormat.addInputPath(job, new Path(args[0]));
      FileOutputFormat.setOutputPath(job, new Path(args[1]));
      System.exit(job.waitForCompletion(true) ? 0 : 1);

}

}

它给出了以下错误:

Exception in thread "main" java.lang.ClassNotFoundException: hadoopshingles.Saishingles
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:278)
    at org.apache.hadoop.util.RunJar.run(RunJar.java:214)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

请帮助我并提前感谢:)

共有1个答案

百里成仁
2023-03-14

我认为您不应该在类名中包含“.class”。

而不是

工作setJarByClass(hadoopshingles.Saishingles.class);

应该是这样的

工作setJarByClass(hadoopshingles.Saishingles);

 类似资料:
  • 问题内容: 我是Hadoop的新手。我正在尝试Wordcount程序。 现在尝试使用多个输出文件。这个链接帮助我做到了。http://hadoop.apache.org/common/docs/r0.19.0/api/org/apache/hadoop/mapred/lib/MultipleOutputs.html 在我的司机课上 而我的降低班级变成了 一切正常,但是我得到了很多文件(对于每个ma

  • 我用OpenCV编写了一个简单的应用程序。我把所有的jar文件放在/usr/local/hadoop/lib文件夹中。在运行hadoop作业时,我收到以下错误:

  • 我决定创建自己的WritableComparable类来学习Hadoop如何使用它。因此,我创建了一个带有两个实例变量(orderNumber cliente)的Order类,并实现了所需的方法。我还为getters/setters/hashcode/equals/toString使用了Eclipse生成器。 相比较而言,我决定只使用orderNumber变量。 我创建了一个简单的MapReduc

  • 问题内容: 我正在尝试使用Hadoop实现一个示例单词计数程序。我已经下载并安装了Hadoop 2.0.0。我想使用Eclipse来执行此示例程序,因为我认为稍后在我的真实项目中,我仅需使用Eclipse。 我找不到类似Hadoop的jar文件hadoop-core.jar以及其他必需的jar文件。我搜索了2.0 hadoop的所有文件夹,但找不到这些文件。这些相同的文件在Hadoop的1.0版本

  • 本文向大家介绍 hadoop中Combiner的作用?相关面试题,主要包含被问及 hadoop中Combiner的作用?时的应答技巧和注意事项,需要的朋友参考一下 解答: combiner是reduce的实现,在map端运行计算任务,减少map端的输出数据。 作用就是优化。 但是combiner的使用场景是mapreduce的map和reduce输入输出一样。  

  • 我正在运行hadoop fs-getmerge,出现以下错误: 每次尝试使用不同的IP时都会出现此错误,在数据节点日志中我没有看到任何可疑错误或警告。 有什么想法吗?