SparkSQL - 常见问题

1、广播超时

参考资料:https://www.ai2news.com/blog/3041168/

报错信息:

Caused by: org.apache.spark.SparkException: Could not execute broadcast in 300 secs. You can increase the timeout for broadcasts via spark.sql.broadcastTimeout or disable broadcast join by setting spark.sql.autoBroadcastJoinThreshold to -1
	at org.apache.spark.sql.execution.adaptive.BroadcastQueryStageExec$$anon$1.run(QueryStageExec.scala:213)

根据经验,首先排查:
(1)网络传输(问运维同学)
(2)广播超时时间阈值太小(查看集群配置的广播超时时间阈值)
(3)广播变量的数据量是否太大(查看集群配置的自动广播阈值大小)

解决方案:
(1)关闭自动广播或调低自动广播阈值

set spark.sql.autoBroadcastJoinThreshold = -1;

(2)调整广播超时时间阈值

set spark.sql.broadcastTimeout = 900;

自动广播原理:orc格式的表会对数据进行压缩,如果压缩比过大,会导致广播时间过长。另外还会造成excotor OOM
自动广播原因:大表join小表时,小表大小在阈值以下,就会自动广播小表到每个excutor

TODO:如何查看spark集群的参数设置(搞一套自己的集群,自己试试看怎么查看)

你可能感兴趣的:(数据仓库,数据仓库)