排查流程:
收到业务反馈,在执行任务时很慢,提供了job的ID,经排查发现某些节点CPU负载很高,影响了他的job运行,而节点负载高的开始时间都是9:30左右。
经过我们排查找到9:37启动的一个任务大概执行7个小时。
找到耗时task执行的节点,确实发现负载很高,找到了任务的进程。
查看此进程的堆栈信息,发现很多full gc的次数,时间大概6个小时左右,频繁的full gc会使cpu使用过高。
查看job的进程的详细信息发现java heap内存只有820M,task处理的记录约为7400多万,造成堆内存不足频繁的发出full gc。
问题基本已经定论了,推荐执行job时加上如下参数设置。。。。
hive> set mapreduce.map.memory.mb=4096;
hive> set mapreduce.map.java.opts=-Xmx3686m;
hive> set mapreduce.reduce.memory.mb=4096;
hive> set mapreduce.reduce.java.opts=-Xmx3686m;