问题一: mapreduce 分配的内存太小
原因: 由于CDH 默认启用 DRF 计划策略。
DRF: Dominant Resource Fairness,根据CPU和内存公平调度资源。CDH动态资源池默认采用的DRF计划策略。简单的理解就是内存不够的时候,多余的CPU就不会分配任务了,就让他空着;CPU不够的时候,多出来的内存也不会再启动任务了。
理解这个计划策略后,再查看Yarn启动任务时资源相关的参数,发现有以下几个参数可能会产生影响:
- 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。
解决办法:
通过 CDH 前端页面的 动态资源池配置 进行配置。