container: 内存 和 cpu的虚拟概念
memory:8192, vCores:8
资源例如120G,20%预留给系统

内存:

yarn.nodemanager.resource.memory-mb 96G (CDH配置注意这个参数是在编辑每一台参数96/6=16G)
yarn.scheduler.minimum-allocation-mb 1G 极限情况下 96个container
yarn.scheduler.maximum-allocation-mb 96G 极限情况下 1个container
core 物理core
vcore 虚拟core
yarn自己设计的概念,设计初衷是 考虑大数据机器的配置CPU是不一致的,每个计算能力不一样。
比如hadoop002机器的cpu是hadoop001机器的cpu的2倍,这个时候就通过设置第二个机器的cpu的虚拟core的参数来弥补这个差距。
hadoop001 不强悍 pcore:vcore=1:1
hadoop002 强悍 pcore:vcore=1:2
但是: 现在生产上 基本上设置不关心这个级别,现在Apache是
yarn.nodemanager.resource.pcores-vcores-multiplier 1
再但是:生产上默认是设置 yarn.nodemanager.resource.pcores-vcores-multiplier 2
一个计算任务至少需要1core,你的core越多,计算的并发就越多
内存: 计算时所需的空间 oom-killer机制
CPU:决定并发任务 卡卡的感觉 不影响任务

CPU:

yarn.nodemanager.resource.cpu-vcores 32 (这个参数根据实际情况来)
yarn.scheduler.minimum-allocation-vcores 1 极限情况 32个container
yarn.scheduler.maximum-allocation-vcores 32 极限情况 1个container

container:1-96
vcores :1-32
生产上: cloudera公司经过生产实践,推荐1个container的vcore最好不要超过5,就设置4个
yarn.scheduler.maximum-allocation-vcores 4 极限情况下,8个container
那么设置更新配置如下:
yarn.nodemanager.resource.memory-mb 96G
yarn.scheduler.minimum-allocation-mb 1G
yarn.scheduler.maximum-allocation-mb 12G =8
yarn.nodemanager.resource.cpu-vcores 32
yarn.scheduler.minimum-allocation-vcores 1
yarn.scheduler.maximum-allocation-vcores 4 =8
补充参数: 生产不动
yarn.nodemanager.pmem-check-enabled true 1G
yarn.nodemanager.vmem-check-enabled true 2.1G
yarn.nodemanager.vmem-pmem-ratio 2.1

下面补充一些常用的Mapreduce的参数:

资源相关参数
以下参数是在用户自己的 MapReduce 应用程序中配置就可以生效:
mapreduce.map.memory.mb:
一个MapTask可使用的资源上限(单位:MB),默认为1024。
如果MapTask实际使用的资源量超过该值,则会被强制杀死。
mapreduce.reduce.memory.mb:
一个ReduceTask可使用的资源上限(单位:MB),默认为1024。
如果ReduceTask实际使用的资源量超过该值,则会被强制杀死。
mapreduce.map.cpu.vcores:
每个MapTask可使用的最多cpu core数目,默认值: 1
mapreduce.reduce.cpu.vcores:
每个ReduceTask可使用的最多cpu core数目,默认值: 1
mapreduce.map.java.opts:
MapTask的JVM参数,你可以在此配置默认的java heap size等参数,
比如:"-Xmx2048m -verbose:gc -Xloggc:/tmp/@taskid@.gc",默认值是:""
mapreduce.reduce.java.opts:
ReduceTask的JVM参数,你可以在此配置默认的java heap size等参数
以下参数应该在yarn启动之前就配置在服务器的配置文件中才能生效:
yarn.scheduler.minimum-allocation-mb=1024
给应用程序container分配的最小内存
yarn.scheduler.maximum-allocation-mb=8192
给应用程序container分配的最大内存
yarn.scheduler.minimum-allocation-vcores=1
yarn.scheduler.maximum-allocation-vcores=32
yarn.nodemanager.resource.memory-mb=8192
mapreduce.task.io.sort.mb=256 (HDFSv3.0)
shuffle的环形缓冲区大小,默认256m
mapreduce.map.sort.spill.percent=0.8
环形缓冲区溢出的阈值,默认80%
MapReduce程序进行flush操作的阀值,默认0.80。
mapreduce.reduce.shuffle.parallelcopies
MapReduce程序reducer copy数据的线程数,默认10 (HDFSv3.0)。
mapreduce.reduce.shuffle.input.buffer.percent
reduce复制map数据的时候指定的内存堆大小百分比,默认为0.70
适当的增加该值可以减少map数据的磁盘溢出,能够提高系统能。
mapreduce.reduce.shuffle.merge.percentreduce
reduce进行shuffle的时候,用于启动合并输出和磁盘溢写的过程的阀值,默认为0.66。
如果允许,适当增大其比例能够减少磁盘溢写次数,提高系统性能。
同mapreduce.reduce.shuffle.input.buffer.percent一起使用
mapreduce.task.timeout
mr程序的task执行情况汇报过期时间,默认600000(10分钟)
设置为0表示不进行该值的判断。
容错相关参数
mapreduce.map.maxattempts=4
每个MapTask最大重试次数,一旦重试参数超过该值,则认为MapTask运行失败
mapreduce.reduce.maxattempts=4:
每个ReduceTask最大重试次数,一旦重试参数超过该值,则认为MapTask运行失败
mapreduce.task.timeout=600000:
Task超时时间,经常需要设置的一个参数,该参数表达的意思为:
如果一个task在一定时间内没有任何进入,即不会读取新的数据,也没有输出数据,则认为该task
处于block状态,可能是卡住了,也许永远会卡主,为了防止因为用户程序永远block住不退出,则强制
设置了一个该超时时间(单位毫秒),老版本默认是300000。如果你的程序对每条输入数据的处理时
间过长(比如会访问数据库,通过网络拉取数据等),建议将该参数调大