当前位置: 首页 > 知识库问答 >
问题:

如何在Hadoop上从java jar文件运行类?

盖嘉珍
2023-03-14

我有一个从Eclipse导出的jar文件(Runnable JAR

在java中,如果在清单中设置主类。可以运行的xml:

java -jar MyTest.jar arguments

如果您想在jar文件中运行另一个主类,或者如果您没有在清单中设置主类。可以运行的xml:

java -cp MyTest.jar MyOtherMainClass arguments

在Hadoop中,如果在清单中设置了main类。可以运行的xml:

hadoop jar MyTest.jar arguments

如果您键入:

hadoop jar MyTest.jar MyOtherMainClass arguments

它将MyOtherMainClass视为jar原始主类的“args”数组中的参数(而不是要运行的类)。

现在,如果你想在jar文件中运行另一个主类,你会键入什么?

我期望类似于:

hadoop java -cp MyTest.jar MyOtherMainClass arguments

但这会带来:

Error: Could not find or load main class java

注意:如果我从“hadoop java-cp MyTest.jar MyOtherMainClass arguments”中删除“html" target="_blank">hadoop”,它将正常启动

共有1个答案

伯洋
2023-03-14

问题来自Eclipse迫使您在jar文件中设置主类,从而阻止您运行所需的类。您所要做的就是从清单中删除主类。jar文件的xml文件并运行:

hadoop jar MyTest.jar MyOtherMainClass arguments

请看这里:http://www.roman10.net/2012/07/26/specify-the-main-class-in-a-jar-file-for-hadoop/

我键入了相同的文本,以防url被删除:

Hadoop支持jar文件的执行。对于正常java执行中的可执行jar文件,可以在命令行中指定主类,如我上一篇文章所述:在jar文件中的主类之间切换。

然而,对于使用hadoop运行的可执行jar文件,规则有点不同。基本上,以下规则适用(我在Hadoop 1.0.3上测试过),

如果jar文件包含在其清单文件中指定的主类,即使命令指定了另一个主类,hadoop也会采用主类。这与正常的java执行不同,我们可以指定一个主类来覆盖清单文件中的主类。如果jar文件在清单文件中不包含主类,hadoop允许我们指定主类。在eclipse中,当一个项目导出为可运行的jar文件时,它总是在Launch配置时要求主类。

选择的主类将放在清单文件中。下面是我的helloworld项目中META-INF/MANIFEST. MF文件的内容,其中主类设置为HelloWorld。

清单-版本:1.0类-路径:。主类:你好。HelloWorld One可以使用文件提取器浏览jar文件,使用文件编辑器打开清单文件,只需删除最后一行即可删除主类配置,并在出现提示时保存对jar文件的更改。这将创建一个没有主类的可运行jar文件。

修改后的jar文件可以在Hadoop中使用,并具有用户提供的主类配置,如下面的示例命令所示,

$hadoop jarhello.jar你好。HelloWorld

 类似资料:
  • 问题内容: 我已使用以下语句使用此博客中的java文件创建了jar文件 现在我已经尝试通过命中和尝试各种命令在hadoop中运行此jar 1个 输出: 2。 输出: 如何在hadoop中运行jar?根据程序需要,我具有正确的DFS位置。 问题答案: 我能够重现您的问题。问题是您要在哪里创建罐子。 基本上,要打包到jar中的目录在查找主类文件时会混淆jar文件。相反,如果您尝试这样做: 例如,将类文

  • 如何从java文件运行hadoop命令下面: hadoop jar'/home/ashish/desktop/hadoop_basics/wordcount_program/WordCount.jar'WordCount/wordcounttutorial/input/wordcounttutorial/output 提前谢了。

  • 问题内容: 我正在尝试从命令行运行.class文件。当我手动移动到存储目录时,它会起作用,但是当我尝试这样的操作时: 它说找不到主班。除了制作.jar文件(我知道.jar是最好的解决方案,但现在不是我正在寻找的解决方案)之外,还有其他解决方案吗? 问题答案: 在Java应用程序启动(又名或干脆)预计最多支持四个不同的方式来指定要启动(取决于Java版本使用)的东西。 指定 类名 是最基本的方法。注

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

  • 注意2:在Jenkins/Configuration/under shell中,我提到了C:\cygwin\bin\mintty.exe 下面是输出 $C:\cygwin\bin\cygpath-w C:\cygwin\bin\mintty.exe[workspace]$C:\cygwin\bin\mintty.exe-xe D:\539707\tomcat-7.0.12\temp\hudson4

  • 问题内容: 我在Bean Shell Sampler中尝试了以下方法; 看来,它无法运行。.我是否以正确的方式进行操作? 问题答案: 如果您需要使用Beanshell进行此操作,建议对process命令行进行以下修改: 有关更多信息,请参见cmd.exe文档。 但是,在大多数情况下,使用OS Process Sampler 可能更容易,它允许执行任意命令和程序。了解如何从JMeter本地和远程运行