如何在hadoop中运行jar文件?

ruarlubt  于 2021-05-30  发布在  Hadoop
关注(0)|答案(3)|浏览(502)

我使用这个博客中的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位置根据我的计划需要。

mrzz3bfm

mrzz3bfm1#

使用下面的命令从cli运行hadoop jar文件。

hadoop jar <jarFileName> <mainClassname> <AnyCommandLineArguements>
oyxsuwqo

oyxsuwqo2#

我能重现你的问题。问题是在哪里创建jar。
基本上,打包到jar中的目录在定位主类文件时混淆了jar文件。相反,如果您尝试:

/usr/lib/jvm/jdk1.7.0_07/bin/jar cf Dictionary.jar /home/hduser/dir/Dictionary.class

i、 e.将类文件专门打包到jar中,然后运行:

/usr/local/hadoop/bin/hadoop jar Dictionary.jar Dictionary

只要在类中有一个名为dictionary的主函数,它就可以正常工作。
问题是,当您将完整目录打包到jar中时,jar还需要知道目录结构以定位类文件。为此,我们需要一个定义良好的包层次结构来定义类位置。所以,当你打包的时候 /home/hduser/dir/ 在jar中,jar不知道类文件的位置,类文件位于这个目录结构的深处。为此,您需要将包名称添加到 .java 文件,例如 home.hduser.dir 在运行 hadoop jar 命令指定具有包结构的类名,例如 home.hduser.dir.Dictionary .

hwamh0ep

hwamh0ep3#

我也遇到了同样的问题,控制台没有显示太多信息,只是
runjar jarfile[mainclass]参数。。。
请检查jar中的包文件夹位置,作为一个简单的方法,请尝试是包以com.company开头。。。
打开jar时,“com”文件夹应该是第一级文件夹

相关问题