PySpark超出了GC开销限制

时间:2017-09-11 21:31:51

标签: apache-spark pyspark apache-spark-sql

我目前正在使用PySpark处理大型日志,而我在群集上遇到了一些内存问题。

它给我带来了以下错误:

  

HTTP ERROR 500

     

访问/ jobs /时遇到问题。原因是:

     

服务器错误:

     

java.lang.OutOfMemoryError:超出GC开销限制

这是我当前的配置:

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

首先,我不会在我的火花工作中缓存/保留任何内容。

我已经读过它可能是memoryOverhead的东西,这就是为什么我增加了它。但似乎还不够。 我还读到它也可能与垃圾收集器有关。这就是我的主要问题,当你必须处理许多不同的数据库时,最佳实践是什么。

我必须做很多 JOIN ,我用SparkSql做这件事,并且我创建了很多 TempViews 。这是一种不好的做法吗?做一些巨大的SQL请求并在一个SQL请求中做10个连接会更好吗?它会降低代码的可读性,但它有助于解决我的问题吗?

谢谢,

1 个答案:

答案 0 :(得分:0)

好吧,我想我已经解决了我的问题。这是广播

我认为由于我的联盟很大,他们需要相当长的时间,因此我禁用广播:

config("spark.sql.autoBroadcastJoinThreshold", "-1")

问题似乎已经解决了。

谢谢,