yarn和mapreduce资源调优
1.yarn---Memory调优
YARN允许用户配置每个节点上可用的物理内存资源,注意,这里是“可用的”,因为一个节点上的内存会被若干个服务共享,比如一部分给YARN,一部分给HDFS,一部分给HBase等,YARN配置的只是自己可以使用的,配置参数如下:
(1)yarn.nodemanager.resource.memory-mb
表示该节点上YARN可使用的物理内存总量,默认是8192(MB),注意,如果你的节点内存资源不够8GB,则需要调减小这个值,而YARN不会智能的探测节点的物理内存总量。
(2)yarn.scheduler.minimum-allocation-mb
单个容器可申请的最少物理内存量,默认是1024(MB),如果一个容器申请的物理内存量少于该值,则该对应的值改为这个数。
(3) yarn.scheduler.maximum-allocation-mb
单个容器可申请的最多物理内存量,默认是8192(MB)
2.yarn---CPU调优
目前的CPU被划分成虚拟CPU(CPU virtual Core),这里的虚拟CPU是YARN自己引入的概念,初衷是,考虑到不同节点的CPU性能可能不同,每个CPU具有的计算能力也是不一样的,比如某个物理CPU的计算能力可能是另外一个物理CPU的2倍,这时候,你可以通过为第一个物理CPU多配置几个虚拟CPU弥补这种差异。用户提交作业时,可以指定每个任务需要的虚拟CPU个数。在YARN中,CPU相关配置参数如下:
(1)yarn.nodemanager.resource.cpu-vcores
表示该节点上YARN可使用的虚拟CPU个数,默认是8,注意,目前推荐将该值设值为与物理CPU核数数目相同。如果你的节点CPU核数不够8个,则需要调减小这个值,而YARN不会智能的探测节点的物
理CPU总数。
(2)yarn.scheduler.minimum-allocation-vcores
单个容器可申请的最小虚拟CPU个数,默认是1,如果一个容器申请的CPU个数少于该数,则该对应的值改为这个数
(3)yarn.scheduler.maximum-allocation-vcores
单个容器可申请的最多虚拟CPU个数,默认是4
3.mapreduce---Memory调优
(1)yarn.app.mapreduce.am.resource.mb
MR AppMaster需要的内存,默认是1536M
(2)yarn.app.mapreduce.am.command-opts
MR AppMaster的Java opts ,默认是-Xmx1024m
(3)mapreduce.map.memory.mb
每个map task所需要的内存,默认是1024M。应该是大于或者等于Container的最小内存
(4)mapreduce.reduce.memory.mb
每个reduce task所需要的内存,默认是1024M
(5)mapreduce.map.java.opts
map task进程的java.opts,默认是-Xmx200m
(6)mapreduce.reduce.java.opts
reduce task进程的java.opts,默认是-Xmx200m
特别注意:
mapreduce.map.memory.mb >mapreduce.map.java.opts
mapreduce.reduce.memory.mb >mapreduce.reduce.java.opts
mapreduce.map.java.opts / mapreduce.map.memory.mb
=0.70~0.80
mapreduce.reduce.java.opts / mapreduce.reduce.memory.mb
=0.70~0.80
在yarn container这种模式下,JVM进程跑在container中,mapreduce.{map|reduce}.java.opts 能够通过Xmx设置JVM最大的heap的使用,
一般设置为0.75倍的memory.mb,
则预留些空间会存储java,scala code等
4.mapreduce---CPU调优
(1)mapreduce.map.cpu.vcores
map task的虚拟核数,默认为1
(2)mapreduce.reduce.cpu.vcores
reduce task的虚拟核数,默认为1
(3)yarn.app.mapreduce.am.resource.cpu-vcores
am的虚拟核数,默认为1
5.案例
假设机器的物理配置 64G 16cores
装完系统还剩 62G
预留15~20% 14G:DN 4G + NM 1G=5G 9G
DN进程: 生产4G
1000m
hadoop-env.sh
HADOOP_NAMENODE_OPTS=-Xmx1024m
HADOOP_DATANODE_OPTS=-Xmx4096m
NM进程: 生产1G
yarn-env.sh
export YARN_RESOURCEMANAGER_HEAPSIZE=1024
export YARN_NODEMANAGER_HEAPSIZE=1024
部署同一台: 数据本地化
NN RM 经常性部署同一台 说白了 集群节点少
yarn.nodemanager.resource.memory-mb : 48G 计算总内存 固定经验计算值
yarn.nodemanager.resource.cpu-vcores : 24
yarn.scheduler.minimum-allocation-mb : 4G
yarn.scheduler.minimum-allocation-vcores: 2
yarn.scheduler.maximum-allocation-mb : 8G
yarn.scheduler.maximum-allocation-vcores : 4 固定经验值(不要超过5个)
6.参考文档
http://blog.itpub.net/30089851/viewspace-2127851/
http://blog.itpub.net/30089851/viewspace-2127850/