我尝试从at网站运行第一个示例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上查看了NodeManager日志,发现了这些错误
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)
我在pca上运行这个示例,但在pcb上部署hadoop。jar在电脑a上。
经过调查,我不能解决它。但我有一些问题。
1) 我需要上传jar到hdfs吗?如果我需要,我知道该怎么办
2) 我只是想了解一些Yarn的原理,如果我想提交申请,我需要上传jar给师傅吗?我能把jar文件上传到master的本地文件系统吗?如果可以,如何设置路径?
1条答案
按热度按时间6yt4nkrj1#
我需要上传jar到hdfs吗?如果我需要,我知道该怎么办
对。
我只是想了解一些Yarn的原理,如果我想提交申请,我需要上传jar给师傅吗?我能把jar文件上传到master的本地文件系统吗?如果可以,如何设置路径?
yarn节点管理器使用文件系统接口将jar“本地化”到本地节点。为此,您需要将所有资源预先上传到一个中心位置,该位置可通过文件系统实现(通常是hdfs)访问。
因此,如果您有一个路径“target/hadoopstudy-0.0.1-snapshot.jar”,首先将它上传到hdfs上的主目录,比如hdfs:///user/song/hadoopstudy-0.0.1-snapshot.jar”,然后在本地资源中设置该路径。