我有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
答案 0 :(得分:1)
我会尝试提高并列级别(即将分区分成较小的分区)。
如果底层存储中只有少数几个分区,则必须在连接之前手动重新分区数据(例如,通过调用数据集或RDD上的repartition()
)。此外,如果您使用RDD,设置spark.default.parallelism
属性可能会有所帮助。如果您使用的是数据集,请考虑spark.sql.shuffle.partitions
参数,该参数定义每次shuffle操作后的分区数。