Spark java.lang.outofmemoryerror gc overhead limit exceeded 与 spark OOM:java heap space 解决方法
问题描述:
在使用java.lang.OutOfMemoryError: Java heap space
spark-submit提 交任务时(standalone模式部署时,默认使用的就是standalone client模式提交任务),我们自己写的程序(main)被称为driver,在不指定给driver分配内存时,默认分配的是512M。在这种情况 下,如果处理的数据或者加载的数据很大(我是从hive中加载数据),driver就可能会爆内存,出现上面的OOM错误。
解决方法:
参考:http://spark.apache.org/docs/latest/configuration.html
方法一:在submit中指定 --driver-memory来设定driver的jvm的大小,可以通过spark-submit --helo来查看其它可以设置的参数。
eg:
.spark-submit
--master spark://master:7077
--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_home/conf/目录中,将spark-defaults.conf.template模板文件拷贝一份到/spark_home/conf目录下,命名为spark-defaults.conf,然后在里面设置spark.driver.memory memSize属性来改变driver内存大小。
eg:
spark:master=spark://master
spark.default.paralleslism=10
spark.driver.memory=2g
spark.serializer=org.apache.spark.serializer.KryoSerializer
spark.sql.shuffle.partitions=50