问题描述:mapreduce运行的内存GC时间占比高
问题建议:
建议将map/reduce内存调大至原值一倍(最大不超过50g)
GC频繁简述
GC(Garbage Collecting)是JVM特有垃圾回收机制;
在Hadoop集群应用程序运行时,如果堆内存设置小或者小文件太多,
都会引发频繁的GC,浪费计算资源并导致任务执行时间长甚至失败;
如果运算时发生GC的时间占40%以上,平台认为是不健康而且有优化空间,优化思路如下:
特别提示:没有OOM/没有异常的其他任务,请不要调整这些参数,使用默认参数配置即可;
没有问题的任务加参数导致资源利用率低浪费,同时部门队列上其他任务可能分配不到计算资源而等待变慢;
1、MAP阶段GC时间40%以上,OPTS参数调整:
mapreduce.map.cpu.vcores=$[目前值]*2
mapreduce.map.memory.mb =$[目前值]*2
mapreduce.map.java.opts=$[目前值] *2
2、REDUCE阶段GC时间40%以上,OPTS参数调整:
mapreduce.reduce.cpu.vcores=$[目前值]*2
mapreduce.reduce.memory.mb=$[目前值]*2
mapreduce.reduce.java.opts=$[目前值]*2
3、MAPJOIN参数优化:
(1)、小表放内存
(2)、加大小表最大文件大小:
类似:
set hive.auto.convert.join.noconditionaltask.size=100000000; //多大的表可以自动触发放到内层LocalTask中,默认大小100M
set hive.mapjoin.smalltable.filesize=200000000; //设置mapjoin小表的文件大小为200M,小表阈值
但是也不能设太大,不同任务可能需要不断试验。
(3)、多个MAPJOIN合并为一个;
4、分段SQL分拆并发执行;