前阶段发生过两次JT(CDH4.2.0) OOM的问题,导致ETL过程出错;由于是刚接手的集群参数大多是默认的,修改了JT的JVM参数相关的CMS,同时减小了retireJob的interval和cachesize看看是否奏效.发现过了三天又开始报警了,查看监控看到Old gen一直在涨根本释放不掉,估计是memory leak,做个内存dump分析吧(10GB的heap size),做了两次dump发现FileSystem$Cache部分一直在涨:
Google了一下果然找到了相关的Bug:https://issues.apache.org/jira/browse/MAPREDUCE-5351;解决方案主要:
1.监控JT,符合一定阈值重启
2.修改如下参数,并写脚本手动清理job file
<property>
<name>keep.failed.task.files</name>
<value>true</value>
</property>
<property>
<name>keep.task.files.pattern</name>
<value>buhuibeipipeidaodezhengzebiaodashi</value>
</property>
不过方法2在kerboros环境下有个bug: https://issues.apache.org/jira/browse/MAPREDUCE-5047,最终采取了方案1