【发布时间】:2017-10-28 16:58:12
【问题描述】:
由于数据分布不均,此 Spark SQL 查询的性能很差:
select c.*, coalesce(
sum(revenue)
OVER (PARTITION BY cid, pid, code
ORDER BY (cTime div (1000*3600))
RANGE BETWEEN 336 PRECEDING and 1 PRECEDING), 0L) as totalRevenue
from records c
如果我增加扫描范围,我在 SparkUI 中看到单个任务堆栈和集群失败。
我在 AWS EMR 中使用 Yarn 和 Spark 2.2.0
我该如何克服这个问题? 谢谢
【问题讨论】:
-
您能否添加有关失败的信息?大概是 OutOfMemeoryError 吧?
-
ExecutorLostFailure(执行器 8 因正在运行的任务之一而退出) 原因:容器因超出内存限制而被 YARN 杀死。使用了 21.8 GB 的 21.7 GB 物理内存。考虑提升 spark.yarn.executor.memoryOverhead
-
你能计算每个
cid、pid和code的行数吗?可以分享一下执行计划吗? Spark 的版本是多少?这是纱线吗?在您的问题中添加整个堆栈跟踪。添加问题的所有答案(编辑并添加我要求的内容)。谢谢! -
谢谢,@JacekLaskowski,我添加了版本。我可以通过任务持续时间和最终文件大小(我在最后写入文件)看到 pid、cid、代码的一种组合明显大于其他组合。省略它们会提高性能,但我不能在生产中这样做。
-
谢谢@EdKohlwey 你能澄清一下吗?
标签: apache-spark apache-spark-sql