设置性能调整的spark参数,outOfMemoryError超出Gc和GC限制

时间:2016-11-30 16:03:29

标签: apache-spark dataset pyspark apache-spark-sql apache-spark-dataset

我有5种模式,每种模式有8个cpu核心和30GB内存。我有5GB的数据集1和65GB的数据集2所以我需要加入它们并保存到s3文件系统并设置以下参数:

--num-executors 4 --spark.driver.memory 8g --executor-cores 5 --executor-memory 27g  --conf spark.yarn.executor.memoryOverhead=824m

但是,我到处搜索并尝试了不同的参数,但我仍然出现内存错误。超出了Gc开销限制。

也在Java Code中使用它:

conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer");
conf.set("spark.kryo.registrator", AvgRegistrator.class.getName());
conf.set("spark.driver.maxResultSize", "5g");
conf.set("spark.broadcast.compress", "true");
conf.set("spark.shuffle.compress", "true"); 

stackoverflow中没有任何解决方案对我有用。所以任何人都可以给我一个更好的解决方案来解决这个问题。

Spark java.lang.OutOfMemoryError: Java heap space

有一段时间我得到了这个:

java.lang.OutOfMemoryError: GC overhead limit exceeded

1 个答案:

答案 0 :(得分:1)

我会尝试提高并列级别(即将分区分成较小的分区)。

如果底层存储中只有少数几个分区,则必须在连接之前手动重新分区数据(例如,通过调用数据集或RDD上的repartition())。此外,如果您使用RDD,设置spark.default.parallelism属性可能会有所帮助。如果您使用的是数据集,请考虑spark.sql.shuffle.partitions参数,该参数定义每次shuffle操作后的分区数。