华为C80 yarn提交mapreduce异常:OutOfMemoryError:GC overhead limitexceeded kill -9 %p
yarn提交mapreduce异常:OutOfMemoryError:GC overhead limitexceeded kill -9 %p
记一次生产环境的运算异常
生产环境一直运行稳定的离线计算任务,从未出现过异常,忽然发现最近在本地提交到hadoop集群时发生异常,每当提交到yarn申请资源时,程序立刻被杀死。
本地提交到集群开始运行程序,kerberos认证此时已通过,可以看到时从程序在计算表分区大小时,被杀死。
被kill掉的任务已经通过认证准备开始计算时被kill掉的,说明执行kill的应该是集群的机制导致的,而非本地调度机器所为。另外可以看到此时被kill的任务虽然已经通过了kerberos认证,但未申请到yarn资源,未分配到application id ,那现在基本可以断定,是yarn申请资源的准备阶段出现了问题。又因为导致OOM的原因是GC超限,基本可以定位问题的原因是yarn的gc参数设置过小或者被占用导致释放不出资源导致的。
问题已经清晰,那么调整参数测试
在提交前导入指定的yarn gc参数环境变量
GC_OPTS_YARN 参数的默认大小为128m,这里我们调大
export GC_OPTS_YARN="-Xmx4096m"
重新yarn jar提交mapreduce任务,完美解决。