我一直在努力弄清楚如何执行我的Map / Reduce工作近两天了。我一直得到一个ClassNotFound异常。
我使用Cloudera CDH4.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
(在链接中,它说-cp应为“/ usr / lib / hadoop / :/ usr / lib / hadoop / client-0.20 / ”。但我没有那些我系统中的文件夹)
使用以下方法创建jar文件:
jar cvf Demo.jar Demo
将2个输入文件移动到HDFS (现在这是我感到困惑的地方。我是否需要将jar文件移动到HDFS?它在链接中没有这么说。但如果它不在HDFS中,那么hadoop jar ..命令怎么样? work?我的意思是它如何组合Linux系统中的jar文件和HDFS中的输入文件?)
我使用以下代码运行代码:
hadoop jar Demo.jar DemoJob /Inputs/Text1.txt /Inputs/Text2.txt /Outputs
我不断获得ClassNotFoundException : DemoJob
。
有人请帮忙。
答案 0 :(得分:0)
未找到类的异常仅表示在加载类DemoJob时未找到某个类。缺少的类可能是DemoJob引用的类(例如,导入)。我认为问题是你的类路径中没有/usr/lib/hadoop/:/usr/lib/hadoop/client-0.20/文件夹(类)。这是应该存在的类,但不是可能触发类未找到异常。
答案 1 :(得分:0)
最后找出了问题所在。我没有使用文件夹创建jar文件,而是使用
jar -cvf Demo.jar *.class
这解决了ClassNotFound错误。但我不明白为什么它不能提前工作。即使我从文件夹创建了jar文件,我确实在执行类文件时提到了文件夹名称:
hadoop jar Demo.jar Demo.DemoJob /Inputs/Text1.txt /Inputs/Text2.txt /Outputs