Hadoop:ClassNotFound在MapReduce处出错



只是在提出问题之前说明我的设置,

Hadoop Version : 1.0.3

默认的WordCount示例运行良好。但是当我根据这个页面创建了一个新的WordCount程序时http://hadoop.apache.org/common/docs/r0.20.2/mapred_tutorial.html

我编译了它,并以教程中给出的类似方式对其进行了抨击。但当我使用运行它时

/usr/local/hadoop$ bin/hadoop jar wordcount.jar org.myorg.WordCount ../Space/input/ ../Space/output

我得到了以下错误,

java.lang.RuntimeException: java.lang.ClassNotFoundException: org.myorg.WordCount$Map

整个错误日志已粘贴到此处:http://pastebin.com/GNbsfpg3

我哪里错了?

错误消息中有一些线索:

2014年7月12日18:09:38 WARN地图。JobClient:使用GenericOptionsParser来分析参数。应用程序应该实现相同的Tool。

2014年7月12日18:09:38 WARN地图。JobClient:没有作业jar文件集。可能找不到用户类。请参见JobConf(类)或JobConf#setJar(字符串)。

你需要与我们共享你的驱动程序代码(你在哪里创建和配置作业),但你似乎没有配置"作业jar",也就是说,作业客户端没有得到你的代码绑定到jar中的提示,因此当你运行作业时,当映射实例实际运行时,找不到类。

你可能想要类似的东西

jobConf.setJarByClass(org.myorg.WordCount.class);

我遇到了完全相同的问题,并通过在主代码上添加以下内容来解决

jobConf.setJarByClass(org.myorg.WordCount.class);

在这里你可以找到完整的主要功能Configuration conf=新配置();

    Job job = new Job(conf, "wordcount");
    job.setJarByClass(org.myorg.WordCount.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
job.setMapperClass(Map.class);
job.setReducerClass(Reduce.class);
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
job.waitForCompletion(true);

我也得到了上面的错误。我所做的是,我只是将jar文件复制到集群的所有节点中,并设置类路径,使每个从属节点都可以访问这个jar。这对我很有效。它可能会对你有所帮助。

在运行Job之前,设置conf如下:conf.setJar("您的jar文件名");它可能会起作用,试试看!

相关内容

  • 没有找到相关文章

最新更新