Yarn 调优 (内存、CPU)

本文详细介绍了如何在YARN集群中进行内存和CPU的配置调优,包括内存的预留、Hbase及系统内存分配、container内存最小值和最大值的设定,以及CPU的虚拟核心配置,旨在最大化资源利用率,避免资源浪费。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      在YARN集群中,平衡内存、CPU、磁盘的资源的很重要的。根据经验,每两个container使用一块磁盘以及一个CPU核的时候可以使集群的资源得到一个比较好的利用。

内存配置

YARN所有可用的内存资源应该要减去系统预留内存、各个进程内存的经验值。

即:总共保留的内存=系统内存+各个进程内存的经验值。

Hbase 、系统需要的内存(一般留总内存的20%左右)参考: 

每台机子内存系统需要的内存HBase需要的内存
4GB1GB1GB
8GB2GB1GB
16GB2GB2GB
24GB4GB4GB
48GB6GB8GB
64GB8GB8GB
72GB8GB8GB
96GB12GB16GB
128GB24GB24GB
256GB32GB32GB
512GB64GB64GB

 

RM/NN 、DN/NM内存的经验值参考:

       生产情况,DN和NM也是部署在一台机器上的,目的:数据本地化,减少网络IO,经验值推荐各分配4G 。

       生产情况,NN和RM一般是部署在一台机器上的,一般分配8个G的内存,根据集群规模可适当调大。

hadoop-env.sh
# NN内存
HADOOP_NAMENODE_OPTS=-Xmx1000m(默认)
HADOOP_NAMENODE_OPTS=-Xmx8192m(建议8G)
# DN内存
HADOOP_DATANODE_OPTS=-Xmx1000m(默认)
HADOOP_DATANODE_OPTS=-Xmx4096m(建议4G)
yarn-env.sh
# RM内存
export YARN_RESOURCEMANAGER_HEAPSIZE=1000(默认)
export YARN_RESOURCEMANAGER_HEAPSIZE=8192(建议8G)
# NM内存
export YARN_NODEMANAGER_HEAPSIZE=1000(默认)
export YARN_NODEMANAGER_HEAPSIZE=4096(建议4G)

剩下的可用内存,配到  yarn.nodemanager.resource.memory-mb 中 ,可向系统借一些,也可以看情况减少些。

container内存的最小值(yarn.scheduler.minimum-allocation-mb)可以参考以下表格,可根据生产作业大小情况适当调整:

每台机子可用的RAMcontainer最小值
小于4GB256MB
4GB到8GB之间512MB
8GB到24GB之间1024MB
24GB到128G之间2048MB
128G以上4096MB

container内存的最大值(yarn.scheduler.maximum-allocation-mb)配置原则: 

yarn可用内存 / container内存的最大值 = 整数 

      方案1:可设置成和yarn.nodemanager.resource.memory-mb相同(生产上作业比较大的时候)

      方案2:根据生产上的作业大小的最值情况定一个合适的值(必须满足原则)

 

另外,还有以下几个关于container OOM (out of memory)是否主动kill配置:

#任务可使用的物理内存和虚拟内存量的比值,默认是2.1,即 物理内存:虚拟内存 = 1:2.1,表示1M的物理内存,对应2.1M的虚拟内存。
yarn.nodemanager.vmem-pmem-ratio

#是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true。
yarn.nodemanager.pmem-check-enabled:

#是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是false。
yarn.nodemanager.vmem-check-enabled	

内存配置案例

物理内存 48 G:

系统预留: 48G * 20% = 9.6G  (查表为6G) 
dn、rm : 4+4 =8G
可用内存: 48 - 9.6 -8 = 30.2G (可向预留借,凑成32G。 也可减成30G。这里凑到32G)
yarn-site.xml

  # container总内存
  yarn.nodemanager.resource.memory-mb   32 * 1024 
  # 单个container最小内存
  yarn.scheduler.minimum-allocation-mb  2048 (查表得)
  # 单个container最大内存
  yarn.scheduler.maximum-allocation-mb  32 * 1024  (方案1,作业大时) 
  yarn.scheduler.maximum-allocation-mb    8 * 1024  (方案2,8g一般够用,根据具体情况调整) 

  按照方案一。 在内存不空闲的前提下,理论container数应该是: 32/2 = 16  32/32 = 1    ===>  1—16 个

  按照方案二。 在内存不空闲的前提下,理论container数应该是: 32/2 = 16  32/8 = 4      ===>  4—16 个

 

生产例子 : 

yarn.nodemanager.resource.memory-mb   168G
yarn.scheduler.minimum-allocation-mb  4G
yarn.scheduler.maximum-allocation-mb  24G

 

CPU配置

    YARN中目前的CPU被划分成虚拟CPU(CPU virtual Core),这里的虚拟CPU是YARN自己引入的概念,初衷是,考虑到不同节点的CPU性能可能不同,可以通过为第一个物理CPU多配置几个虚拟CPU弥补这种差异。用户提交作业时,可以指定每个任务需要的虚拟CPU个数。

yarn.nodemanager.resource.pcores-vcores-multiplier(新版本参数) 物理core : vcore 的值。 默认是 1 (老版本没有这个参数, 默认是 2 。 即pcore : vcore = 1 : 2 )

CPU相关配置参数如下:

  • yarn.nodemanager.resource.cpu-vcores:表示该节点上YARN可使用的vcore个数,默认是8。
  • yarn.scheduler.minimum-allocation-vcores:单个任务可申请的最小core个数,默认是1。
  • yarn.scheduler.maximum-allocation-vcores:单个任务可申请的最多虚拟CPU个数,默认是4。

一般yarn.nodemanager.resource.cpu-vcores按照当前总vcore*80%,不要把所有的vcore拿过来用

假设节点vcore为16 个,则:

yarn.nodemanager.resource.cpu-vcores : 一般分vcore总数的 80% 。 16*0.8 ≈ 12 。该值设为12 。

yarn-site.xml


# 每个容器可以使用的最小vcore
yarn.scheduler.minimum-allocation-vcores  1
# 每个contailer可以使用的最大vcore
yarn.scheduler.maximum-allocation-vcores  4

 

在可用内存不空闲的前提下,理论container数应该是: 32/2 = 16  32/8 = 4      ===>  4—16 个

在可用cpu不空闲的前提下,理论container数应该是: 12/4 = 3  12/1 = 12      ===>  3—12 个

综合考虑也会造成一定的资源浪费, 所以在正式调优时候要综合考虑CPU和内存的分配,尽量保证不要空出多余的资源。

 

参考:http://blog.itpub.net/30089851/viewspace-2127851/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值