Ah, okay. That makes sense. Thanks for all your help, Varun.

-Kevin

On Wed, May 27, 2015 at 9:53 AM Varun Vasudev <vvasu...@hortonworks.com>
wrote:

>   For CPU isolation, you have to use Cgroups with the
> LinuxContainerExecutor. We don’t enforce cpu limits with the
> DefaultContainerExecutor.
>
>  -Varun
>
>   From: Kevin
> Reply-To: "user@hadoop.apache.org"
> Date: Wednesday, May 27, 2015 at 7:06 PM
>
> To: "user@hadoop.apache.org"
> Subject: Re: Using YARN with native applications
>
>   Thanks for the tip. In the trunk it looks like the NodeManager's
> monitor thread doesn't care if the process tree's cores overflows the
> container's CPU limit. Is this monitored elsewhere?
>
>  I have my eyes on
> https://github.com/apache/hadoop/blob/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainersMonitorImpl.java#L476
>
>
>  On Wed, May 27, 2015 at 9:06 AM Varun Vasudev <vvasu...@hortonworks.com>
> wrote:
>
>>   You should also look at ProcfsBasedProcessTree if you want to know how
>> exactly the memory usage is being calculated.
>>
>>  -Varun
>>
>>   From: Kevin
>> Reply-To: "user@hadoop.apache.org"
>> Date: Wednesday, May 27, 2015 at 6:22 PM
>>
>> To: "user@hadoop.apache.org"
>> Subject: Re: Using YARN with native applications
>>
>>   Varun, thank you for helping me understand this. You pointed out a
>> couple of new things to me. I finally found that monitoring thread in the
>> code (ContainersMonitorImpl.java). I can now see and gain a better
>> understanding of YARN checks on a container's resources.
>>
>>  On Wed, May 27, 2015 at 1:23 AM Varun Vasudev <vvasu...@hortonworks.com>
>> wrote:
>>
>>>  YARN should kill the container. I’m not sure what JVM you’re referring
>>> to, but the NodeManager writes and then spawns a shell script that will
>>> invoke your shell script which in turn(presumably) will invoke your C++
>>> application. A monitoring thread then looks at the memory usage of the
>>> process tree and compares it to the limits for the container.
>>>
>>>  -Varun
>>>
>>>   From: Kevin
>>> Reply-To: "user@hadoop.apache.org"
>>> Date: Tuesday, May 26, 2015 at 7:22 AM
>>> To: "user@hadoop.apache.org"
>>> Subject: Re: Using YARN with native applications
>>>
>>>   Thanks for the reply, Varun. So if I use the DefaultContainerExecutor
>>> and run a C++ application via a shell script inside a container whose
>>> virtual memory limit is, for example, 2 GB, and that application does a
>>> malloc for 3 GB, YARN will kill the container? I always just thought that
>>> YARN kept its eye on the JVM it spins up for the container (under the
>>> DefaultContainerExecutor).
>>>
>>>  -Kevin
>>>
>>> On Mon, May 25, 2015 at 4:17 AM, Varun Vasudev <vvasu...@hortonworks.com
>>> > wrote:
>>>
>>>>  Hi Kevin,
>>>>
>>>>  By default, the NodeManager monitors physical and virtual memory
>>>> usage of containers. Containers that exceed either limit are killed. Admins
>>>> can disable the checks by setting yarn.nodemanager.pmem-check-enabled
>>>> and/or yarn.nodemanager.vmem-check-enabled to false. The virtual
>>>> memory limit for a container is determined using the config variable 
>>>> yarn.nodemanager.vmem-pmem-ratio(default
>>>> value is 2.1).
>>>>
>>>>  In case of vcores -
>>>>
>>>>    1. If you’re using Cgroups under LinuxContainerExecutor, by
>>>>    default, if there is spare CPU available on the node, your container 
>>>> will
>>>>    be allowed to use it. Admins can restrict containers to use only the CPU
>>>>    allocated to them by setting 
>>>> yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage
>>>>    to true. This setting is only applicable when using Cgroups under
>>>>    LinuxContainerExecutor.
>>>>    2.  If you aren’t using Cgroups under LinuxContainerExecutor, there
>>>>    is no limiting of the amount of the CPU that containers can use.
>>>>
>>>>  -Varun
>>>>
>>>>   From: Kevin
>>>> Reply-To: "user@hadoop.apache.org"
>>>> Date: Friday, May 22, 2015 at 3:30 AM
>>>> To: "user@hadoop.apache.org"
>>>> Subject: Using YARN with native applications
>>>>
>>>>   Hello,
>>>>
>>>>  I have been using the distributed shell application and Oozie to run
>>>> native C++ applications in the cluster. Is YARN able to see the resources
>>>> these native applications use. For example, if I use Oozie's shell action,
>>>> the NodeManager hosts the mapper container and allocates a certain amount
>>>> of memory and vcores (as configured). What happens if my C++ application
>>>> uses more memory or vcores than the NodeManager allocated?
>>>>
>>>>  I was looking in the Hadoop code and I couldn't find my way to
>>>> answer. Although, it seems the LinuxContainerExecutor may be the answer to
>>>> my question since it uses cgroups.
>>>>
>>>>  I'm interested to know how YARN reacts to non-Java applications
>>>> running inside of it.
>>>>
>>>>  Thanks,
>>>> Kevin
>>>>
>>>
>>>

Reply via email to