hadoop-common-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Omkar Joshi <ojo...@hortonworks.com>
Subject Re: setLocalResources() on ContainerLaunchContext
Date Tue, 06 Aug 2013 18:11:22 GMT
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.* <http://www.hortonworks.com>


On Tue, Aug 6, 2013 at 5:25 AM, Krishna Kishore Bonagiri <
write2kishore@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 <harsh@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" <
>> write2kishore@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 <harsh@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
>>>> <write2kishore@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 <harsh@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
>>>> >> <write2kishore@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 <harsh@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
>>>> >> >> <write2kishore@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
>>>>
>>>
>>>
>

Mime
View raw message