Apache spark PySpark上超出了GC开销限制
我目前正在使用PySpark处理大量日志,并且我的集群上面临一些内存问题 这给我带来了以下错误: HTTP错误500 访问/jobs/时出现问题。原因: 由以下原因导致的服务器错误: java.lang.OutOfMemoryError:超出GC开销限制 以下是我当前的配置:Apache spark PySpark上超出了GC开销限制,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,我目前正在使用PySpark处理大量日志,并且我的集群上面临一些内存问题 这给我带来了以下错误: HTTP错误500 访问/jobs/时出现问题。原因: 由以下原因导致的服务器错误: java.lang.OutOfMemoryError:超出GC开销限制 以下是我当前的配置: spark.driver.cores 3 spark.driver.memory 6g spark.executor.cores 3 spark.executor.instances 20 spark.exe
spark.driver.cores 3
spark.driver.memory 6g
spark.executor.cores 3
spark.executor.instances 20
spark.executor.memory 6g
spark.yarn.executor.memoryOverhead 2g
首先,我不会在spark工作中缓存/保留任何内容
我读到过,它可能是一种记忆过剩的东西,这就是我增加它的原因。但这似乎还不够。
我还读到,垃圾收集器也可能有问题。这是我这里的主要问题,当你必须处理许多不同的数据库时,最佳实践是什么
我必须做大量的加入,我正在用SparkSql做这件事,并且我正在创建许多临时视图。这是一个坏习惯吗?做一些巨大的SQL请求并在一个SQL请求中加入10个连接会更好吗?它会降低代码的可读性,但它能帮助解决我的问题吗
谢谢,嗯,我想我已经解决了我的问题。这是关于广播的事 我认为由于我的连接非常大,它们需要相当长的时间,因此我禁用了广播:
config("spark.sql.autoBroadcastJoinThreshold", "-1")
问题似乎已经解决了
谢谢,您使用的spark版本是什么?您是否能够验证传递给spark的驱动程序JVM的
-Xmx
参数值?您是否尝试使用visualvm连接到驱动程序以检查哪些对象占用了这么多内存?请确保您的spark.memory.fraction=0.6
。如果该值高于遇到垃圾收集错误的值,请参阅