如何在hadoop中运行jar文件?

我已使用以下语句使用此博客中的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位置。

回答:

我能够重现您的问题。问题是您要在哪里创建罐子。

基本上,要打包到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的主要功能,它就可以很好地工作。

问题是,当您将一个完整的目录打包到一个jar中时,那么jar也需要知道目录结构才能找到类文件。为此,我们需要一个定义明确的包层次结构来定义类的位置。因此,当您将其打包/home/hduser/dir/到jar中时,jar不会知道位于该目录结构内部的类文件的位置。为此,您需要.java根据目录结构将包名添加到文件中,例如home.hduser.dir,在运行hadoop

jar命令时,使用包结构指定类名,例如home.hduser.dir.Dictionary

以上是 如何在hadoop中运行jar文件? 的全部内容, 来源链接: utcz.com/qa/408214.html

回到顶部