gpt4 book ai didi

java - 如何在hadoop中运行一个jar文件?

转载 作者:搜寻专家 更新时间:2023-10-30 21:39:38 24 4
gpt4 key购买 nike

我使用来自 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

即将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

关于java - 如何在hadoop中运行一个jar文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13012511/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com