In that case, the AMRMClient code looks correct to me.  Can you share the
code you've written against it that's not receiving the correct containers?


On Wed, Nov 13, 2013 at 5:30 PM, gaurav <gau...@datatorrent.com> wrote:

>  Hi,
>
> I looked in the trunk and line numbers are 361 and 366.
>
> Thanks
> -Gaurav
>
> On 11/13/2013 5:04 PM, gaurav wrote:
>
> I have hadoop-2.2.0
>
> Thanks
> -Gaurav
>
> On 11/13/2013 4:59 PM, Sandy Ryza wrote:
>
> What version are you using?  Setting the relax locality to true for nodes
> is always correct.  For racks, this is not necessarily the case.  When I
> look at trunk, it is set to true always on line 361 (which is correct), but
> on on line 374.
>
>  -Sandy
>
>
> On Wed, Nov 13, 2013 at 4:47 PM, gaurav <gau...@datatorrent.com> wrote:
>
>>  Hi Sandy,
>>
>> No it is not working for me.  As mentioned earlier, AMRMClient is not
>> respecting the locality for node and rack in *Line 361 and 374 *and is
>> set to true always.
>> I am requesting for one container with specified node and rack and
>> relaxed locality false.
>>
>> Thanks
>> -Gaurav
>>
>>  On 11/13/2013 4:24 PM, Sandy Ryza wrote:
>>
>>  [moving to user list]
>>
>>  Right.  relaxLocality needs to be set on the next level up.  It
>> determines whether locality can be relaxed to that level.  Confusing, I
>> know.  If you are using AMRMClient, you should be able to accomplish what
>> you're looking for by creating an AMRMClient.ContainerRequest that
>> specifies a node and sets relax locality to false.  Is that not working for
>> you?
>>
>>  -Sandy
>>
>>
>> On Wed, Nov 13, 2013 at 4:19 PM, gaurav <gau...@datatorrent.com> wrote:
>>
>>> Hi Sandy,
>>>
>>> If I set relaxlocality to true with host name, I don't get the container
>>> on specified host even though node has the resources.
>>> I am using AMRMClient, only thing is I made following changes to get the
>>> containers on the specified node.
>>> /
>>> //Line: 361 //
>>> //Original//
>>> // addResourceRequest(req.getPriority(), node, req.getCapability(), req,
>>> true);//
>>> //Modifiled//
>>> // addResourceRequest(req.getPriority(), node, req.getCapability(), req,
>>> req.getRelaxLocality());//
>>> //
>>> //Line 374//
>>> //Original//
>>> // addResourceRequest(req.getPriority(), rack, req.getCapability(), req,
>>> true);//
>>> //Modifiled//
>>> // addResourceRequest(req.getPriority(), rack, req.getCapability(), req,
>>> req.getRelaxLocality());//
>>> ///
>>>
>>>
>>> Thanks
>>> -Gaurav
>>>
>>>
>>> On 11/13/2013 4:02 PM, Sandy Ryza wrote:
>>>
>>>> Yeah, specifying a host name with relaxLocality is meaningful.
>>>>  Schedulers
>>>> use delay scheduling (
>>>> http://www.cs.berkeley.edu/~matei/talks/2010/eurosys_delaysched.pdf) to
>>>> achieve locality when relaxLocality is on.  But it is turned off by
>>>> default.  The individual scheduler docs have specifics on how to
>>>> configure
>>>> it.
>>>>
>>>> Guarav,
>>>> Using ResourceRequests directly is not straightforward and error prone.
>>>>  Is
>>>> there a reason that AMRMClient is unsuitable for your needs?
>>>>
>>>> -Sandy
>>>>
>>>>
>>>>
>>>> On Wed, Nov 13, 2013 at 3:55 PM, Thomas Weise <thomas.we...@gmail.com
>>>> >wrote:
>>>>
>>>>  Is it possible to specify a particular node and have RM fallback to an
>>>>> different node only after making an attempt to allocate for the
>>>>> requested
>>>>> node? In other words, is the combination of specific host name and
>>>>> relaxLocality=TRUE meaningful at all?
>>>>>
>>>>> Thanks.
>>>>>
>>>>>
>>>>> On Wed, Nov 13, 2013 at 3:23 PM, Alejandro Abdelnur <t...@cloudera.com
>>>>>
>>>>>> wrote:
>>>>>> Gaurav,
>>>>>>
>>>>>> Setting relaxLocality to FALSE should do it.
>>>>>>
>>>>>> thanks.
>>>>>>
>>>>>>
>>>>>> On Wed, Nov 13, 2013 at 2:58 PM, gaurav <gau...@datatorrent.com>
>>>>>> wrote:
>>>>>>
>>>>>>    Hi,
>>>>>>>   I am trying to allocate containers on a particular node in Yarn but
>>>>>>>
>>>>>>  Yarn
>>>>>
>>>>>>  is returning me containers on different node although the requested
>>>>>>>
>>>>>>  node
>>>>>
>>>>>>  has resources available.
>>>>>>>
>>>>>>> I checked into the allocate(AllocateRequest request) function of
>>>>>>> ApplicationMasterService and my request is as follows
>>>>>>>
>>>>>>> *request: ask { priority { priority: 1 } resource_name: "h2"
>>>>>>>
>>>>>>  capability {
>>>>>
>>>>>>  memory: 1000 } num_containers: 2 } ask { priority { priority: 1 }
>>>>>>> resource_name: "/default-rack" capability { memory: 1000 }
>>>>>>>
>>>>>> num_containers:
>>>>>>
>>>>>>> 2 } ask { priority { priority: 1 } resource_name: "*" capability {
>>>>>>>
>>>>>> memory:
>>>>>>
>>>>>>> 1000 } num_containers: 2 } response_id: 1 progress: 0.0*
>>>>>>>
>>>>>>> but the containers that I am getting back is as follows
>>>>>>> [Container: [ContainerId: container_1384381084244_0001_01_000002,
>>>>>>>
>>>>>>  NodeId:
>>>>>
>>>>>>  h1:1234, NodeHttpAddress: h1:2, Resource: <memory:1024, vCores:1>,
>>>>>>> Priority: 1, Token: Token { kind: ContainerToken, service: h1:1234 },
>>>>>>>
>>>>>>  ],
>>>>>
>>>>>>  Container: [ContainerId: container_1384381084244_0001_01_000003,
>>>>>>>
>>>>>>  NodeId:
>>>>>
>>>>>>  h1:1234, NodeHttpAddress: h1:2, Resource: <memory:1024, vCores:1>,
>>>>>>> Priority: 1, Token: Token { kind: ContainerToken, service: h1:1234 },
>>>>>>>
>>>>>>  ]]
>>>>>
>>>>>>  I am attaching the test case that I have written along with the mail.
>>>>>>>
>>>>>>  It
>>>>>
>>>>>>  uses classes under org.apache.hadoop.yarn.server.resourcemanager
>>>>>>>
>>>>>>  package.
>>>>>
>>>>>>  Any pointers would be of great help
>>>>>>>
>>>>>>> Thanks
>>>>>>> Gaurav
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> --
>>>>>> Alejandro
>>>>>>
>>>>>>
>>>
>>
>>
>
>
>

Reply via email to