前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SparkSql的Catalyst之图解简易版

SparkSql的Catalyst之图解简易版

作者头像
Spark学习技巧
发布2018-01-30 18:46:35
1K0
发布2018-01-30 18:46:35
举报
文章被收录于专栏:Spark学习技巧Spark学习技巧

一,基本介绍

一言不合就上图。

由上图可以看出Catalyst的作用尤为重要。MLPipelines Structured Streaming,GraphFrames都是基于DataFrame和DataSet,进而可使用Catalyst进行优化,Sparksql 直接可以使用Catalyst进行优化。我们也可以根据数据源的特点,自己实现自己的数据源输入和相关的谓词下推优化。

那么为啥大家都喜欢结构化的数据呢?

1,根据定义,结构将限制可以表达的内容。

2,在实践中,我们可以容纳绝大多数的计算。

3,限制可以表达的空间实现优化。

从表达上来看

从处理速度上来看

二,Catalyst如何工作

使用高级编程接口编写程序

-程序用于描述需要什么数据操作,而无需指定如何执行这些操作。

-获得一个优化器,自动找出执行用户程序中指定的数据操作的最有效的方案。

如下图:

组件介绍

1),Analysis(Rule Executor):

将一个Unresolved logical plan转化为一个Resolved logical plan。

Unresolved => Resolved :使用Caatalog 找到datasets或者columns的来源和columns的类型。

2),Logical Optimization(Rule Executor):

将一个Resolved Logical plan 转化为一个 Optimized Logical Plan。

3),Physical Planning(Strategies + Rule Executor):

将一个Optimized Logical Plan 转化为一个Pysical Plan。

举例说明

比如,select sum(v) from ( select t1.id,1+2+t1.value as v) from t1 join t2 where t1.id = t2.id and t2.id > 50 * 1000) tmp

1),表达式(expression):

表达式代表一个新的值,需要根据输入计算才能得到。如:1+2+t1.value

2),属性(Attribute):

一个dataset的列(t1.id)或者或者一个特殊操作产生的一个列(v)。

根据sql构建的树如下:

逻辑计划:

1),逻辑计划描述了数据集上的计算,而不定义如何进行计算。

2),Output:

输出一个属性列表,如:[id,v]

3),约束:

关于由该计划生成的行的一组不变量,如:t2.id > 50 * 1000

物理计划:

1),物理计划描述了关于如何进行计算的具体定义的数据集的计算。

,物理计划是可执行的

转换操作

1,不转换tree类型的转换(Transform 和 Rule Executor)

1),Expressing => Expression

2),Logical Plan => Logical Plan

3),Physical Plan => Physical Plan

2,从一种类型的树,转换为另一种类型的树

Logical Plan => Physical Plan

3,与用于实现单个规则的每个树相关联的函数。

4,每个转换都是一个部分函数(Partial Function)

5,部分函数(Partial Function):

部分函数指的是定义的是输入的子集。Case 语句决定了是否给定的输入定义了部分函数。

组合新的规则:

1),谓词下推

对于很多过滤条件呢,假如数据源支持,那么就可以直接将过滤下推到数据加载的过程中,减少加载到Spark的数据,进而实现优化。

2),常量聚合

常量的计算没必要每行都计算一次,再生成规则的时候就可以直接结算然后使用计算过的结果。

3),列裁剪

只从数据源加载我们需要的列,对于不相关的列不加载。

RuleExecutor

Catalyst会将规则分组,在达到稳定点之前会一直执行当前组的规则,fixed point的意思也就是在使用当前组的规则树不会再变化了。将规则运行到fixed point意味着每个规则可以简单的,但仍然最终对树有更大的全局影响。RuleExecutor可以将一棵树转化为另一棵树,通过使用在同个批次的rules。

从物理计划到逻辑计划

1),通过使用一些列的策略可以使逻辑计划转化为物理计划。

2),每个策略都是使用模式匹配将一个数转化为另一种数。

SparkPlanner

1),首先是使用策略将逻辑计划转化为物理计划

2),使用RuleExecutor将物理计划变为可执行

A),准备标量子查询。

B),确保输入行的要求。

两个字段都需要进行排序,假如其中一个列已经排序好了,那可以省略排序的步骤。如下图

C),使用物理优化器。

三,总结

本文主要是用图文结合的方式举例子说明了一个Catalyst优化一个Sql的过程。

本文主要是截取自YouTube视频:https://www.youtube.com/watch?v=GDeePbbCz2g&t=1563s

由于SparkSql ,ML pipeline,StructuredStreaming ,GraphFrame都是要直接或者间接的使用到Catalyst,所以深入了解Catalyst对我们利用数据源特征,设计好应用程序会有很大帮助。后面会从源码层面去解析,SparkSQL解Catalyst。

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-08-18,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 浪尖聊大数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com