在集群使用的时候发现一些内存溢出的异常,结合网上的说法这一下总结。
1.CDH动态资源池默认采用DRF计划策略,也就是说:内存不够时,多余的cpu不会分配任务,cpu不够时,多余的内存也不会启动任务。
• mapreduce.map.memory.mb ,map任务内存,cdh默认1G
• mapreduce.map.cpu.vcores ,map任务虚拟CPU核数,cdh默认1
• mapreduce.reduce.memory.mb ,reduce任务内存,cdh默认1G
• mapreduce.reduce.cpu.vcores ,reduce任务虚拟CPU核数,cdh默认1
• yarn.nodemanager.resource.memory-mb ,容器内存,cdh默认8G
• yarn.nodemanager.resource.cpu-vcores ,容器虚拟CPU核数,cdh默认8,但CM会自动检测内核数并修改,我这里被自动改成了24。
• yarn.nodemanager.resource.memory-mb 尽可能把这个参数调大就可以。默认8G,加到16G。甚至24G。容器内存限制可用VCores。
2.先看yarn资源管理看分配情况,再看spark executor执行内存分配