ITPub博客

首页 > 大数据 > 数据分析 > Spark Standalone模式 Master进程挂掉问题

Spark Standalone模式 Master进程挂掉问题

原创 数据分析 作者:破棉袄 时间:2016-03-24 14:51:13 0 删除 编辑

环境:

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博客 ” ,链接:https://blog.itpub.net/29754888/viewspace-2063153/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: Python Flask
请登录后发表评论 登录
全部评论

注册时间:2014-07-16

  • 博文量
    180
  • 访问量
    1158161