我使用以下语句使用this blog中的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
1hduser @ 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位置.
解决方法:
我能够重现你的问题.问题是你在创建jar的地方.
基本上,您打包到jar中的目录会使jar文件在查找主类文件时感到困惑.相反,如果你尝试做:
/usr/lib/jvm/jdk1.7.0_07/bin/jar cf Dictionary.jar /home/hduser/dir/Dictionary.class
即将类文件专门打包到jar中然后运行:
/usr/local/hadoop/bin/hadoop jar Dictionary.jar Dictionary
只要你的类中有一个名为Dictionary的main函数,它就可以正常工作.
问题是当你在jar中打包一个完整的目录时,jar也需要知道目录结构以找到类文件.为此,我们需要一个定义良好的包层次结构来定义类位置.因此,当您将jar / home / hduser / dir /打包到jar中时,jar不知道位于此目录结构深处的类文件的位置.为此,您需要根据目录结构将名称包添加到.java文件中,例如home.hduser.dir,并在运行hadoop jar命令时指定具有包结构的类名,例如home.hduser.dir .字典.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。