【问题标题】:how to set jar path when submit a remote application to hadoop?向hadoop提交远程应用程序时如何设置jar路径?
【发布时间】:2013-11-11 05:27:57
【问题描述】:

我尝试从网站运行第一个示例 http://hadoop.apache.org/docs/current2/hadoop-yarn/hadoop-yarn-site/WritingYarnApplications.html

下面是我的代码

    Path jarPath = new Path("target/HadoopStudy-0.0.1-SNAPSHOT.jar");
    FileSystem fs = FileSystem.get(conf);
    FileStatus jarStatus = fs.getFileStatus(jarPath);
    LocalResource amJarRsrc = Records.newRecord(LocalResource.class);

    amJarRsrc.setType(LocalResourceType.FILE);

    amJarRsrc.setVisibility(LocalResourceVisibility.APPLICATION);


    logger.debug(ConverterUtils.getYarnUrlFromPath(jarPath));
    amJarRsrc.setResource(ConverterUtils.getYarnUrlFromPath(jarPath));
    amJarRsrc.setTimestamp(jarStatus.getModificationTime());
    amJarRsrc.setSize(jarStatus.getLen());
    localResources.put(Common.LOCAL_JAR_PATH, amJarRsrc);
    amContainer.setLocalResources(localResources);

但我可以获取应用程序 ID。然后提交申请到yarn,但是申请总是失败,我在master上查看nodemanger日志,发现这些错误

java.net.URISyntaxException: Relative path in absolute URI: ://target/HadoopStudy-0.0.1-SNAPSHOT.jar
    at java.net.URI.checkPath(URI.java:1804)
    at java.net.URI.<init>(URI.java:752)
    at org.apache.hadoop.yarn.util.ConverterUtils.getPathFromYarnURL(ConverterUtils.java:77)
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer.LocalResourceRequest.<init>(LocalResourceRequest.java:46)
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ContainerImpl$RequestResourcesTransition.transition(ContainerImpl.java:523)
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ContainerImpl$RequestResourcesTransition.transition(ContainerImpl.java:494)
    at org.apache.hadoop.yarn.state.StateMachineFactory$MultipleInternalArc.doTransition(StateMachineFactory.java:385)
    at org.apache.hadoop.yarn.state.StateMachineFactory.doTransition(StateMachineFactory.java:302)
    at org.apache.hadoop.yarn.state.StateMachineFactory.access$300(StateMachineFactory.java:46)
    at org.apache.hadoop.yarn.state.StateMachineFactory$InternalStateMachine.doTransition(StateMachineFactory.java:448)
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ContainerImpl.handle(ContainerImpl.java:850)
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ContainerImpl.handle(ContainerImpl.java:73)
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.ContainerManagerImpl$ContainerEventDispatcher.handle(ContainerManagerImpl.java:681)
    at org.apache.hadoop.yarn.server.nodemanager.containermanager.ContainerManagerImpl$ContainerEventDispatcher.handle(ContainerManagerImpl.java:674)
    at org.apache.hadoop.yarn.event.AsyncDispatcher.dispatch(AsyncDispatcher.java:134)
    at org.apache.hadoop.yarn.event.AsyncDispatcher$1.run(AsyncDispatcher.java:81)
    at java.lang.Thread.run(Thread.java:722)

我在 PC A 上运行示例,但我在 PC B 上部署了 hadoop。jar 位于 PC A 上。

经过调查,我无法修复它。但我有一些问题。
1)我需要将jar上传到hdfs吗?如果我需要,我知道该怎么做
2)我只是了解了yarn的一些原理,如果我想提交申请,我需要上传jar给master吗?我可以将jar文件上传到master的本地文件系统吗?如果可以,如何设置路径?

【问题讨论】:

  • 将您的 HadoopStudy-0.0.1-SNAPSHOT.jar 路径更改为完整路径
  • 我可以使用相对路径吗?
  • 我其实不知道。但这是我从您的堆栈跟踪中了解到的。

标签: java hadoop hadoop-yarn


【解决方案1】:
  1. 我需要将 jar 上传到 hdfs 吗?如果我需要,我知道该怎么做

    是的。

  2. 我只是想了解一下yarn的一些原理,如果我想提交申请,我需要上传jar给master吗?我可以将jar文件上传到master的本地文件系统吗?如果可以,如何设置路径?

    YARN 节点管理器使用文件系统接口将 jar 本地化到本地节点。为此,您需要预先将所有资源上传到可通过 FileSystem 实现访问的中心位置,通常是 HDFS。

    所以,如果你有一个路径“target/HadoopStudy-0.0.1-SNAPSHOT.jar”,首先将它上传到你在 HDFS 上的主目录,比如说 hdfs:///user/song/HadoopStudy-0.0.1 -SNAPSHOT.jar”,然后在本地资源中设置该路径。

【讨论】:

    猜你喜欢
    • 2016-05-24
    • 2011-01-30
    • 1970-01-01
    • 2012-07-25
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    相关资源
    最近更新 更多