首先我们看一下Yarn的内存组成图
首先下面的两个参数决定这集群资源管理器能够有多少资源用于运行yarn上的任务
- yarn.nodemanager.resource.cpu-vcores
- yarn.nodemanager.resource.memory-mb
这两个参数的值是由机器的配置及同时在机器上运行的其它进程共同决定。
这里我们用实例来说明,这里举例一台节点:
机器配置,假设有32核,120GB内存
(本文假设仅有hdfs的datanode和yarn的nodemanager运行于该节点)
这台机器有多少资源可以为Yarn上的任务提供资源?
- 配置cores
我们给datanode,nodemanager各给一个core,同时要为操作系统提供2个core
然后剩下28核配置作为yarn资源。也即是
yarn.nodemanager.resource.cpu-vcores=28
2.配置内存
对于内存,预留20GB给操作系统,datanode,nodemanager,剩余100GB作为yarn资源。也即是
yarn.nodemanager.resource.memory-mb=100*1024
(表示该节点上YARN可使用的物理内存总量,默认是8192(MB),注意,如果你的节点内存资源不够8GB,则需要调减小这个值,而YARN不会智能的探测节点的物理内存总量)
那么我们上面的图的最外面,也是最大的内存就确定了。
2.接着就看一下Yarn container
RM的内存资源配置, 配置的是资源调度相关
RM1:yarn.scheduler.minimum-allocation-mb 分配给AM单个容器可申请的最小内存
RM2:yarn.scheduler.maximum-allocation-mb 分配给AM单个容器可申请的最大内存
注:
最小值可以计算一个节点最大Container数量
一旦设置,不可动态改变