前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spark SQL报错:org.apache.spark.sql.catalyst.errors.package$TreeNodeException 排查记录

Spark SQL报错:org.apache.spark.sql.catalyst.errors.package$TreeNodeException 排查记录

原创
作者头像
王旭平
修改2022-12-11 18:19:29
2.4K0
修改2022-12-11 18:19:29
举报
文章被收录于专栏:大数据生态大数据生态

注:使用的是腾讯云EMR 3.3.0 版本,其中spark为3.0.2版本。

排查过程:

在EMR集群上按小时跑的spark sql 任务有时会失败,在driver端的日志中可以看到报错: org.apache.spark.sql.catalyst.errors.package$TreeNodeException: execute, tree

对应的yarn上的application的日志中可以看到在executor将创建的信息(执行步骤、广播变量)不断的发给driver

从时间点上可以看到在16:16:37 到16:16:44 这个时间段内,executor不断地给 driver 发送信息(执行步骤、广播变量)

,在对应的web页面上也能看到driver上有大量的广播变量。而在16:16:45的时候driver就报错了。

查看错误栈对应的代码 org.apache.spark.sql.execution.exchange.BroadcastExchangeExec.$anonfun$relationFuture$1(BroadcastExchangeExec.scala:169)

错误栈:

代码语言:javascript
复制
Caused by: org.apache.spark.util.SparkFatalException
	at org.apache.spark.sql.execution.exchange.BroadcastExchangeExec.$anonfun$relationFuture$1(BroadcastExchangeExec.scala:169)
	at org.apache.spark.sql.execution.SQLExecution$.$anonfun$withThreadLocalCaptured$1(SQLExecution.scala:182)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	... 1 more

对应代码:

https://github.com/apache/spark/blob/branch-3.0/sql/core/src/main/scala/org/apache/spark/sql/execution/exchange/BroadcastExchangeExec.scala

排查结果:

driver端oom导致的报错。

解决方法:

1.关闭广播变量(set spark.sql.autoBroadcastJoinThreshold = -1 );

2.调大 spark.driver.memory 的值,比如4g

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
弹性 MapReduce
弹性 MapReduce (EMR) 是基于云原生技术和泛 Hadoop 生态开源技术的安全、低成本、高可靠的开源大数据平台。提供易于部署及管理的 Hive、Spark、HBase、Flink、StarRocks、Iceberg、Alluxio 等开源大数据组件,帮助客户高效构建云端企业级数据湖技术架构。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档