【问题标题】:spark sql executes very slowspark sql执行速度很慢
【发布时间】:2017-04-19 17:04:19
【问题描述】:

问题已解决。 table_b 中有巨大的相同键

我有一个这样的 sql:

SELECT *
FROM table_a a
LEFT OUTER JOIN tbale_b b ON a.key=b.key
LEFT OUTER JOIN table_c c on a.key2=c.key2

查询是由spark on yarn执行的。

和往常一样,table_b 中只有一条记录与 table_a 中的 key 相同, 查询可以非常快速且正确地执行

但是如果table_b中有一些重复的记录,查询会执行得很慢,其中一个reduce任务会很高

spark job snapshot

【问题讨论】:

  • 问题出在哪里?永远记住,Spark 不是您可以拥有大量连接的典型 RDBMS
  • 谢谢,但是int table_a大约有20亿条记录,这个工作是关于ETL的。首先,我们将所有数据加载到 HDFS,然后我使用 spark 作业来转换这些数据
  • 有一张作业截图:i.stack.imgur.com/pJfah.png
  • 您是否尝试过切换加入顺序?所以也许尝试将 c fist 加入 a 然后 b ?
  • 还没有。但是我对table_b进行了anylized,并且我资助了重复记录,大约10%,总记录为1000万。我尝试选择不同的table_b,然后查询可以执行成功且快速

标签: apache-spark apache-spark-sql


【解决方案1】:

最后,我发现table_b中有很多相同的键

连接结果非常大

同一个键只会在一个任务中执行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    • 2021-03-06
    相关资源
    最近更新 更多