无法执行映射/减少作业



我已经试着弄清楚如何执行我的Map/Reduce作业将近两天了。我一直收到ClassNotFound异常。

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

我紧随其后http://www.cloudera.com/content/cloudera-content/cloudera-docs/HadoopTutorial/CDH4/Hadoop-Tutorial/ht_topic_5_2.html以供参考。

  1. 我使用编译.java文件

    javac -cp "inputs/lib/hadoop-common.jar:inputs/lib/hadoop-map-reduce-core.jar" -d Demo inputs/DemoJob.java 
    

    (在链接中,它说-cp应该是"/usr/lib/hadop/:/usr/lib/haop/client-0.20/"。但我的系统中根本没有这些文件夹)

  2. 创建jar文件使用:

    jar cvf Demo.jar Demo
    
  3. 将2个输入文件移动到HDFS(现在我很困惑。我也需要把jar文件移到HDFS吗?链接中没有这么说。但如果它不在HDFS中,那么hadoop-jar..命令是如何工作的?我的意思是,它如何将Linux系统中的jar文件和HDFS中的输入文件结合起来?)

  4. 我运行我的代码使用:

    hadoop jar Demo.jar DemoJob /Inputs/Text1.txt /Inputs/Text2.txt /Outputs
    

我一直得到ClassNotFoundException : DemoJob

有人请帮忙。

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

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

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

相关内容

  • 没有找到相关文章

最新更新