apache-spark - Pyspark:java.lang.OutOfMemoryError:超出 GC 开销限制

标签 apache-spark pyspark apache-spark-sql

我对 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/

相关文章:

postgresql - SparkSQL PostgresQL 数据框分区

apache-spark - 使用 Yarn-cluster 在 Oozie 中运行 Spark 作业

python - 如何使用列表重命名 pyspark 数据框的所有列

apache-spark - PySpark 的第一个和最后一个函数一次完成一个分区

apache-spark - Pyspark udf 对于不带参数的函数失败,但对于不带参数的 lambda 有效

python - iPython notebook 中的 PySpark 在使用 count() 和 first() 时引发 Py4JJavaError

apache-spark - Spark Mllib kmeans 示例,使用数据框而不是 textFile

python - AWS-EMR 错误退出代码 143

apache-spark - 一次性简化多列(30列)复杂的pyspark聚合

python - 在 mllib kmeans pyspark 中获取集群标签