当前位置: 首页 > 面试题库 >

为什么hadoop无法识别我的Map类?

林彬
2023-03-14
问题内容

我正在尝试在hadoop 2.2.0上运行我的PDFWordCount映射减少程序,但出现此错误:

13/12/25 23:37:26 INFO mapreduce.Job: Task Id : attempt_1388041362368_0003_m_000009_2, Status : FAILED
Error: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class PDFWordCount$MyMap not found
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1720)
    at org.apache.hadoop.mapreduce.task.JobContextImpl.getMapperClass(JobContextImpl.java:186)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:721)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:339)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:162)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:157)
Caused by: java.lang.ClassNotFoundException: Class PDFWordCount$MyMap not found
    at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:1626)
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:1718)
    ... 8 more

它说我的地图类未知。我在3个VM上有一个带有namenod和2个datanodes的集群。

我的主要功能是:

public static void main(String[] args) throws Exception {
    Configuration conf = new Configuration();
    @SuppressWarnings("deprecation")
    Job job = new Job(conf, "wordcount");

    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);

    job.setMapperClass(MyMap.class);
    job.setReducerClass(MyReduce.class);

    job.setInputFormatClass(PDFInputFormat.class);
    job.setOutputFormatClass(TextOutputFormat.class);

    FileInputFormat.addInputPath(job, new Path(args[0]));
    FileOutputFormat.setOutputPath(job, new Path(args[1]));

    job.setJarByClass(PDFWordCount.class);
    job.waitForCompletion(true);
  }

如果我使用以下命令运行jar:

yarn jar myjar.jar PDFWordCount /in /out

/in正如我job.setJarByClass(PDFWordCount.class);在上面看到的那样,它作为输出路径并给我错误,而我的主要功能却在运行。

我已经运行了一个简单的WordCount项目,该项目的主要功能与该主要功能完全相同,并且使用yarn jar wc.jar MyWordCount /in2 /out2它来运行它,我使用它并使其完美运行。

我不明白是什么问题!

更新:
我试图将我的工作从这个项目转移到我成功使用的wordcount项目。我构建了一个程序包,将相关文件从pdfwordcount项目复制到了该程序包中,然后导出了该项目(我的main并未更改为used
PDFInputFormat,所以除了将Java文件移动到新程序包之外,我什么也没做。)它没有用。我从其他项目中删除了文件,但是没有用。我将Java文件移回默认软件包,但没有用!

怎么了?!


问题答案:

即使我不明白实际上是什么问题,我也找到了解决此问题的方法。

当我想将Java项目导出为eclipse中的jar文件时,我有两个选择:

  1. Extract required libraries into generated JAR
  2. Package required libraries into generated JAR

我不知道到底有什么区别,还是不重要。我曾经选择第二个选项,但是如果选择第一个选项,则可以使用以下命令运行我的作业:

yarn jar pdf.jar /in /out


 类似资料:
  • 问题指出: 创建一个具有长度和宽度双属性的矩形类。默认构造函数应该将这些属性设置为1。提供计算矩形周长和面积的方法,以及两个数据字段的访问器和赋值器。length和width的mutator方法应该验证传入的数字是否大于0.0且小于20.0——如果不符合这些标准,就不应该更改字段的值。 在同一文件中编写一个驱动程序类来测试您的矩形类。它应该提示用户输入矩形的长度和宽度,然后打印出矩形的面积和周长。

  • Android Studio(版本4.1.1)在我的xml布局文件中为使用onClick的视图显示警告(警告id: UsingOnClickInXml,平台的旧版本不正确支持解析Android:onClick)。当我运行代码检查器时,这些也会显示在lint警告中。Android Studio似乎没有使用我在build.gradle (app)文件中设置的minSdkVerion (16)。 以下是

  • 我有以下JSON: 我正试图用杰克逊把它转换成pojo。这就是我所拥有的: 我的另一个类有字段,这些字段被命名为JSON中的元素,并具有getter和setter。 上面的代码可以工作,但是当我只是创建一个没有配置的基本ObjectMapper对象时,它不起作用。这是为什么?这是堆栈跟踪错误: 这是我的pojo类,包含getter和setter:

  • 我已经检查并删除了查询的各个部分,试图隔离它来自哪里。经过几个小时和削减每一栏,它仍然在发生。 有人知道雪花诊断查询(像Redshift有)可以告诉我问题发生的特定列吗?

  • 问题内容: URL u =新URL(“ telnet://route-server.exodus.net”); 这行正在生成: java.net.MalformedURLException:未知协议:telnet 而且我遇到其他以“ news://”开头的URL的类似问题 这些是从ODP提取的URL,所以我不明白为什么会出现此类异常。 问题答案: 问题 Java 之所以抛出a,是因为它找不到该协议

  • 总的来说,我对tomcat和JSP很陌生,我还搜索了无数其他问题,这些问题似乎有完全相同的问题,但没有一个能解决我的问题。 服务器结构包含(以及其他内容,如css文件和其他html资源)一个jsp文件和一个java类: jsp文件包含: Java 类的源文件如下所示: 现在,我(重新)启动tomcat服务器,用浏览器访问jsp文件,并得到以下错误消息: 无法编译 JSP 的类:在生成的 java