Spark Standalone模式 Master进程挂掉问题


环境:

spark version :1.5.2
运行模式:standalone

过程分析
集群上跑着大量任务,但发现集群每运行两天就会挂掉一次。挂掉后集群所有work进程和master进程都会死掉。于是查看work进程日志:


于是再查看Master进程日志发现报OOM:
java.lang.OutOfMemoryError: GC overhead limit execeeded

由于读过Storage模块源码,得知缓存数据和Master进程无关。于是通过jstat工具监控了一下Master进程,发现每当任务执行完关闭后,
Master进程的jvm老年代占用会直线飙高。无意间想到会不会和日志记录有关,查了一下果然,Spark的History默认会将50个执行完的application
的一些信息(ui界面要显示的内容)加载到Master进程中,由于我们的任务复杂度高,有些任务的日志已经达到150M,这些大数据会直接被
加载到jvm老年代中,当老年代撑满,执行多次full gc后也释放不掉,所有就报了 GC overhead limit execeeded异常。

解决方案
由于我们集群内存资源有限,已不可能再加大Master进程内存大小,所以只能考虑通过配置来解决
查询了一下文档发现有一个配置项: spark.history.retainedApplications 该参数会控制加载在内存中的application日志数量。 但是通过
配置该配置项发现内存还是会gc不掉,不知算不算是BUG。再查文档发现了另一个配置项:spark.deploy.retainedApplications 该配置项是控制
ui页面上显示的历史application数量。在spark-env.sh 中增加 : export SPARK_MASTER_OPTS="-Dspark.deploy.retainedApplications=5"   再次监控
jvm发现当老年代撑满后会执行一次full gc释放掉内存,至此,问题解决。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29754888/viewspace-2063153/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29754888/viewspace-2063153/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值