Hadoop 无法执行映射/减少作业
近两天来,我一直在想如何执行Map/Reduce作业。我一直收到一个ClassNotFound异常 我已经使用ClouderaCDH4.3.0在Ubuntu中安装了Hadoop集群。java文件(DemoJob.java不在任何包中)位于名为inputs的文件夹中,所有必需的jar文件都位于inputs/lib中 我跟着做参考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
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/”。但我的系统中根本没有这些文件夹)javac -cp "inputs/lib/hadoop-common.jar:inputs/lib/hadoop-map-reduce-core.jar" -d Demo inputs/DemoJob.java
jar cvf Demo.jar Demo
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运行作业,您将获得大量输出,但其中一些输出将确切地告诉您缺少哪个类。