我目前正在使用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个连接会更好吗?它会降低代码的可读性,但它有助于解决我的问题吗?
谢谢,
答案 0 :(得分:0)
好吧,我想我已经解决了我的问题。这是广播。
我认为由于我的联盟很大,他们需要相当长的时间,因此我禁用广播:
config("spark.sql.autoBroadcastJoinThreshold", "-1")
问题似乎已经解决了。
谢谢,