专栏首页Spark学习技巧SparkSql的Catalyst之图解简易版

SparkSql的Catalyst之图解简易版

一,基本介绍

一言不合就上图。

由上图可以看出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。

本文分享自微信公众号 - Spark学习技巧(bigdatatip),作者:浪尖

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-08-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据仓库①:数据仓库概述

    前言 阅读本文前,请先回答下面两个问题: 1. 数据库和数据仓库有什么区别? 2. 某大公司Hadoop Hive里的关系表不完全满足完整/参照性约束,也不完全...

    Spark学习技巧
  • 重磅:关于hive的join使用必须了解的事情

    Hive支持连接表的以下语法: ? 本文主要讲hive的join 编写连接查询时要考虑的一些要点如下,不同版本支持的情况可能会有些许不同: 1,可以编写复杂的...

    Spark学习技巧
  • 实时数仓|基于Flink1.11的SQL构建实时数仓探索实践

    实时数仓主要是为了解决传统数仓数据时效性低的问题,实时数仓通常会用在实时的OLAP分析、实时的数据看板、业务指标实时监控等场景。虽然关于实时数仓的架构及技术选型...

    Spark学习技巧
  • 游戏用户中心开发

    用户中心最主要的功能就是管理用户的注册和登陆,登陆成功之后生成对应的token,并负责token的验证。当一个用户注册或登陆成功之后,它的信息会在用户中心服务中...

    企鹅号小编
  • 喜欢去知乎炸鱼?用python吧

    超蛋lhy
  • iPhone 11系列/新iPad消息汇总

    iPhone 11系列/新iPad消息汇总: 外观基本不变,大小和刘海基本一致。部分配色会加入哑光效果,并且采用新的防碎玻璃技术,减少跌落时背盖碎裂的可能。

    小贝壳
  • Mybatis 3学习笔记(一)主要内容:

    MyBatis是一个开源持久化框架,用于简化持久层的实现。Mybatis可以减少很多JDBC相关的模板样式代码,还提供了方便使用的数据库API。

    阿杜
  • 沙盒syscall监控组件:strace and wtrace

    最近在看一些时间管理方面的书,发现其实很多事情都是可以安排清楚,关键在于固定的时间,固定的投入,形成习惯,成为良性循环。

    七夜安全博客
  • python时区处理

    py3study
  • MongoDB安全权威指南

    想象一下这样的场景:当工作劳累了一天,你已经准备好收拾行李回家的时候,下面这句话突然冒了出来:

    MongoDB中文社区

扫码关注云+社区

领取腾讯云代金券