我正在运行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时,我可以看到其中的所有类。我已经尝试了几乎所有在线提到的建议,包括
设置JarClass后添加job.waitForCompletion(true); 这样做会执行程序,但最后给出一个非法状态错误,Node处于Running状态而不是Define.Because因为我猜我无法看到所需格式的输出。我阅读了文档,它说首先你需要设置值,然后提交作业,否则很可能会出现这个错误。
设置job.setJar(); 当我这样做时,我发现JAR没有被发现异常。
尝试设置Classpath和HadoopClasspath,但没有运气。
我不确定Hadoop在哪里获取所有类文件。