【问题标题】:Does Spark SQL include a table streaming optimization for joins?Spark SQL 是否包含针对连接的表流优化?
【发布时间】:2015-08-20 20:15:53
【问题描述】:

Spark SQL 是否包含针对连接的表流式优化,如果包含,它如何决定要流式传输哪个表?

在进行连接时,Hive 假定最后一个表是最大的表。作为一种连接优化,它将尝试缓冲较小的连接表并将最后一个连接表流过。如果连接列表中的最后一个表不是最大的,Hive 有 /*+ STREAMTABLE(tbl) */ 提示,告诉它应该流式传输的表。从 v1.4.1 开始,Spark SQL 不支持 STEAMTABLE 提示。

已针对 Spark SQL 之外的正常 RDD 处理提出此问题,here。答案不适用于开发人员无法控制显式缓存操作的 Spark SQL。

【问题讨论】:

    标签: apache-spark apache-spark-sql


    【解决方案1】:

    前段时间我已经在寻找这个问题的答案,我所能想到的只是设置一个spark.sql.autoBroadcastJoinThreshold 参数,默认为 10 MB。然后它将尝试自动广播所有大小小于您设置的限制的表。加入顺序在此设置中不起作用。

    如果您有兴趣进一步提高连接性能,我强烈推荐this presentation

    【讨论】:

      【解决方案2】:

      这是即将推出的 Spark 2.3RC2 正在投票支持下一个版本)。

      从 v1.4.1 开始,Spark SQL 不支持 STREAMTABLE 提示。

      它也没有出现在最新的(并且投票将很快发布)Spark 2.3 中。

      不支持 STREAMTABLE 提示,但考虑到最近的更改(在 SPARK-20857 Generic resolved hint node 中)构建一个应该相当容易编写的提示框架。

      您必须编写一些支持 STREAMTABLE 的 Spark 优化和可能的物理计划(这似乎需要做很多工作),但这是可能的。工具就在那里。

      关于连接优化,在即将到来的 Spark 2.3 中有两个主要的逻辑优化:

      1. ReorderJoin
      2. CostBasedJoinReorder(专门用于基于成本的优化)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-27
        • 2013-05-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多