从Hadoop启动java应用程序

从Hadoop启动java应用程序,java,hadoop,yarn,Java,Hadoop,Yarn,我正在尝试从一个Thread应用程序运行一个java应用程序(详细说明:从Thread应用程序中的ApplicationMaster)。我找到的所有示例都是处理运行的bash脚本 我的问题似乎是将JAR文件错误地分发到集群中的节点。我在客户机中将JAR指定为本地资源 Path jarPath2 = new Path("/hdfs/yarn1/08_PrimeCalculator.jar"); jarPath2 = fs.makeQualified(jarPath2); FileStatus j

我正在尝试从一个Thread应用程序运行一个java应用程序(详细说明:从Thread应用程序中的ApplicationMaster)。我找到的所有示例都是处理运行的bash脚本

我的问题似乎是将JAR文件错误地分发到集群中的节点。我在客户机中将JAR指定为本地资源

Path jarPath2 = new Path("/hdfs/yarn1/08_PrimeCalculator.jar");
jarPath2 = fs.makeQualified(jarPath2);

FileStatus jarStat2 = null;
try {
    jarStat2 = fs.getFileStatus(jarPath2);
    log.log(Level.INFO, "JAR path in HDFS is "+jarStat2.getPath());
} catch (IOException e) {
    e.printStackTrace();
}

LocalResource packageResource = Records.newRecord(LocalResource.class);
packageResource.setResource(ConverterUtils.getYarnUrlFromPath(jarPath2));
packageResource.setSize(jarStat2.getLen());
packageResource.setTimestamp(jarStat2.getModificationTime());
packageResource.setType(LocalResourceType.ARCHIVE);
packageResource.setVisibility(LocalResourceVisibility.PUBLIC);

Map<String, LocalResource> res = new HashMap<String, LocalResource>();
res.put("package", packageResource);
Hadoop日志在运行应用程序时告诉我:“无法找到或加载主类de.jofre.prime.PrimeCalculator”。该类正好存在于错误消息中显示的路径上


知道我做错了什么吗?

我从应用程序管理员那里了解了如何启动java进程。事实上,我的问题是基于启动流程的命令,即使这是ApacheHadoop项目提供的官方记录方式

我没有做的是将packageResource指定为文件而不是存档:

packageResource.setType(LocalResourceType.FILE);
现在,节点管理器不提取资源,而是将其保留为文件。在我的情况下,作为罐子。 要启动我调用的流程,请执行以下操作:

java -jar primecalculator.jar
要启动JAR而不在命令行中指定主类,您必须在清单文件中指定主类(手动或让maven为您指定)

总而言之:我没有将资源添加为存档,而是添加为文件,并且没有使用-cp命令添加由hadoop为提取的存档文件夹创建的syslink文件夹。我只是通过-JAR参数启动JAR,就这样


希望对你们有帮助

这似乎很复杂。你是如何开始你的纱线工作的?您是否尝试过添加
-libjars[您的jar在这里]
作为
hadoop
的参数?这将自动将您的文件分发到任务节点,并使jar在类路径中可用。我想从java应用程序启动作业,因此命令行参数不可用。是否使用
o.a.h.mapreduce.Job
启动作业?如果是这样,您应该能够使用
addArchiveToClassPath()
addFileToClassPath()
等方法指定要添加到类路径的JAR,这应该与命令行选项等效。不,我正在使用YarnClient和YarnClientApplication来测试新的纱线框架。实际上,我已经知道如何从AM启动java进程。我将很快公布答案。
java -jar primecalculator.jar