【问题标题】:How to run a jar file in hadoop?如何在hadoop中运行jar文件?
【发布时间】:2016-07-10 02:09:02
【问题描述】:

我使用来自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 有这个类。再次,您的 Dictionary 类需要有一个 main 方法。

标签: java jar hadoop


【解决方案1】:

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

基本上,您打包到 jar 中的目录会使 jar 文件在定位主类文件时感到困惑。相反,如果您尝试这样做:

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

即将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 。当我键入 时,它被视为 为什么会发生这种情况?我正在使用 Eclipse 将我的 jar 文件导出为 Runnable JAR>>将所需的库复制到子文件夹中。请帮忙。
【解决方案2】:

使用以下命令从 CLI 运行 hadoop jar 文件。

hadoop jar <jarFileName> <mainClassname> <AnyCommandLineArguements>

【讨论】:

  • 当我输入 它被认为是 为什么会发生这种情况?我正在使用 Eclipse 将我的 jar 文件导出为 Runnable JAR>>将所需的库复制到子文件夹中。请帮忙。
【解决方案3】:

我也遇到了同样的问题,控制台没有显示太多信息,而只是

RunJar jarFile [mainClass] args...

请检查 jar 中的包文件夹位置,作为一种简单的方法,请尝试以 com.company 开头的包...

“com”文件夹应该是jar解压后的一级文件夹

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多