spark sql 的 CBO 现状

2017-05-20 22:49:57 +08:00
 liprais

有几个华为的大牛给 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 好像对此颇有微词

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

5733 次点击
所在节点    Scala
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/362701

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX