当前位置: 首页 > 面试题库 >

如何在hadoop中运行jar文件?

壤驷旭
2023-03-14
问题内容

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



 类似资料:
  • 我有一个从Eclipse导出的jar文件(Runnable JAR 在java中,如果在清单中设置主类。可以运行的xml: 如果您想在jar文件中运行另一个主类,或者如果您没有在清单中设置主类。可以运行的xml: 在Hadoop中,如果在清单中设置了main类。可以运行的xml: 如果您键入: 它将MyOtherMainClass视为jar原始主类的“args”数组中的参数(而不是要运行的类)。

  • 我正在尝试在Hadoop中运行一个jar文件。我已经使用Eclipse导出功能转换了jar文件。现在的问题是,当我运行jar文件时,它显示classnotfoundexception。我在子文件夹中的主类,例如WordCount-

  • 我为map reduce应用程序创建了一个自定义jar,并尝试在Amazon EMR作业流中运行它。我在hadoop 1.0.4中编译了代码,但是Amazon EMR支持hadoop 1.0.3。此外,我在jdk 1.7下编译了代码,我不确定Amazon EMR使用的是哪个java版本,我们可以在哪里更改? 这是堆栈追踪

  • 我已经编写了一个简单的map reduce作业来在一些点上执行KMeans聚类。 运行会得到以下输出: 问题出在哪里,有没有应对的建议?

  • 问题内容: 我创建了一个JAR文件,如下所示: 我通过双击运行了这个JAR文件(它不起作用)。因此,我从DOS提示符运行了它,如下所示: 它引发了“无法加载主类”异常。所以我提取了这个JAR文件: 我运行了类文件: 运行良好。我不知道为什么JAR文件不起作用。请告诉我运行JAR文件的步骤 问题答案: 你需要在jar文件清单中指定Main-Class。 Oracle的教程包含完整的演示,但是这是从头

  • 问题内容: 我正在尝试使用Hadoop实现一个示例单词计数程序。我已经下载并安装了Hadoop 2.0.0。我想使用Eclipse来执行此示例程序,因为我认为稍后在我的真实项目中,我仅需使用Eclipse。 我找不到类似Hadoop的jar文件hadoop-core.jar以及其他必需的jar文件。我搜索了2.0 hadoop的所有文件夹,但找不到这些文件。这些相同的文件在Hadoop的1.0版本