Spark java.lang.outofmemoryerror gc overhead limit exceeded 与 spark OOM:java heap space 解决方法

时间:2024-01-13 08:48:08

引用自:http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380146d96864968d4e414c4224614143bbae87a221207d0d82f2747f41802bded602571507be9dad58f49d8b9972b2b8933712d5cd04e53914aef925125b061d70ab6f45ff0bb806ac0ea81c4de2444ca24127bf0aed8065503cb1fe71446f4a7e915521907bb9d6d31e8580776c87c1df60ceee1423947c1ab9d4b4db33dd1120697de60e12912c44ee0485b7e13f31aa60820786bbf1461e8444c53d8ba0ab07c2e16&p=aa7b8b01a4934eac58ee852d02149c&newp=913fc00486cc42af5bba872d0214cf231610db2151d1d301298ffe0cc4241a1a1a3aecbf26201a01d7c27f6001ad4b5ce1f43175350434f1f689df08d2ecce7e789b&user=baidu&fm=sc&query=spark+submitjava%2Elang%2EOutOfMemoryError%3A+GC+overhead+limit+exceeded&qid=a8630fd9000af2ec&p1=3

问题描述:

在使用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