V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liprais
V2EX  ›  Scala

spark sql 的 CBO 现状

  •  
  •   liprais · 2017-05-20 22:49:57 +08:00 · 5846 次点击
    这是一个创建于 2762 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有几个华为的大牛给 spark sql 做了 cost-based optimizer

    jira task 在 https://issues.apache.org/jira/browse/SPARK-16026

    design specs 在

    https://issues.apache.org/jira/secure/attachment/12823839/Spark_CBO_Design_Spec.pdf

    分享的 slides 在

    https://spark-summit.org/2016/events/enhancing-spark-sql-optimizer-with-reliable-statistics/

    http://www.slideshare.net/SparkSummit/costbased-optimizer-framework-for-spark-sql-spark-summit-east-talk-by-ron-hu-and-zhenhua-wang

    大概读了下,记录如下

    1.改了哪里

    改动大概在这里

    https://github.com/apache/spark/commits/master/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/CostBasedJoinReorder.scala?author=wzhfy

    2.做了什么.

    2.1 统计信息
     收集字段的统计信息,最大值,最小值,空值,唯一值和统计直方图
     统计直方图有两种:定宽和定高的,小于 256 个唯一值的时候定宽,大于的时候定高
     
    2.2 关联
    两表 hash 关联的时候根据到达这一步的总体 cost 来选择驱动表( build / probe)
    多表关联的时候使用动态规划来决定  join order,先找出两表关联时 cost 最低的,然后是第三个表和这个中间表关联...最后根据所有关联总的 cost 计算 cost
    
    2.3 cost function
    目前实现的是 phase 1 ,两表关联时的 cost 就是结果集的大小,未来会实现和 teradata 类似的,考虑各种执行时的 cost
    
    2.4  Cardinality Estimation
    还没细看,感觉和其他 cbo 的 rdbms 差不多
    
    2.5 会给所有 executor 算一个 cost
    

    3.jira 上提到的问题

    感觉好像没有特别考虑 geography 的问题,目前的实现也没有考虑不同表格式带来的影响, 另外这个 spec 最开始只给 databricks 公司里的 commiter 看过,社区其他 committer 好像对此颇有微词

    总之还是很牛逼的,膜拜下大牛们

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   862 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 21:30 · PVG 05:30 · LAX 13:30 · JFK 16:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.