hadoop2.5,kylin2.1,ambarijava
在使用kylin的cube作build数据时,运行mapreduce的job,总会报jvm内存溢出。node
因而就想到优化配置参数,查了不少资料,最后总结了一下。jvm
1.Yarn里只有一个RM(ResourceManager)做为集群管理和统一资源管理和调度oop
AM(ApplicationMaster):负责应用程序管理优化
NM(NodeManager):负责单节点资源管理ui
Scheduler:负责集群调度设计
Container:对(节点,内存,CPU)等进行资源抽象内存
以上:hadoop
设计到内存配置资源
yarn:
yarn.nodemanager.resource.memory.mb
yarn.scheduler.minimum-allocation-mb
yarn.scheduler.maximum-allocation-mb
mapreduce:
mapreduce.map.memory.mb
mapreduce.reduce.memory.mb
mapreduce.reduce.java.opts
mapreduce.map.java.opts
mapreduce.task.io.sort.mb
在配置上:例如 经过 free -g 查看内存:20g
yarn.nodemanager.resource.memory.mb=16g
yarn.scheduler.minimum-allocation-mb=1g
yarn.scheduler.maximum-allocation-mb=16g
yarn.nodemanager.resource.memory.mb和 yarn.scheduler.maximum-allocation-mb内存要同样,而且留4g内存给系统
mapreduce.map.memory.mb=6g
mapreduce.reduce.memory.mb=12g
mapreduce.reduce.java.opts=6g
mapreduce.map.java.opts=3g
mapreduce.task.io.sort.mb=2g
mapreduce.reduce.memory.mb要小于yarn.scheduler.maximum-allocation-mb(最好在80%),要大于yarn.scheduler.minimum-allocation-mb
mapreduce.map.memory.mb要是mapreduce.reduce.memory.mb的一半
mapreduce.reduce.java.opts要是mapreduce.reduce.memory.mb的一半
mapreduce.map.java.opts要是mapreduce.map.memory.mb的一半
mapreduce.task.io.sort.mb通常不要超过JVM
JVM重用:
加入以上参数
mapreduce.job.ubertask.enable
mapreduce.job.ubertask.maxmaps
mapreduce.job.ubertask.maxreduces