不管是spark on yarn还是flink on yarn都是将任务提交后,在yarn上申请运行任务的容器,这个容器就是container,container由内存跟cpu核组成
举个例子:公司5台服务器,每台服务器是16核,64G内存,一般会预留20%内存,64x0.8=51.2,内存就按50算,如果机器性能很好,1物理cpu核可以模拟2虚拟核使用,这是yarn自己引入的概念,那就是16x2=32个vcores
yarn.nodemanager.resource.memory-mb:物理服务器上能用的最大内存,50x1024=51200
yarn.nodemanager.resource.cpu-vcores:服务器上可利用的最大cpu数,32个
yarn.scheduler.minimum-allocation-vcores:每个container最小虚拟核
yarn.scheduler.maximum-allocation-vcores:每个container最大虚拟核,
如果设置min_vcoure = 1,那么最多可以跑32/1=32个container。
如果设置max_vcoure =4 ,那么最少container是32/4=8个container。
yarn.scheduler.minimum-allocation-mb:每个container最小内存
yarn.scheduler.maximum-allocation-mb:每个container最大内存,默认8G
如果设置min_mb= 2048,那么最多可以跑50/2=25个container。
如果设置max_mb= 8096,那么最多可以跑50/8=6个container,整体来说有点浪费cpu核
yarn.nodemanager.vmem-pmem-ratio:这是1g物理内存用多少倍虚拟内存,默认是2.1,可不改
- <!--设置on yarn 的资源优化-->
- <property>
- <description>该节点上YARN可使用的物理内存总量</description>
- <name>yarn.nodemanager.resource.memory-mb</name>
- <value>51200</value>
- </property>
-
- <property>
- <description>表示集群中每个节点可被分配的虚拟CPU个数</description>
- <name>yarn.nodemanager.resource.cpu-vcores</name>
- <value>32</value>
- </property>
-
- <property>
- <description>每个容器container请求被分配的最小内存</description>
- <name>yarn.scheduler.minimum-allocation-mb</name>
- <value>2048</value>
- </property>
-
- <property>
- <description>每个容器container请求被分配的最大内存,不能给太大</description>
- <name>yarn.scheduler.maximum-allocation-mb</name>
- <value>8096</value>
- </property>
-
- <property>
- <description>每个容器container请求被分配的最少虚拟CPU个数</description>
- <name>yarn.scheduler.minimum-allocation-vcores</name>
- <value>1</value>
- </property>
-
- <property>
- <description>每个容器container请求被分配的最多虚拟CPU个数</description>
- <name>yarn.scheduler.maximum-allocation-vcores</name>
- <value>4</value>
- </property>
-
-
- <property>
- <description>任务每使用1MB物理内存,最多可使用虚拟内存量,默认是2.1</description>
- <name>yarn.nodemanager.vmem-pmem-ratio</name>
- <value>2.1</value>
- </property>
注意:
机器数量少的情况下,以上container资源不可调大,yarn的资源管理会发生资源预留机制,造成宕机