赞
踩
为了解决过多依赖Hive的问题,SparkSQL使用了一个新的SQL优化器代替Hive优化器。SparkSQL的架构如下图:
具体流程如下图:
解析SQL,并生成AST(抽象语法树)
在AST中加入元数据信息,这一步也是为了后续优化
对已加入元数据的AST,输入优化器,进行优化,常见的优化方式有两种如下图所示:
断言下推,将Filter这种可以减少数据集的操作下推,放在Scan位置,为了减少操作时候的数据量。上述代码是先join再where,而下推之后先过滤age,再join,这样可以减小join数据量提升性能。
列值裁剪,在断言下推之后进行裁剪,由于people表中只用到了id这一列,所以可以把其他列裁剪掉,从而做到减少数据量,优化处理速度。
AST逻辑计划结束之后需要生成物理计划,从而生成RDD来进行后续的运行。我们可以通过queryExecution来查看逻辑执行计划;explain来查看物理执行计划。
总体上看Catalyst两大方面优化:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。