Spark java.lang.outofmemoryerror gc overhead limit exceeded 与 spark OOM:java heap space 解决方法
2016-06-18 20:56
726 查看
问题描述:
在使用spark过程中,有时会因为数据增大,而出现下面两种错误:
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError:GC overhead limit exceeded
这两种错误之前我一直认为是executor的内存给的不够,但是仔细分析发现其实并不是executor内存给的不足,而是driver的内存给的不足。在standalone client模式下用spark-submit提交任务时(standalone模式部署时,默认使用的就是standalone client模式提交任务),我们自己写的程序(main)被称为driver,在不指定给driver分配内存时,默认分配的是512M。在这种情况下,如果处理的数据或者加载的数据很大(我是从hive中加载数据),driver就可能会爆内存,出现上面的OOM错误。
解决方法:
参考:http://spark.apache.org/docs/latest/configuration.html
方法一:在spark-submit中指定 --driver-memory memSize参数来设定driver的jvm内存大小,可以通过spark-submit --help查看其他可以设置的参数。
eg:
方法二:在spark_home/conf/目录中,将spark-defaults.conf.template模板文件拷贝一份到/spark_home/conf目录下,命名为spark-defaults.conf,然后在里面设置spark.driver.memory memSize属性来改变driver内存大小。
eg:
在使用spark过程中,有时会因为数据增大,而出现下面两种错误:
java.lang.OutOfMemoryError: Java heap space
java.lang.OutOfMemoryError:GC overhead limit exceeded
这两种错误之前我一直认为是executor的内存给的不够,但是仔细分析发现其实并不是executor内存给的不足,而是driver的内存给的不足。在standalone client模式下用spark-submit提交任务时(standalone模式部署时,默认使用的就是standalone client模式提交任务),我们自己写的程序(main)被称为driver,在不指定给driver分配内存时,默认分配的是512M。在这种情况下,如果处理的数据或者加载的数据很大(我是从hive中加载数据),driver就可能会爆内存,出现上面的OOM错误。
解决方法:
参考:http://spark.apache.org/docs/latest/configuration.html
方法一:在spark-submit中指定 --driver-memory memSize参数来设定driver的jvm内存大小,可以通过spark-submit --help查看其他可以设置的参数。
eg:
./spark-submit \ --master spark://7070 \ --class $MAIN_CLASS \ --executor-memory 3G \ --total-executor-cores 10 \ --driver-memory 2g \ --name $APP_NAME \ --conf "spark.executor.extraJavaOptions=-XX:+PrintGCDetails -XX:+PrintGCTimeStamps" \ "$SPARK_APP_JAR"
方法二:在spark_home/conf/目录中,将spark-defaults.conf.template模板文件拷贝一份到/spark_home/conf目录下,命名为spark-defaults.conf,然后在里面设置spark.driver.memory memSize属性来改变driver内存大小。
eg:
spark.master spark://master:7077 spark.default.parallelism 10 spark.driver.memory 2g spark.serializer org.apache.spark.serializer.KryoSerializer spark.sql.shuffle.partitions 50
相关文章推荐
- 用javaCOPY文件数据
- log4j详细配置(项目中应用)
- 《Java项目实践》:简单聊天程序
- Struts2处理流程分析
- JAVA设计模式--观察者模式
- 如何使用 Java 中的数组
- Java函数的重载
- spring+struct+hibernate
- Java函数的定义
- JavaSE入门学习50:多线程编程(一)
- java线程池基础知识
- struts 笔记(王勇)
- hibernate笔记
- SpringMvc Eclipse搭建web项目
- myEclipse中的web项目直接引入到eclipse中运行
- Struts2基本配置
- 【持久化框架】SpringMVC+Spring4+Mybatis3 集成,开发简单Web项目+源码下载
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- Java设计模式其一【单例设计模式】
- maven笔记