Good that your timestamp worked... Now for hdfs try this
hdfs://<hdfs-host-name>:<hdfs-host-port><absolute-path>
now verify that your absolute path is correct. I hope it will work.
bin/hadoop fs -ls <absolute-path>


hdfs://isredeng:8020*//*kishore/kk.ksh... why "//" ?? you have hdfs file at
absolute location /kishore/kk.sh? is /kishore and /kishore/kk.sh accessible
to the user who is making startContainer call or the one running AM
container?

Thanks,
Omkar Joshi
*Hortonworks Inc.* <http://www.hortonworks.com>


On Tue, Aug 6, 2013 at 10:43 PM, Krishna Kishore Bonagiri <
write2kish...@gmail.com> wrote:

> Hi Harsh, Hitesh & Omkar,
>
>   Thanks for the replies.
>
> I tried getting the last modified timestamp like this and it works. Is
> this a right thing to do?
>
>       File file = new File("/home_/dsadm/kishore/kk.ksh");
>       shellRsrc.setTimestamp(file.lastModified());
>
>
> And, when I tried using a hdfs file qualifying it with both node name and
> port, it didn't work, I get a similar error as earlier.
>
>       String shellScriptPath = "hdfs://isredeng:8020//kishore/kk.ksh";
>
>
> 13/08/07 01:36:28 INFO ApplicationMaster: Got container status for
> containerID= container_1375853431091_0005_01_000002, state=COMPLETE,
> exitStatus=-1000, diagnostics=File does not exist:
> hdfs://isredeng:8020/kishore/kk.ksh
>
> 13/08/07 01:36:28 INFO ApplicationMaster: Got failure status for a
> container : -1000
>
>
>
> On Wed, Aug 7, 2013 at 7:45 AM, Harsh J <ha...@cloudera.com> wrote:
>
>> Thanks Hitesh!
>>
>> P.s. Port isn't a requirement (and with HA URIs, you shouldn't add a
>> port), but "isredeng" has to be the authority component.
>>
>> On Wed, Aug 7, 2013 at 7:37 AM, Hitesh Shah <hit...@apache.org> wrote:
>> > @Krishna, your logs showed the file error for
>> "hdfs://isredeng/kishore/kk.ksh"
>> >
>> > I am assuming you have tried dfs -ls /kishore/kk.ksh and confirmed that
>> the file exists? Also the qualified path seems to be missing the namenode
>> port. I need to go back and check if a path without the port works by
>> assuming the default namenode port.
>> >
>> > @Harsh, adding a helper function seems like a good idea. Let me file a
>> jira to have the above added to one of the helper/client libraries.
>> >
>> > thanks
>> > -- Hitesh
>> >
>> > On Aug 6, 2013, at 6:47 PM, Harsh J wrote:
>> >
>> >> It is kinda unnecessary to be asking developers to load in timestamps
>> and
>> >> length themselves. Why not provide a java.io.File, or perhaps a Path
>> >> accepting API, that gets it automatically on their behalf using the
>> >> FileSystem API internally?
>> >>
>> >> P.s. A HDFS file gave him a FNF, while a Local file gave him a proper
>> >> TS/Len error. I'm guessing there's a bug here w.r.t. handling HDFS
>> >> paths.
>> >>
>> >> On Wed, Aug 7, 2013 at 12:35 AM, Hitesh Shah <hit...@apache.org>
>> wrote:
>> >>> Hi Krishna,
>> >>>
>> >>> YARN downloads a specified local resource on the container's node
>> from the url specified. In all situtations, the remote url needs to be a
>> fully qualified path. To verify that the file at the remote url is still
>> valid, YARN expects you to provide the length and last modified timestamp
>> of that file.
>> >>>
>> >>> If you use an hdfs path such as hdfs://namenode:port/<absolute path
>> to file>, you will need to get the length and timestamp from HDFS.
>> >>> If you use file:///, the file should exist on all nodes and all nodes
>> should have the file with the same length and timestamp for localization to
>> work. ( For a single node setup, this works but tougher to get right on a
>> multi-node setup - deploying the file via a rpm should likely work).
>> >>>
>> >>> -- Hitesh
>> >>>
>> >>> On Aug 6, 2013, at 11:11 AM, Omkar Joshi wrote:
>> >>>
>> >>>> Hi,
>> >>>>
>> >>>> You need to match the timestamp. Probably get the timestamp locally
>> before adding it. This is explicitly done to ensure that file is not
>> updated after user makes the call to avoid possible errors.
>> >>>>
>> >>>>
>> >>>> Thanks,
>> >>>> Omkar Joshi
>> >>>> Hortonworks Inc.
>> >>>>
>> >>>>
>> >>>> On Tue, Aug 6, 2013 at 5:25 AM, Krishna Kishore Bonagiri <
>> write2kish...@gmail.com> wrote:
>> >>>> I tried the following and it works!
>> >>>> String shellScriptPath = "file:///home_/dsadm/kishore/kk.ksh";
>> >>>>
>> >>>> But now getting a timestamp error like below, when I passed 0 to
>> setTimestamp()
>> >>>>
>> >>>> 13/08/06 08:23:48 INFO ApplicationMaster: Got container status for
>> containerID= container_1375784329048_0017_01_000002, state=COMPLETE,
>> exitStatus=-1000, diagnostics=Resource file:/home_/dsadm/kishore/kk.ksh
>> changed on src filesystem (expected 0, was 1367580580000
>> >>>>
>> >>>>
>> >>>>
>> >>>>
>> >>>> On Tue, Aug 6, 2013 at 5:24 PM, Harsh J <ha...@cloudera.com> wrote:
>> >>>> Can you try passing a fully qualified local path? That is, including
>> the file:/ scheme
>> >>>>
>> >>>> On Aug 6, 2013 4:05 PM, "Krishna Kishore Bonagiri" <
>> write2kish...@gmail.com> wrote:
>> >>>> Hi Harsh,
>> >>>>   The setResource() call on LocalResource() is expecting an argument
>> of type org.apache.hadoop.yarn.api.records.URL which is converted from a
>> string in the form of URI. This happens in the following call of
>> Distributed Shell example,
>> >>>>
>> >>>> shellRsrc.setResource(ConverterUtils.getYarnUrlFromURI(new URI(
>> shellScriptPath)));
>> >>>>
>> >>>> So, if I give a local file I get a parsing error like below, which
>> is when I changed it to an HDFS file thinking that it should be given like
>> that only. Could you please give an example of how else it could be used,
>> using a local file as you are saying?
>> >>>>
>> >>>> 2013-08-06 06:23:12,942 WARN
>> org.apache.hadoop.yarn.server.nodemanager.containermanager.container.Container:
>> Failed to parse resource-request
>> >>>> java.net.URISyntaxException: Expected scheme name at index 0:
>> :///home_/dsadm/kishore/kk.ksh
>> >>>>        at java.net.URI$Parser.fail(URI.java:2820)
>> >>>>        at java.net.URI$Parser.failExpecting(URI.java:2826)
>> >>>>        at java.net.URI$Parser.parse(URI.java:3015)
>> >>>>        at java.net.URI.<init>(URI.java:747)
>> >>>>        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)
>> >>>>
>> >>>>
>> >>>>
>> >>>> On Tue, Aug 6, 2013 at 3:36 PM, Harsh J <ha...@cloudera.com> wrote:
>> >>>> To be honest, I've never tried loading a HDFS file onto the
>> >>>> LocalResource this way. I usually just pass a local file and that
>> >>>> works just fine. There may be something in the URI transformation
>> >>>> possibly breaking a HDFS source, but try passing a local file - does
>> >>>> that fail too? The Shell example uses a local file.
>> >>>>
>> >>>> On Tue, Aug 6, 2013 at 10:54 AM, Krishna Kishore Bonagiri
>> >>>> <write2kish...@gmail.com> wrote:
>> >>>>> Hi Harsh,
>> >>>>>
>> >>>>>  Please see if this is useful, I got a stack trace after the error
>> has
>> >>>>> occurred....
>> >>>>>
>> >>>>> 2013-08-06 00:55:30,559 INFO
>> >>>>> org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor:
>> CWD set
>> >>>>> to
>> /tmp/nm-local-dir/usercache/dsadm/appcache/application_1375716148174_0004
>> >>>>> =
>> >>>>>
>> file:/tmp/nm-local-dir/usercache/dsadm/appcache/application_1375716148174_0004
>> >>>>> 2013-08-06 00:55:31,017 ERROR
>> >>>>> org.apache.hadoop.security.UserGroupInformation:
>> PriviledgedActionException
>> >>>>> as:dsadm (auth:SIMPLE) cause:java.io.FileNotFoundException: File
>> does not
>> >>>>> exist: hdfs://isredeng/kishore/kk.ksh
>> >>>>> 2013-08-06 00:55:31,029 INFO
>> >>>>>
>> org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer.ResourceLocalizationService:
>> >>>>> DEBUG: FAILED { hdfs://isredeng/kishore/kk.ksh, 0, FILE, null },
>> File does
>> >>>>> not exist: hdfs://isredeng/kishore/kk.ksh
>> >>>>> 2013-08-06 00:55:31,031 INFO
>> >>>>>
>> org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer.LocalizedResource:
>> >>>>> Resource hdfs://isredeng/kishore/kk.ksh transitioned from
>> DOWNLOADING to
>> >>>>> FAILED
>> >>>>> 2013-08-06 00:55:31,034 INFO
>> >>>>>
>> org.apache.hadoop.yarn.server.nodemanager.containermanager.container.Container:
>> >>>>> Container container_1375716148174_0004_01_000002 transitioned from
>> >>>>> LOCALIZING to LOCALIZATION_FAILED
>> >>>>> 2013-08-06 00:55:31,035 INFO
>> >>>>>
>> org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer.LocalResourcesTrackerImpl:
>> >>>>> Container container_1375716148174_0004_01_000002 sent RELEASE event
>> on a
>> >>>>> resource request { hdfs://isredeng/kishore/kk.ksh, 0, FILE, null }
>> not
>> >>>>> present in cache.
>> >>>>> 2013-08-06 00:55:31,036 WARN org.apache.hadoop.ipc.Client:
>> interrupted
>> >>>>> waiting to send rpc request to server
>> >>>>> java.lang.InterruptedException
>> >>>>>        at
>> >>>>>
>> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1290)
>> >>>>>        at
>> >>>>> java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:229)
>> >>>>>        at java.util.concurrent.FutureTask.get(FutureTask.java:94)
>> >>>>>        at
>> >>>>>
>> org.apache.hadoop.ipc.Client$Connection.sendRpcRequest(Client.java:930)
>> >>>>>        at org.apache.hadoop.ipc.Client.call(Client.java:1285)
>> >>>>>        at org.apache.hadoop.ipc.Client.call(Client.java:1264)
>> >>>>>        at
>> >>>>>
>> org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:206)
>> >>>>>        at $Proxy22.heartbeat(Unknown Source)
>> >>>>>        at
>> >>>>>
>> org.apache.hadoop.yarn.server.nodemanager.api.impl.pb.client.LocalizationProtocolPBClientImpl.heartbeat(LocalizationProtocolPBClientImpl.java:62)
>> >>>>>        at
>> >>>>>
>> org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer.ContainerLocalizer.localizeFiles(ContainerLocalizer.java:249)
>> >>>>>        at
>> >>>>>
>> org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer.ContainerLocalizer.runLocalization(ContainerLocalizer.java:163)
>> >>>>>        at
>> >>>>>
>> org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.startLocalizer(DefaultContainerExecutor.java:106)
>> >>>>>        at
>> >>>>>
>> org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer.ResourceLocalizationService$LocalizerRunner.run(ResourceLocalizationService.java:979)
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>> And here is my code snippet:
>> >>>>>
>> >>>>>      ContainerLaunchContext ctx =
>> >>>>> Records.newRecord(ContainerLaunchContext.class);
>> >>>>>
>> >>>>>      ctx.setEnvironment(oshEnv);
>> >>>>>
>> >>>>>      // Set the local resources
>> >>>>>      Map<String, LocalResource> localResources = new HashMap<String,
>> >>>>> LocalResource>();
>> >>>>>
>> >>>>>      LocalResource shellRsrc =
>> Records.newRecord(LocalResource.class);
>> >>>>>      shellRsrc.setType(LocalResourceType.FILE);
>> >>>>>      shellRsrc.setVisibility(LocalResourceVisibility.APPLICATION);
>> >>>>>      String shellScriptPath = "hdfs://isredeng//kishore/kk.ksh";
>> >>>>>      try {
>> >>>>>        shellRsrc.setResource(ConverterUtils.getYarnUrlFromURI(new
>> >>>>> URI(shellScriptPath)));
>> >>>>>      } catch (URISyntaxException e) {
>> >>>>>        LOG.error("Error when trying to use shell script path
>> specified"
>> >>>>>            + " in env, path=" + shellScriptPath);
>> >>>>>        e.printStackTrace();
>> >>>>>      }
>> >>>>>
>> >>>>>      shellRsrc.setTimestamp(0/*shellScriptPathTimestamp*/);
>> >>>>>      shellRsrc.setSize(0/*shellScriptPathLen*/);
>> >>>>>      String ExecShellStringPath = "ExecShellScript.sh";
>> >>>>>      localResources.put(ExecShellStringPath, shellRsrc);
>> >>>>>
>> >>>>>      ctx.setLocalResources(localResources);
>> >>>>>
>> >>>>>
>> >>>>> Please let me know if you need anything else.
>> >>>>>
>> >>>>> Thanks,
>> >>>>> Kishore
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>> On Tue, Aug 6, 2013 at 12:05 AM, Harsh J <ha...@cloudera.com>
>> wrote:
>> >>>>>>
>> >>>>>> The detail is insufficient to answer why. You should also have
>> gotten
>> >>>>>> a trace after it, can you post that? If possible, also the relevant
>> >>>>>> snippets of code.
>> >>>>>>
>> >>>>>> On Mon, Aug 5, 2013 at 6:36 PM, Krishna Kishore Bonagiri
>> >>>>>> <write2kish...@gmail.com> wrote:
>> >>>>>>> Hi Harsh,
>> >>>>>>> Thanks for the quick and detailed reply, it really helps. I am
>> trying
>> >>>>>>> to
>> >>>>>>> use it and getting this error in node manager's log:
>> >>>>>>>
>> >>>>>>> 2013-08-05 08:57:28,867 ERROR
>> >>>>>>> org.apache.hadoop.security.UserGroupInformation:
>> >>>>>>> PriviledgedActionException
>> >>>>>>> as:dsadm (auth:SIMPLE) cause:java.io.FileNotFoundException: File
>> does
>> >>>>>>> not
>> >>>>>>> exist: hdfs://isredeng/kishore/kk.ksh
>> >>>>>>>
>> >>>>>>>
>> >>>>>>> This file is there on the machine with name "isredeng", I could
>> do ls
>> >>>>>>> for
>> >>>>>>> that file as below:
>> >>>>>>>
>> >>>>>>> -bash-4.1$ hadoop fs -ls kishore/kk.ksh
>> >>>>>>> 13/08/05 09:01:03 WARN util.NativeCodeLoader: Unable to load
>> >>>>>>> native-hadoop
>> >>>>>>> library for your platform... using builtin-java classes where
>> applicable
>> >>>>>>> Found 1 items
>> >>>>>>> -rw-r--r--   3 dsadm supergroup       1046 2013-08-05 08:48
>> >>>>>>> kishore/kk.ksh
>> >>>>>>>
>> >>>>>>> Note: I am using a single node cluster
>> >>>>>>>
>> >>>>>>> Thanks,
>> >>>>>>> Kishore
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>
>> >>>>>>> On Mon, Aug 5, 2013 at 3:00 PM, Harsh J <ha...@cloudera.com>
>> wrote:
>> >>>>>>>>
>> >>>>>>>> The string for each LocalResource in the map can be anything that
>> >>>>>>>> serves as a common identifier name for your application. At
>> execution
>> >>>>>>>> time, the passed resource filename will be aliased to the name
>> you've
>> >>>>>>>> mapped it to, so that the application code need not track special
>> >>>>>>>> names. The behavior is very similar to how you can, in MR,
>> define a
>> >>>>>>>> symlink name for a DistributedCache entry (e.g. foo.jar#bar.jar).
>> >>>>>>>>
>> >>>>>>>> For an example, checkout the DistributedShell app sources.
>> >>>>>>>>
>> >>>>>>>> Over [1], you can see we take a user provided file path to a
>> shell
>> >>>>>>>> script. This can be named anything as it is user-supplied.
>> >>>>>>>> Onto [2], we define this as a local resource [2.1] and embed it
>> with a
>> >>>>>>>> different name (the string you ask about) [2.2], as defined at
>> [3] as
>> >>>>>>>> an application reference-able constant.
>> >>>>>>>> Note that in [4], we add to the Container arguments the aliased
>> name
>> >>>>>>>> we mapped it to (i.e. [3]) and not the original filename we
>> received
>> >>>>>>>> from the user. The resource is placed on the container with this
>> name
>> >>>>>>>> instead, so thats what we choose to execute.
>> >>>>>>>>
>> >>>>>>>> [1] -
>> >>>>>>>>
>> >>>>>>>>
>> https://github.com/apache/hadoop-common/blob/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-distributedshell/src/main/java/org/apache/hadoop/yarn/applications/distributedshell/ApplicationMaster.java#L390
>> >>>>>>>>
>> >>>>>>>> [2] - [2.1]
>> >>>>>>>>
>> >>>>>>>>
>> https://github.com/apache/hadoop-common/blob/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-distributedshell/src/main/java/org/apache/hadoop/yarn/applications/distributedshell/ApplicationMaster.java#L764
>> >>>>>>>> and [2.2]
>> >>>>>>>>
>> >>>>>>>>
>> https://github.com/apache/hadoop-common/blob/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-distributedshell/src/main/java/org/apache/hadoop/yarn/applications/distributedshell/ApplicationMaster.java#L780
>> >>>>>>>>
>> >>>>>>>> [3] -
>> >>>>>>>>
>> >>>>>>>>
>> https://github.com/apache/hadoop-common/blob/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-distributedshell/src/main/java/org/apache/hadoop/yarn/applications/distributedshell/ApplicationMaster.java#L205
>> >>>>>>>>
>> >>>>>>>> [4] -
>> >>>>>>>>
>> >>>>>>>>
>> https://github.com/apache/hadoop-common/blob/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-distributedshell/src/main/java/org/apache/hadoop/yarn/applications/distributedshell/ApplicationMaster.java#L791
>> >>>>>>>>
>> >>>>>>>> On Mon, Aug 5, 2013 at 2:44 PM, Krishna Kishore Bonagiri
>> >>>>>>>> <write2kish...@gmail.com> wrote:
>> >>>>>>>>> Hi,
>> >>>>>>>>>
>> >>>>>>>>>  Can someone please tell me what is the use of calling
>> >>>>>>>>> setLocalResources()
>> >>>>>>>>> on ContainerLaunchContext?
>> >>>>>>>>>
>> >>>>>>>>>  And, also an example of how to use this will help...
>> >>>>>>>>>
>> >>>>>>>>> I couldn't guess what is the String in the map that is passed to
>> >>>>>>>>> setLocalResources() like below:
>> >>>>>>>>>
>> >>>>>>>>>      // Set the local resources
>> >>>>>>>>>      Map<String, LocalResource> localResources = new
>> HashMap<String,
>> >>>>>>>>> LocalResource>();
>> >>>>>>>>>
>> >>>>>>>>> Thanks,
>> >>>>>>>>> Kishore
>> >>>>>>>>>
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>> --
>> >>>>>>>> Harsh J
>> >>>>>>>
>> >>>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>> --
>> >>>>>> Harsh J
>> >>>>>
>> >>>>>
>> >>>>
>> >>>>
>> >>>>
>> >>>> --
>> >>>> Harsh J
>> >>>>
>> >>>>
>> >>>>
>> >>>
>> >>
>> >>
>> >>
>> >> --
>> >> Harsh J
>> >
>>
>>
>>
>> --
>> Harsh J
>>
>
>

Reply via email to