SparkSQL源码分析系列01-Catalyst作用

news2024/10/3 2:17:05

SparkSQL 是如何将SQL语句转化为Spark任务的呢?
在这里插入图片描述
详细过程如下图
在这里插入图片描述

在这里插入图片描述

通过拉去 github 的 Spark 源码,查看 SparkSQL 模块的 readme.txt 文件可以看出,SparkSQL 包含4个方面的内容
在这里插入图片描述

SparkSQL源码主要包含4大模块

  • Catalyst (sql/catalyst):sql词法语法解析、绑定、逻辑执行计划优化
  • Execution (sql/core):查询规划器/执行引擎,用于将Catalyst的逻辑查询计划转换为Spark RDD、SQL执行
  • Hive Support (sql/hive):负责对hive数据的处理逻辑,包括允许用户使用HiveQL子集编写查询和使用HiveSerdes从HiveMetastore访问数据的扩展。还有一些包装器允许用户运行包含配置单元UDF、UDAFs和UDTFs的查询。
  • HiveServer and CLI support (sql/hive-thriftserver):提供client和JDBC/ODBC接口,包括对SQL CLI(bin/spark SQL)和HiveServer2(用于JDBC/ODBC)兼容服务器的支持。

什么是Catalyst ?
Catalyst 负责解析 SQL, 生成执行计划,具体过程包括:

  1. 解析SQL,生成抽象语法树(AST)
  2. 在 AST 中加入元数据信息,生成逻辑执行计划
  3. 对已经加入元数据的 AST, 输入优化器, 进行规则优化(RBO) ,生成优化后的逻辑执行计划。

哪些阶段属于Catalyst ?
在这里插入图片描述

Catalyst 作用是什么?
首先,RDD大致运行步骤:先将 RDD 解析为由 Stage 组成的 DAG,后将 Stage 转为 Task 直接运行。任务会按照代码所示运行,依赖开发者的优化,开发者会在很大程度上影响运行效率。
在这里插入图片描述
与 RDD 不同,SparkSQL 可以获知数据的 Schema 来进行优化,SparkSQL 的 DSL 和 SQL 并不是直接生成计划交给集群执行,而是经过了一个叫做 Catalyst 的优化器,这个优化器能够自动帮助开发者优化代码。SparkSQL 中正是由于 Catalyst 优化器存在,使得无论基于SQL还是DSL分析数据,性能都是一样的,并且底层做了很多优化。在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/127707.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Solidity之为什么 ++i 比 i++ 省gas

文章目录为什么 i 比 i 省gas测试验证demo1demo2为什么 i 比 i 省gas为什么 i 比 i 省gas i通常更昂贵,因为它必须增加一个值并“返回”旧值,因此可能需要在内存中保存两个数字我在记忆中只使用过一个数字。在许多情况下,在编译器优化之后&a…

【SVM】简单介绍(四)

1、Soft Margin SVM 对偶求解 构造拉格朗日函数 L12∥w∥2C∑i1nξi−∑i1nαi(yi(wTxib)−1ξi)−∑i1nγiξiαi≥0γi≥0\begin{aligned} & L\frac{1}{2}\|w\|^2C \sum_{i1}^n \xi_i-\sum_{i1}^n \alpha_i\left(y_i\left(w^T x_ib\right)-1\xi_i\right)-\sum_{i1}^n \ga…

dagum基尼系数分析全流程

Dagum系数分析 Dagum基尼系数是传统基尼gini系数的升级,其可分解为组内系数、组间系数和超变密度系数,即Dagum 组内Gw 组间Gb 超变密度Gt。 组内Gw分别反映各地区内部水平的差距、组间Gb反映各地区之间水平的差距,以及超变密度Gt反映各地区…

Strtus2漏洞 - Struts2-052 Struts2-057 Struts2-059

文章目录S2-052(CVE-2017-9805)环境搭建漏洞复现S2-057(CVE-2018-11776)环境搭建漏洞复现S2-059(CVE-2019-0230)环境搭建漏洞复现S2-052(CVE-2017-9805) 原理:Struts2 REST插件的XStream组件存在反序列化漏洞,使用XStream组件对XML格式的数据包进行反序…

为什么说DeFi隐私协议Unijoin.io具备趋势性

区块链技术以点对点、去中心化、公开透明、不可逆等作为其主要特点,而基于区块链的加密货币原生的具备了区块链技术的种种特性,这意味着通常每一笔链上交易都是透明可查的。虽然加密账户以“伪匿名”作为主要特点,但我们也同样看到&#xff0…

强大的ANTLR4(1)

