ClassNotFoundException:在伪模式下运行Hadoop3alpha时未找到类WordCount $ TokenizerMapper

时间:2017-02-11 14:22:42

标签: hadoop classnotfound

我正在运行Ubuntu 16.10并在单节点集群中安装了Hadoop3.0.0Alpha1(伪分布式模式)。我正在尝试运行简单的字数统计程序。当我运行没有纱线的程序时,它的工作原理。但是当我使用纱线运行它时,我发现类没有发现异常。这是我的代码

public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf, "word count");
        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));

        job.setJarByClass(WordCount.class);
        job.setMapperClass(TokenizerMapper.class);
        job.setCombinerClass(IntSumReducer.class);
        job.setReducerClass(IntSumReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        //job.waitForCompletion(true);
        System.exit(job.waitForCompletion(true) ? 0 : 1);
      }

这个WordCount类有2个内部类 - TokenizerMapper和IntSumReader,它扩展了Mappper和Reducer resp。我正在使用命令

运行它
  

bin / hadoop jar /WordCount.jar WordCount输入/ word_count / books / * output / word_count_v2

我得到的错误是

  

错误:java.lang.RuntimeException:java.lang.ClassNotFoundException:   未找到类WordCount $ TokenizerMapper

当我做jar -tf WordCount.jar时,我可以看到其中的所有类。我已经尝试了几乎所有在线提到的建议,包括

  1. 设置JarClass后添加job.waitForCompletion(true); 这样做会执行程序,但最后给出一个非法状态错误,Node处于Running状态而不是Define.Because因为我猜我无法看到所需格式的输出。我阅读了文档,它说首先你需要设置值,然后提交作业,否则很可能会出现这个错误。

  2. 设置job.setJar(); 当我这样做时,我发现JAR没有被发现异常。

  3. 尝试设置Classpath和HadoopClasspath,但没有运气。

  4. 我不确定Hadoop在哪里获取所有类文件。

0 个答案:

没有答案