我对 PySpark 比较陌生。我一直在尝试缓存 30GB 的数据,因为我需要对其进行聚类。所以执行任何操作,如 count
最初我得到了一些 heap space issue
.所以我用谷歌搜索,发现增加执行程序/驱动程序内存对我有用。所以,这是我目前的配置
SparkConf().set('spark.executor.memory', '45G')
.set('spark.driver.memory', '80G')
.set('spark.driver.maxResultSize', '10G')
但现在我得到了这个
garbage collection issue
.我查了SO,但到处都是很模糊的答案。人们建议玩配置。有没有更好的方法来确定配置应该是什么?我知道这只是一个调试异常,我可以将其关闭。但我仍然想学习一些数学来自己计算配置。我目前在具有 256GB RAM 的服务器上。任何帮助表示赞赏。提前致谢。
最佳答案
您的服务器/集群有多少个内核?
这个 GC 错误是说 spark 已经花费了至少 98% 的运行时垃圾收集(从内存中清理未使用的对象),但在这样做的同时设法释放了 <2% 的内存。我不认为它是可以避免的,正如您所建议的,因为它表明内存几乎已满并且需要垃圾收集。抑制此消息可能会在不久之后导致内存不足错误。 This link将为您提供有关此错误含义的详细信息。正如您所提到的,解决它可以像处理配置设置一样简单,但这也可能意味着您需要修复代码。减少存储的临时对象的数量,使您的数据帧尽可能紧凑(例如,将字符串编码为索引),以及在正确的时间(最节省内存)执行连接或其他操作都可以提供帮助。研究为连接广播较小的数据帧。在没有看到代码的情况下很难提出任何建议,这个资源也是如此。
对于您的 spark 配置调整,this link应该提供您需要的所有信息。乍一看,您的配置设置似乎很高,但我不知道您的集群设置。
关于apache-spark - Pyspark:java.lang.OutOfMemoryError:超出 GC 开销限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52069879/