我使用这个博客中的java文件创建了一个jar文件,使用以下语句
javac -classpath /usr/local/hadoop/hadoop-core-1.0.3.jar -d /home/hduser/dir Dictionary.java /usr/lib/jvm/jdk1.7.0_07/bin/jar cf Dictionary.jar /home/hduser/dir
现在我已经尝试在hadoop中通过点击和尝试各种命令来运行这个jar
1 hduser@ubuntu:~$ /usr/local/hadoop/bin/hadoop jar Dictionary.jar
输出:
Warning: $HADOOP_HOME is deprecated.
RunJar jarFile [mainClass] args...
2 hduser@ubuntu:~$ /usr/local/hadoop/bin/hadoop jar Dictionary.jar Dictionary
输出:
Warning: $HADOOP_HOME is deprecated.
Exception in thread "main" java.lang.ClassNotFoundException: Dictionary
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at org.apache.hadoop.util.RunJar.main(RunJar.java:149)
如何在hadoop中运行jar?我有正确的dfs位置根据我的计划需要。
3条答案
按热度按时间mrzz3bfm1#
使用下面的命令从cli运行hadoop jar文件。
oyxsuwqo2#
我能重现你的问题。问题是在哪里创建jar。
基本上,打包到jar中的目录在定位主类文件时混淆了jar文件。相反,如果您尝试:
i、 e.将类文件专门打包到jar中,然后运行:
只要在类中有一个名为dictionary的主函数,它就可以正常工作。
问题是,当您将完整目录打包到jar中时,jar还需要知道目录结构以定位类文件。为此,我们需要一个定义良好的包层次结构来定义类位置。所以,当你打包的时候
/home/hduser/dir/
在jar中,jar不知道类文件的位置,类文件位于这个目录结构的深处。为此,您需要将包名称添加到.java
文件,例如home.hduser.dir
在运行hadoop jar
命令指定具有包结构的类名,例如home.hduser.dir.Dictionary
.hwamh0ep3#
我也遇到了同样的问题,控制台没有显示太多信息,只是
runjar jarfile[mainclass]参数。。。
请检查jar中的包文件夹位置,作为一个简单的方法,请尝试是包以com.company开头。。。
打开jar时,“com”文件夹应该是第一级文件夹