Hadoop 无法执行映射/减少作业

Hadoop 无法执行映射/减少作业,hadoop,mapreduce,Hadoop,Mapreduce,近两天来,我一直在想如何执行Map/Reduce作业。我一直收到一个ClassNotFound异常 我已经使用ClouderaCDH4.3.0在Ubuntu中安装了Hadoop集群。java文件(DemoJob.java不在任何包中)位于名为inputs的文件夹中,所有必需的jar文件都位于inputs/lib中 我跟着做参考 我使用以下方法编译.java文件: javac -cp "inputs/lib/hadoop-common.jar:inputs/lib/hadoop-map-reduc

近两天来,我一直在想如何执行Map/Reduce作业。我一直收到一个ClassNotFound异常

我已经使用ClouderaCDH4.3.0在Ubuntu中安装了Hadoop集群。java文件(DemoJob.java不在任何包中)位于名为inputs的文件夹中,所有必需的jar文件都位于inputs/lib中

我跟着做参考

  • 我使用以下方法编译.java文件:

    javac -cp "inputs/lib/hadoop-common.jar:inputs/lib/hadoop-map-reduce-core.jar" -d Demo inputs/DemoJob.java 
    
    jar cvf Demo.jar Demo
    
    (在链接中,它说-cp应该是“/usr/lib/hadoop/:/usr/lib/hadoop/client-0.20/”。但我的系统中根本没有这些文件夹)

  • 使用以下命令创建jar文件:

    javac -cp "inputs/lib/hadoop-common.jar:inputs/lib/hadoop-map-reduce-core.jar" -d Demo inputs/DemoJob.java 
    
    jar cvf Demo.jar Demo
    
  • 将2个输入文件移动到HDFS (这就是我困惑的地方。我是否也需要将jar文件移动到HDFS?链接中没有这样说。但是如果它不在HDFS中,那么hadoop jar..命令是如何工作的?我的意思是它如何将Linux系统中的jar文件和HDFS中的输入文件结合起来?)

  • 我使用以下方法运行代码:

    hadoop jar Demo.jar DemoJob /Inputs/Text1.txt /Inputs/Text2.txt /Outputs
    
  • 我不断得到
    ClassNotFoundException:DemoJob


    有人请帮忙。

    类未找到异常仅表示加载类DemoJob时未找到某些类。缺少的类可能是DemoJob引用(例如导入)的类。我认为问题在于类路径中没有/usr/lib/hadoop/:/usr/lib/hadoop/client-0.20/文件夹(类)。应该存在但不存在的类可能触发了类not found异常。

    最终找到了问题所在。我没有从文件夹中创建jar文件,而是直接从.class文件中使用
    jar-cvf Demo.jar*.class


    这解决了ClassNotFound错误。但我不明白为什么它不在早些时候起作用。即使在我从文件夹创建jar文件时,我在执行类文件时也提到了文件夹名称:
    hadoop jar Demo.jar Demo.DemoJob/Inputs/Text1.txt/Inputs/Text2.txt/Outputs

    ,但错误表明它无法找到DemoJob类,这是我的主映射/减少类。我假设丢失的文件夹只用于代码中使用的jar文件。但是我已经从另一个路径链接了所需的jar文件。那么这还不够吗?可能是DemoJob丢失了,但是从消息中您只知道缺少了一些类。如果使用JVM参数-verbose运行作业,您将获得大量输出,但其中一些输出将确切地告诉您缺少哪个类。