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

SparkSql的Catalyst之图解简易版

作者头像
Spark学习技巧
发布于 2018-01-30 10:46:35
发布于 2018-01-30 10:46:35
1.1K0
举报
文章被收录于专栏: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 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Spark重点难点07】SparkSQL YYDS(加餐)!
Spark发展到今天,Spark SQL的方式已经是官方推荐的开发方式了。在今年的Spark 3.0大版本发布中,Spark SQL的优化占比将近50%;而像PySpark、Mllib 和 Streaming的优化占比都不超过10%,Graph的占比几乎可以忽略不计。
王知无-import_bigdata
2021/12/22
7900
【Spark重点难点07】SparkSQL YYDS(加餐)!
面试篇: SparkSql如何把Sql转化成RDD可以执行的任务
1.SparkSql通过Parser(解析器)把Sql转化成UnResolved Logical Plan(这是一棵Parsed Logical Plan AST语法树)。
伊泽瑞尔
2022/06/01
1.6K0
面试篇: SparkSql如何把Sql转化成RDD可以执行的任务
Spark 原理与实践 | 青训营笔记
Spark 于 2009 年诞生于加州大学伯克利分校 AMPLab,2013 年被捐赠给 Apache 软件基金会,2014 年 2 月成为 Apache 的顶级项目。相对于 MapReduce 的批处理计算,Spark 可以带来上百倍的性能提升,因此它成为继 MapReduce 之后,最为广泛使用的分布式计算框架。
鳄鱼儿
2024/05/21
1360
Spark 原理与实践 | 青训营笔记
Spark SQL / Catalyst 内部原理 与 RBO
从上图可见,无论是直接使用 SQL 语句还是使用 DataFrame,都会经过如下步骤转换成 DAG 对 RDD 的操作
Jason Guo
2018/09/11
1.4K0
Spark SQL底层执行流程详解(好文收藏)
一、Apache Spark 二、Spark SQL发展历程 三、Spark SQL底层执行原理 四、Catalyst 的两大优化
五分钟学大数据
2022/05/22
4.9K0
Spark SQL底层执行流程详解(好文收藏)
[Spark SQL] 源码解析之Analyzer
Analyzer模块将Unresolved LogicalPlan结合元数据catalog进行绑定,最终转化为Resolved LogicalPlan。跟着代码看流程:
UFO
2018/08/29
1.2K0
Spark Sql 源码剖析(一):sql 执行的主要流程
之前写过不少 Spark Core、Spark Streaming 相关的文章,但使用更广泛的 Spark Sql 倒是极少,恰好最近工作中使用到了,便开始研读相关的源码以及写相应的文章,这篇便作为 Spark Sql 系列文章的第一篇。
codingforfun
2018/08/24
2.2K0
Spark Sql 源码剖析(一):sql 执行的主要流程
SparkSql源码成神之路
快来加入我的源码学习社群吧,在社群的长期陪伴下,解决你在学习路上遇到的点点滴滴的问题~~
数据仓库践行者
2022/11/24
1.1K0
SparkSql源码成神之路
[Spark SQL] 源码解析之Parser
Parser就是将SQL字符串切分成一个个Token,再根据一定语义规则解析为一棵语法树。我们写的sql语句只是一个字符串而已,首先需要将其通过词法解析和语法解析生成语法树,Spark1.x版本使用的是scala原生的parser语法解析器,从2.x后改用的是第三方语法解析工具ANTLR4, 在性能上有了较大的提升。
UFO
2018/08/29
2.5K0
SparkSql的优化器-Catalyst
一,概述 为了实现Spark SQL,基于Scala中的函数编程结构设计了一个新的可扩展优化器Catalyst。Catalyst可扩展的设计有两个目的。 首先,希望能够轻松地向Spark SQL添加新的优化技术和功能,特别是为了解决大数据(例如,半结构化数据和高级分析)所遇到的各种问题。第二,我们希望使外部开发人员能够扩展优化器 - 例如,通过添加可将过滤或聚合推送到外部存储系统的数据源特定规则,或支持新的数据类型。Catalyst支持基于规则(rule-based)和基于成本(cost-based)的优化
Spark学习技巧
2018/01/30
2.8K0
SparkSql的优化器-Catalyst
SparkSQL的解析详解
  SparkSQL继承自Hive的接口,由于hive是基于MapReduce进行计算的,在计算过程中大量的中间数据要落地于磁盘,从而消耗了大量的I/O,降低了运行的效率,从而基于内存运算的SparkSQL应运而生。
