SparkSQL执行流程与Catalyst优化器

2023-10-26 14:30

本文主要是介绍SparkSQL执行流程与Catalyst优化器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、SparkSQL运行流程与Catalyst优化器

        (1)RDD运行流程

        (2)SparkSQL自动优化

        (3)Catalyst优化器流程

        (4)Catalyst优化器总结

        (5)Spark SQL执行流程


一、SparkSQL运行流程与Catalyst优化器

        (1)RDD运行流程
RDD简要流程

        (2)SparkSQL自动优化

        RDD的运行会完全安装开发者的代码执行,如果开发者水平有限,RDD的执行效率也会受到影响。而SparkSQL会对写完的代码,执行“ 自动优化 ”,以提高代码运行效率,比米娜开发者水平影响到代码执行效率。

        为什么Spark SQL可以自动优化,而RDD不可以?因为RDD内含数据类型不限格式和结构,而Data Frame 100%是二维表结构,可以针对性的进行优化。Spark SQL的自动优化,依赖于Catalyst优化器。

        (3)SparkSQL架构

        为了解决过多依赖Hive 的问题,SparkSQL使用了一个新的SQL优化器替代 Hive 中的优化器,这个优化器就是Catalyst,整个SparkSQL的架构大致如下:

        1.API层简单的说就是Spark 会通过一些API接受SQL语句.

        2.收到SQL语句以后,将其交给Catalyst,Catalyst负责解析SQL,生成执行计划等

        3.Catalyst的输出应该是RDD的执行计划.

        4.最终交由集群运行.

        (3)Catalyst优化器流程

        Step 1:解析SQL,并且生成AST(抽象语法树,从下往上读)

        Step2:在AST中加入元数据信息,做这一步主要是为了一些优化,如下图

        Step3:对已经加入元数据的AST,输入优化器,继续优化,从两种常见的优化开始。

        ①断言下推(Predicate Pushdown):将filter这种可以减少数据集的操作下推,放在Scan的位置,这样就可以减少操作时候的数据量。

        如下图:正常流程是先Join,然后做WHERE,断言下推后,会先过滤age,然后再Join,减少Join的数据量提高性能。

        ②列值裁剪(Column Pruning):在断言下推后执行裁剪。

        如下图:由于people表之上的操作只用到了id列,所有可以把其他列裁剪掉,这样就可以减少处理的数据量,从而优化处理速度。

        还有其余许多优化点,大概一共有一两百种,随着Spark SQL发展也会越来越多,想要了解更多可以查阅Spark源码:org.apache.spark.sql.catalyst.optimizer.Optimizer

        Step4:经过上述流程后,产生的AST其实最终还没有办法直接运行,这个AST叫做逻辑计划,结束后,需要生成物理计划,从而生成RDD来运行。

        在生成“ 物理计划 ”的时候,会经过“ 成本模型 ”对整棵树再次执行优化,选择一个更好的计划,在生成“ 物理计划 ”以后,因为考虑到性能,所有会使用代码生成,在机器中运行。可以使用queryExecution 方法查看逻辑执行计划,使用explain方法查看物理执行计划

        (4)Catalyst优化器总结

        catalyst的各种优化细节非常多,大方面的优化点有2个:

        ①谓词下推(Predicate Pushdown)\断言下推:将逻辑判断提前到前面,以减少shuffle阶段的数据量。简述,行过滤,提前执行where。

        ②列值裁剪(Column Pruning):将加载的列进行裁剪,尽量减少被处理数据的宽度。简述,列过滤,提前规划select的字段数量。

        (5)Spark SQL执行流程

        1.提交SparkSQL代码

        2.catalyst优化

                a.生成原始AST语法数

                b.标记AST元数据

                c.进行断言下推和列值裁剪以及其它方面的优化作用在AST上

                d.将最终AST得到,生成执行计划

                e.将执行计划翻译为RDD代码

        3. Driver执行环境入口构建(SparkSession)

        4.DAG调度器规划逻辑任务

        5.TASK调度区分配逻辑任务到具体Executor上工作并监控管理任务

        6. Worker干活.

这篇关于SparkSQL执行流程与Catalyst优化器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/285658

相关文章

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

使用JavaConfig配置Spring的流程步骤

《使用JavaConfig配置Spring的流程步骤》JavaConfig是Spring框架提供的一种基于Java的配置方式,它通过使用@Configuration注解标记的类来替代传统的XML配置文... 目录一、什么是 JavaConfig?1. 核心注解2. 与 XML 配置的对比二、JavaConf

SpringBoot中HTTP连接池的配置与优化

《SpringBoot中HTTP连接池的配置与优化》这篇文章主要为大家详细介绍了SpringBoot中HTTP连接池的配置与优化的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、HTTP连接池的核心价值二、Spring Boot集成方案方案1:Apache HttpCl