在YARN中,资源管理由ResourceManager和NodeManager共同完成,其中,ResourceManager中的调度器负责资源的分配,而NodeManager则负责资源的供给和隔离。ResourceManager将某个NodeManager上资源分配给任务(这就是所谓的“资源调度”)后,NodeManager需按照要求为任务提供相应的资源,甚至保证这些资源应具有独占性,为任务运行提供基础的保证,这就是所谓的资源隔离。
基于以上考虑,YARN允许用户配置每个节点上可用的物理内存资源,注意,这里是“可用的”,因为一个节点上的内存会被若干个服务共享,比如一部分给YARN,一部分给HDFS,一部分给HBase等,YARN配置的只是自己可以使用的,配置参数如下:
在安装脚本从训练营的拖下来的配置文件中的yarn-site.xml中有如下配置:
#RM(yarn-site.xml) 内存资源配置——两个参数:它们表示单个容器可以申请的最小与最大内存。
<property><name>yarn.scheduler.minimum-allocation-mb</name><value>1024</value>
</property>
<property><name>yarn.scheduler.maximum-allocation-mb</name><value>250000</value>
</property>#NM(yarn-site.xml)前者表示单个节点可用的最大内存,RM中的两个值都不应该超过该值。
后者表示虚拟内存率,即占task所用内存的百分比,默认为2.1.
<property><name>yarn.nodemanager.resource.memory-mb</name><value>250000</value>
</property>
<property><name>yarn.nodemanager.vmem-pmem-ratio</name><value>2.1</value>
</property>
这是说每个container最多申请的内存上限,会不会存在一个container申请过多资源的情况,只要没超过10Gyarn就不会管他,但是可能超过机器内存限制了,然后就被OOM killer杀死了