用户3003813
2018/09/06
8430
初识 Spark SQL | 20张图详解 Spark SQL 运行原理及数据抽象
不管是做平台的,还是做应用的,都免不了跟 SQL 打交道。一句“SQL Boy”,虽然是大家的自嘲,但也能说明大数据工程师们跟 SQL 的关系之紧密。
数人之道
2022/03/28
11.4K0
初识 Spark SQL | 20张图详解 Spark SQL 运行原理及数据抽象
Spark源码系列(九)Spark SQL初体验之解析过程详解
好久没更新博客了,之前学了一些R语言和机器学习的内容,做了一些笔记,之后也会放到博客上面来给大家共享。一个月前就打算更新Spark Sql的内容了,因为一些别的事情耽误了,今天就简单写点,Spark1.2马上就要出来了,不知道变动会不会很大,据说添加了很多的新功能呢,期待中... 首先声明一下这个版本的代码是1.1的,之前讲的都是1.0的。 Spark支持两种模式,一种是在spark里面直接写sql,可以通过sql来查询对象,类似.net的LINQ一样,另外一种支持hive的HQL。不管是哪种方式,下面提到
岑玉海
2018/02/28
1.8K0
Spark源码系列(九)Spark SQL初体验之解析过程详解
Spark系列 - (3) Spark SQL
Hive:Hadoop刚开始出来的时候,使用的是hadoop自带的分布式计算系统 MapReduce,但是MapReduce的使用难度较大,所以就开发了Hive。Hive的出现解决了MapReduce的使用难度较大的问题,Hive的运行原理是将HQL语句经过语法解析、逻辑计划、物理计划转化成MapReduce程序执行。
码老思
2023/10/19
6270
Spark系列 - (3) Spark SQL
工作常用之Spark调优一】
Spark 3.0 大版本发布, Spark SQL 的优化占比将近 50% 。 Spark SQL 取代 Spark Core ,成
Maynor
2022/09/27
5060
工作常用之Spark调优一】
SQL on Hadoop 技术分析(二)
森哥大作,接上一篇:SQL on Hadoop技术分析(一) SQL on Hadoop 技术分析(二) 本篇继续分析SQL on Hadoop的相关技术,本次分析的重点是查询优化器(技术上的名词叫SQL Parser),在SQL on Hadoop技术中有着非常重要的地位,一次查询SQL下来,SQL Parser分析SQL词法,语法,最终生成执行计划,下发给各个节点执行,SQL的执行的过程快慢,跟生成的执行计划的好坏,有直接的关系,下面以目前业界SQL onHadoop 使用的比较多的组件Impala、H
大数据和云计算技术
2018/03/08
1.2K0
SQL on Hadoop 技术分析(二)
SparkSQL(源码阅读三)
  额,没忍住,想完全了解sparksql,毕竟一直在用嘛,想一次性搞清楚它,所以今天再多看点好了~
用户3003813
2018/09/06
1.1K0
SparkSQL(源码阅读三)
Spark SQL 整体介绍
sparksession rdd sparkcontext sparksql sqlcontent dstream streammingcontext hivesql hivecontext
Freedom123
2024/03/29
1120
Spark SQL 整体介绍
[Spark SQL] 主要执行流程
SparkSql的第一件事就是把SQLText解析成语法树,这棵树包含了很多节点对象,节点可以有特定的数据类型,同时可以有0个或者多个子节点,节点在SparkSQL中的表现形式为TreeNode对象。举个实际的例子:
UFO
2018/08/29
1.8K0
[Spark SQL] 源码解析之Optimizer
optimizer 以及之后的模块都只会在触发了action操作后才会执行。优化器是用来将Resolved LogicalPlan转化为optimized LogicalPlan的。
UFO
2018/08/29
1.2K0
相关推荐
【Spark重点难点07】SparkSQL YYDS(加餐)!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档