classnotfoundexception:在伪模式下运行hadoop3alpha时,找不到类wordcount$tokenizermapper

vh0rcniy  于 2021-06-02  发布在  Hadoop
关注(0)|答案(0)|浏览(573)

我运行的是ubuntu16.10,已经在单节点集群(伪分布式模式)中安装了hadoop3.0.0alpha1。我正在尝试运行简单的字数计算程序。当我运行程序时没有Yarn,它工作。但是当我使用yarn运行它时,我得到了类notfoundexception。这是我的密码

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类有两个内部类-tokenizermapper和intsumreader,它们分别扩展了mapper和reducer。我用命令运行这个
bin/hadoop jar/wordcount.jar wordcount input/word\u count/books/*output/word\u count\v2
我得到的错误是
错误:java.lang.runtimeexception:java.lang.classnotfoundexception:找不到类wordcount$tokenizermapper
当我执行jar-tf wordcount.jar时,我可以看到其中的所有类。我尝试了网上提到的几乎所有可能的建议,包括,
设置jarclass后,add job.waitforcompletion(true);这样做会执行程序,但最后会出现一个非法的状态错误,节点处于运行状态,而不是定义状态。因此,我想我无法看到所需格式的输出。我看了文档,它说首先需要设置值,然后提交作业,否则很可能会出现此错误。
set job.setjar();当我这样做时,我得到jar not found异常。
尝试设置类路径和hadoop类路径,但没有运气。
我不确定hadoop从哪里得到所有的类文件。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题