以前对于《编译原理》这门课有一种恐惧,现在强大的工具越来越多,有些原理并不一定要非常清楚,也是可以设计一种编程语言的,那就是ANTLR4。 Antlr4(全名:ANother Tool for Language Recognition&#xff09…

Redis集群系列六 —— 分片集群搭建

Redis 常用集群中,常用的几种集群方案有:主从集群、哨兵集群、分片集群,不同的集群对应着不同的场景,并且各种集群也都有不同的优劣,本篇将以 redis 分片集群为切入点。 主从和哨兵虽然解决了高可用、高并发读的问题&…

spring之IoC注解(二)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、Spring注解的使用1、加入aop的依赖2、在配置文件中添加context命名空间3、在配置文件中指定扫描的包4、在Bean类上使用注解二、Bean的选择性实例化1、需求2、…

二十三种设计模式--系列篇(一)

一、软件设计模式的产生背景 “设计模式”最初并不是出现在软件设计中,而是被用于建筑领域的设计中。 1977年,美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫亚历山大(Christopher Alexander)在他的著作《…

(五)devops持续集成开发——jenkins发布一个maven流水线项目

前言 本节内容使用jenkins的maven流水线组件发布一个springboot项目,实现自动化部署一个后端项目。在开始流水化部署前我们需要准备好一个git项目,并在jenkins所在的服务器安装好git客户端便于源码的拉取。并且需要安装一个ssh插件,将我们的…

C++学习:多态与运算符(Day.7~)

总结让人明白。 表明覆盖意图的限定符 override 如图: 说明:1.使用关键字const后,由于函数特征不同,派生类不会再隐藏基类方法 2.想要覆盖基类方法可使用关键字override,此关键字会强制覆盖基类方法,若…

微信功能,你知道多少

用了微信很多年,选择才发现微信收藏的正确打开方式!感觉之前白用了那么久微信收藏,只用来保存消息实在是太可惜了,原来它还有那么多实用功能!协助日常安排如果每天需要做的事情比较多,可以在这里记录日常工…

谷粒商城之高级篇知识补充

谷粒商城高级篇之知识补充 前言 本篇主要是完成谷粒商城高级篇开发时,我们需要了解并学习一部分补充的知识,才能更好的完成商城业务。 以后我们将商城任务和额外知识分开来编写,方便商城业务的连贯性。 下面是本篇文章各个章节对应的相应…

Apollo星火计划学习笔记——Apollo速度规划算法原理与实践

文章目录1. 速度规划算法总体介绍1.2 不同场景下的ST图1.2.1 主车向前匀速行驶1.2.2 主车先向前匀速行驶,后停车1.2.3 主车跟随前车行驶1.2.4 主车跟随前车刹停1.2.5 障碍车在主车后方跟行1.3 速度规划算法整体流程1.3.1 Task: SPEED_BOUNDS_PRIORI_DECI…

数据结构-堆

1、什么是堆 堆是一种满足以下条件的树:堆中的每一个节点值都大于等于(或小于等于)子树中所有节点的值。 2、堆的用途 当我们只关心所有数据中的最大值或者最小值,存在多次获取最大值或者最小值,多次插入或删除数据时&…

ArrayList与顺序表(一)

目录 1.线性表 2.顺序表 2.1接口的实现 3.ArrayList的简介 4.ArrayList使用 4.1ArrayList的构造 4.2ArrayList常见的操作 4.3ArrayList的遍历 4.4ArrayList的扩容机制 5.模拟实现一个ArrayList 1.线性表 线性表:是n个具有相同特性的数据元素的有限序列。线性…

[思考进阶]04 优秀的人,都在使用“微习惯”

除了要提升自己的技术能力,思维的学习和成长也非常非常重要,特推出此[思考进阶]系列,进行刻意练习,从而提升自己的认知。 我有个微信群,人很少,都是兄弟,每天打开电脑的时候,我都会有…

朴素贝叶斯分类的python的实现

文章目录介绍GaussianNB()参数介绍实例BernoulliNB()参数介绍实例MultinomialNB()参数介绍实例作者:王乐介绍 sklearn 是 scikit–learn 的简称,是一个基于 Python 的第三方模块。 sklearn 库集成了一些常用的机器学习方法,在进行机器学习任务时,并不需要实现算法,…

Java 并发编程解析 | 如何正确理解Java领域中的并发锁,我们应该具体掌握到什么程度?

写在开头 对于Java领域中的锁,其实从接触Java至今,我相信每一位Java Developer都会有这样的一个感觉?不论是Java对锁的实现还是应用,真的是一种“群英荟萃”,而且每一种锁都有点各有各的驴,各有各的本&…

#P13787. [NOIP2021] 报数

目录 一,题目 二,题意分析 三,做法 1.直接模拟题意 2,用筛法来解 3,正解(加上记忆化) 一,题目 二,题意分析 题目意思是说:每次输入一个数,然后先判断这个数是否为某一个十进制中包含7的数…