无法执行Map / Reduce作业

时间:2013-08-07 14:25:10

标签: hadoop mapreduce

我一直在努力弄清楚如何执行我的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 / hadoop / :/ usr / lib / hadoop / client-0.20 / ”。但我没有那些我系统中的文件夹)

  2. 使用以下方法创建jar文件:

    jar cvf Demo.jar Demo
    
  3. 将2个输入文件移动到HDFS (现在这是我感到困惑的地方。我是否需要将jar文件移动到HDFS?它在链接中没有这么说。但如果它不在HDFS中,那么hadoop jar ..命令怎么样? work?我的意思是它如何组合Linux系统中的jar文件和HDFS中的输入文件?)

  4. 我使用以下代码运行代码:

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

    有人请帮忙。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

最后找出了问题所在。我没有使用文件夹创建jar文件,而是使用
jar -cvf Demo.jar *.class

直接从.class文件创建了jar文件。

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