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

2023-11-29

我试图在 hadoop 2.2.0 上运行我的 PDF 字数统计 mapreduce 程序,但出现此错误:

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 个虚拟机上有一个 namenod 和 2 个数据节点。

我的主要功能是这样的:

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并且运行完美。

我不明白有什么问题!

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

怎么了?!


我找到了解决这个问题的方法,尽管我不明白问题到底是什么。

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

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

我不知道到底有什么区别,或者这有什么大不了的。我曾经选择第二个选项,但如果我选择第一个选项,我可以使用以下命令运行我的作业:

yarn jar pdf.jar /in /out
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 hadoop 无法识别我的 Map 类? 的相关文章

随机推荐

  • 在 Microsoft Access 2010 表单和报告中显示多个附件

    最初 我很高兴在 Access 2010 中发现附件字段 这个功能在美学上让我内心的数据库纯粹主义者感到厌烦 但我内心的懒惰在这里负责 从表面上看 它确实看起来可以使一个我当前的项目更容易 更简单 令人高兴的是 它会在表单和报告上自动显示图
  • Objective-C:如何找到数组中最常见的字符串?

    我有一个来自在线数据库的字符串数组 我试图确定最常用的单词 数组内的值会有所不同 但我想检查我正在使用的任何集合或单词中最常见的单词 如果理论上我有以下数组 NSArray stringArray NSArray arrayWithObje
  • 防止执行“继承的”信号处理程序

    当许多派生组件频繁使用该功能时 在 基本 组件中定义信号处理程序非常漂亮 但是 在 QML 中 在派生组件中安装新的处理程序does not替换原来的处理程序 它只是堆叠在它的上面 由于处理程序对于每个信号来说并不是唯一的 它们只是连接 并
  • SQLCLR 程序集部署失败,因为程序集验证失败

    万一其他人遇到这个问题 错误 SQL72014 Net SqlClient 数据提供程序 创建程序集 程序集 Assembly Name 失败 因为程序集 Assembly Name 验证失败 检查引用的程序集是否是最新的 并受信任 对于
  • 设置会话文化

    我的应用程序的每个用户都会选择他们的国家 地区 然后将其存储在 cookie 中并存储以供以后请求 一切正常 但我需要在会话开始时设置文化 我目前正在尝试将 web config 中的区域性设置为 en GB 然后使用 Global asa
  • 如何指定整个路由器的依赖关系?

    class User BaseModel name str token str fake db User name foo token a1 User name bar token a2 async def get user by toke
  • 附加到 NSTextView

    我有一个NSTask 与NSPipe设置 在后台运行 我想在内容进入时输出它们NSTextView output 我正在使用的代码是 NSMutableAttributedString str NSMutableAttributedStri
  • 使用asp.net mvc下载文件

    我尝试使用下面的代码 但这没有用 public FileResult download string path return File path application pdf Server UrlEncode path 我的 Ajax 代
  • 使用数组作为自动过滤条件

    我有以下代码 它将根据第一列中的条件删除行 Sub Strip Dim rng As Range With ActiveSheet Columns I AutoFilter Field 1 Criteria1 70 79 VisibleDr
  • 基于 WIX 的安装程序如何为 32 位和 64 位 Windows 操作系统进行 COM 注册?

    我有一个长期存在的安装程序 它使用RegistryValue来设置 Net COM服务器 安装程序是 32 位的 我希望也为 64 位操作系统设置注册表设置 我的研究表明我需要一个单独的 64 位安装程序来实现此目的 好吧 我怎样才能有一个
  • 是否应该将内存栅栏与互斥获取交换循环(或队列获取加载循环)结合起来,还是应该避免?

    假设重复获取操作 尝试加载或交换值 直到观察到的值是所需值 让我们来cppreference 原子标志示例作为起点 void f int n for int cnt 0 cnt lt 100 cnt while lock test and
  • 追踪单点触控程序中的泄漏的技巧/技巧?

    人们使用什么来追踪内存泄漏 我已经通过代码检查来解决一些问题 但我不知道下一步该做什么 当我的程序变大时我将如何管理问题 我知道我正在泄漏什么类型的对象 但我不知道是什么让它保持活力 在 Windows NET 中 我只需在 Windbg
  • 在 TeamCity 中安装与 Visual Studio 2010 (sln) 兼容的构建代理需要什么?

    我似乎无法在与 VS2010 sln 构建配置兼容的 TeamCity 5 1 2 构建服务器上安装构建代理 在 构建运行程序 下 列出了以下运行程序 Ant Ant build xml 文件的运行器 重复项查找器 NET C 和 VB 重
  • WordPress 更新后插件错误

    我的托管提供商自动更新到 4 5 导致 Visual Composer 插件出现错误 我确实读过这些帖子 WordPress 4 5 更新后插件抛出 TypeError Visual Composer 无法加载并给出 TypeError t
  • 该方法必须返回 boolean 类型的结果,java

    public boolean Winner for int z 0 z lt 3 z if board z null board z board z 3 board z board z 6 return true for int i 0 i
  • 在闪亮的应用程序中选中/取消选中列后,数据表中编辑的单元格将恢复其原始值

    这是这个的延伸post 在编辑可编辑数据表中的任何单元格后 选中 取消选中某些列 该单元格将返回其原始值 我不知道为什么会发生这种情况 有谁知道我该如何解决这个问题 预先非常感谢您 library shiny library DT libr
  • SQL Server 中的转义字符

    我想使用带有转义字符的引号 当有特殊字符时 如何避免出现以下错误 字符串后面未闭合的引号 您可以像这样转义引用 select it s escaped 结果将是 it s escaped
  • 将矩阵转换为一维数组

    我有一个矩阵 32X48 如何将矩阵转换为一维数组 要么用 scan 读取它 要么只在矩阵上执行 as vector 如果您想要按行或按列转置矩阵 您可能需要先转置矩阵 gt m matrix 1 12 3 4 gt m 1 2 3 4 1
  • Android 中的内存分析工具?

    我只是想知道如何在 android 中使用内存分析器工具 请告诉我如何执行此操作以了解特定项目的内存泄漏 有人可以给我一步一步的程序吗 在 Eclipse 中打开 DDMS 透视图 Select Devices tab 选择您想要转储的进程
  • 为什么 hadoop 无法识别我的 Map 类?

    我试图在 hadoop 2 2 0 上运行我的 PDF 字数统计 mapreduce 程序 但出现此错误 13 12 25 23 37 26 INFO mapreduce Job Task Id attempt 1388041362368