CDH集群之YARN性能调优

24 篇文章 2 订阅
2 篇文章 0 订阅

本文主要讨论CDH集群的YARN调优配置,关于YARN的调优配置,主要关注CPU和内存的调优,其中CPU是指物理CPU个数乘以CPU核数,即Vcores = CPU数量*CPU核数。YARN是以container容器的形式封装资源的,task在container内部执行。

集群配置

集群的配置主要包括三步,第一是先规划集群的工作主机以及每台主机的配置,第二是规划每台主机的安装的组件及其资源分配,第三是规划集群的规模大小。

工作主机的配置

如下表所示:主机的内存为256G,4个6核CPU,CPU支持超线程,网络带宽为2G

主机     组件数量  大小总计  描述
RAM256G256G内存大小
CPU4648总CPU核数
HyperThreading CPUYES超线程CPU,使操作系统认为处理器的核心数是实际核心数的2倍,因此如果有24个核心的处理器,操作系统会认为处理器有48个核心
网络21G2G网络带宽

工作主机安装组件配置

第一步已经明确每台主机的内存和CPU配置,下面为每台节点的服务分配资源,主要分配CPU和内存。

服务类别CPU核数内存(MB)描述
操作系统Overhead18192为操作系统分配1核8G内存,一般4~8G
其它服务Overhead00非CDH集群、非操作系统占用的资源
Cloudera Manager agentOverhead11024分配1核1G
HDFS DataNodeCDH11024默认1核1G
YARN NodeManagerCDH11024默认1核1G
Impala daemonCDH00可选的服务,建议至少为impala demon分配16G内存
Hbase RegionServerCDH00可选的服务,建议12~16G内存
Solr ServerCDH00可选的服务,最低1G内存
Kudu ServerCDH00可选的服务,kudu Tablet server最低1G内存
Available Container Resources44250880剩余分配给yarn的container

container资源分配Physical Cores to Vcores Multiplier:每个container的cpu core的并发线程数,本文设置为1


YARN Available Vcores:YARN可用的CPU核数=Available Container  Resources * Physical Cores to Vcores Multiplier,即为44

YARN Available Memory:250880

集群大小

集群的工作节点个数:10

YARN配置

YARN NodeManager配置属性

配置参数描述
yarn.nodemanager.resource.cpu-vcores44yarn 的nodemanager分配44核,每台节点剩余的CPU
yarn.nodemanager.resource.memory-mb250800分配的内存大小,每台节点剩余的内存

验证YARN的配置

登录YARN的resourcemanager的WEBUI:http://<ResourceManagerIP>:8088/,验证'Memory Total'与'Vcores Total',如果节点都正常,那么Vcores Total应该为440,Memory应该为2450G,即250800/1024*10

YARN的container配置

YARN的container的Vcore配置

配置参数描述
yarn.scheduler.minimum-allocation-vcores1分配给container的最小vcore个数
yarn.scheduler.maximum-allocation-vcores44分配给container的最大vcore数
yarn.scheduler.increment-allocation-vcores1容器虚拟CPU内核增量

YARN的container内存配置

配置参数描述
yarn.scheduler.minimum-allocation-mb1024分配给container的最小内存大小,为1G
yarn.scheduler.maximum-allocation-mb250880分配给container的最大内存,等于245G,即为每台节点剩余的最大内存
yarn.scheduler.increment-allocation-mb512容器内存增量,默认512M

集群资源分配估计

描述最小值最大值
根据每个container的最小内存分配,集群最大的container数量为2450
根据每个container的最小Vcore分配,集群最大的container数量为440
根据每个container的最大内存分配,集群的最小container数为10
根据每个container的最大Vcores分配,集群的最小container数为10

container合理配置检查

配置约束描述
最大的Vcore数量必须大于等于分配的最小Vcore数yarn.scheduler.maximum-allocation-vcores >= yarn.scheduler.minimum-allocation-vcores
分配的最大内存数必须大于等于分配的最小内存数yarn.scheduler.maximum-allocation-mb >= yarn.scheduler.minimum-allocation-mb
分配的最小核数必须大于等于0yarn.scheduler.minimum-allocation-vcores >= 0
分配的最大Vcore数必须大于等于1yarn.scheduler.maximum-allocation-vcores >= 1
每台主机分配给nodemanaer的vcore总数必须大于分配的最小vcore数yarn.nodemanager.resource.cpu-vcores >= yarn.scheduler.minimum-allocation-vcores
每台主机分配给nodemanaer的vcore总数必须大于分配的最大vcore数yarn.nodemanager.resource.cpu-vcores >= yarn.scheduler.maximum-allocation-vcores
每台主机分配给nodemanaer的内存必须大于调度分配的最小内存yarn.nodemanager.resource.memory-mb >= yarn.scheduler.maximum-allocation-mb
每台主机分配给nodemanaer的内存必须大于调度分配的最大内存yarn.nodemanager.resource.memory-mb >= yarn.scheduler.minimum-allocation-mb
container最小配置如果yarn.scheduler.minimum-allocation-mb小于1GB,container可能会被YARN杀死,因为会出现OutOfMemory内存溢出的现象

