0

我有5個模式,每個模式有8個CPU核心和30GB內存。我有5GB數據集1和65GB數據集2,所以我需要加入它們並保存到S3文件系統和I設置以下參數:設置火花性能調整參數,outOfMemoryError超過Gc和GC限制

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

但是,我找遍和嘗試不同的參數,還是我得到了內存不足的錯誤。超過Gc開銷限制。

在Java代碼中也用這樣的:

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"); 

沒有在任何計算器解決方案,爲我工作。所以任何人都可以給我一個更好的解決方案來擺脫這個問題。

Spark java.lang.OutOfMemoryError: Java heap space 

有的時候我正在此:

java.lang.OutOfMemoryError: GC overhead limit exceeded 

回答

1

我會嘗試增加paralellism的水平(即你的分區分割成更小的)。

如果底層存儲中只有少數部分,則必須在加入之前手動重新分區數據(例如,通過在數據集或RDD上調用repartition())。另外,如果您使用RDD,則設置spark.default.parallelism屬性可以提供幫助。如果您使用的數據集,考慮spark.sql.shuffle.partitions參數,其中每個隨機播放操作後定義分區的數量。

+0

已經嘗試使用不同的分區。不工作,:(我應該多少個分區讓我上面的配置?我總有8GB的第一個數據集200周的分區,而在另一個數據集99個分區共65 GB的數據。 –

+0

這聽起來夠用就行。你能更新與你使用的代碼和星火版本,您正在設置'spark.yarn.executor.memoryOverhead'參數比默認的一個小的值的問題? –

+0

也(等於executorMemory * 0.10)。 –

相關問題