MapReduce配置

ApplicationMaster配置

配置参数取   值描述
yarn.app.mapreduce.am.resource.cpu-vcores1ApplicationMaster 的虚拟CPU内核数
yarn.app.mapreduce.am.resource.mb1024ApplicationMaster的物理内存要求(MiB)
yarn.app.mapreduce.am.command-opts800传递到 MapReduce ApplicationMaster 的 Java 命令行参数,AM Java heap 大小,为800M

堆与容器大小之比

配置参数取值  描述
task自动堆大小yes
mapreduce.job.heap.memory-mb.ratio0.8Map 和 Reduce 任务的堆大小与容器大小之比。堆大小应小于容器大小,以允许 JVM 的某些开销,默认为0.8

map task配置

配置参数描述
mapreduce.map.cpu.vcores1分配给map task的vcore数
mapreduce.map.memory.mb1024分配给map task的内存数,1G
mapreduce.task.io.sort.mb400I/O 排序内存缓冲 (MiB),默认256M,一般不用修改

reduce task配置

配置参数描述
mapreduce.reduce.cpu.vcores1分配给reduce task的vcore数
mapreduce.reduce.memory.mb1024分配给reduce task的内存数,1G

MapReduce配置合理性检查

  • Application Master配置的合理性检查

yarn.scheduler.minimum-allocation-vcores <=  yarn.app.mapreduce.am.resource.cpu-vcores<= yarn-scheduler.maximum-allocation-vcores

yarn.scheduler.minimum-allocation-mb <= yarn.app.mapreduce.am.resource.cpu-vcores <= yarn.scheduler.maximum-allocation-mb  

Java Heap大小是container大小的75%~90%: 太低会造成资源浪费, 太高会造成OOMMap Task配置的合理性检查

  • Reduce Task配置的合理性检查

yarn.scheduler.minimum-allocation-vcores <= mapreduce.map.cpu.vcores <= yarn-scheduler.maximum-allocation-vcores

yarn.scheduler.minimum-allocation-mb <= mapreduce.map.memory.mb <= yarn.scheduler.maximum-allocation-mb

Spill/Sort内存为每个task堆内存的40%~60%

  • Reduce Task配置的合理性检查

yarn.scheduler.minimum-allocation-vcores <= mapreduce.reduce.cpu.vcores <= yarn-scheduler.maximum-allocation-vcores  

yarn.scheduler.minimum-allocation-mb <= mapreduce.reduce.memory.mb <= yarn.scheduler.maximum-allocation-mb

YARN和MapReduce配置参数总结

YARN/MapReduce参数配置描述
yarn.nodemanager.resource.cpu-vcores节点服务器上yarn可以使用的虚拟CPU个数
yarn.nodemanager.resource.memory-mb节点服务器上yarn可以使用的内存大小
yarn.scheduler.minimum-allocation-vcores分配给container的最小虚拟cpu数
yarn.scheduler.maximum-allocation-vcores分配给container的最大虚拟cpu数
yarn.scheduler.increment-allocation-vcores分配给container的递增虚拟cpu数
yarn.scheduler.minimum-allocation-mb分配给container的最小内存大小
yarn.scheduler.maximum-allocation-mb分配给container的最大内存
yarn.scheduler.increment-allocation-mb分配给container的递增内存大小
yarn.app.mapreduce.am.resource.cpu-vcoresApplicationMaste的虚拟cpu数
yarn.app.mapreduce.am.resource.mbApplicationMaste的内存大小
mapreduce.map.cpu.vcoresmap task的虚拟CPU数
mapreduce.map.memory.mbmap task的内存大小
mapreduce.reduce.cpu.vcoresreduce task的虚拟cpu数
mapreduce.reduce.memory.mbreduce task的内存大小
mapreduce.task.io.sort.mbI/O排序内存大小

note:在CDH5.5或者更高版本中,参数mapreduce.map.java.opts, mapreduce.reduce.java.opts, yarn.app.mapreduce.am.command-opts会基于container堆内存的比例进行自动配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值