sparksql执行流程

1. SparkSQL的自动优化

我们前面的文章已经说过spark RDD定义好后,执行经过DAG sechduler划分号内存管道、逻辑任务,然后经由task scheduler来分配到具体worker来管理运行,RDD的运行会完全按照开发者的代码执行
如果开发者水平有限,RDD的执行效率也会受到影响。
而SparkSQL会对写完的代码,执行自动优化”,以提升代码运行效率,避免开发者水平影响到代码执行效率。之所以RDD的的执行没法被优化,市因为RDD内含数据类型不限格式和结构,而DataFrame100%是二维表结构,可以被针对,SparkSQL的自动优化依赖于Catalyst优化器,它最终也是被优化成RDD来执行。

2. Catalyst优化器

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

  1. APl层简单的说就是Spark会通过一些AP接受SQL语句
  2. 收到SQL语句以后,将其交给Catalyst,Catalyst负责解析SQL,生成执行计划等
  3. Catalyst的输出应该是RDD的执行计划
  4. 最终交由集群运行

详细的流程如下:
在这里插入图片描述

  • 第一步解析sql语句为抽象语法树
    在这里插入图片描述

catalyst第一步会将sql语句解析成抽象语法树,上面的语法树是从下往上看的

  • 第二步会给抽象语法树加上一些元数据信息方便spark去调用和优化相关信息
    在这里插入图片描述
  • 第三步做优化在这里插入图片描述

优化操作主要分两步:
(1)断言下推Predicate Pushdown
这一步会将将Filter或一些判断过滤类的可以减小数据集的操作下推,放在Scan的位置,这样可以减少操作时候的数据量。

SELECT sum(v) 
FROM(
    SELECT
        score.id
        100 + 80 + score.math_score AS v
    FROM people 
    JOIN score WHERE people.id = score.id AND people.age > 10
)omp

如这个代码,正常流程是先JOIN然后做WHERE
断言下推后,会先过滤age,然后在JOIN,减少JOIN的数据量提高性能.
(2) 列值裁剪Column Pruning,在断言下推后执行裁剪,由于people表之上的操作只用到了id列,所以可以把其它列裁剪掉,这样可以
减少处理的数据量,从而优化处理速度,列值裁剪很适合parquet这种列值存储数据

  • 第四步
    上面的过程生成的AST其实最终还没办法直接运行,这个AST叫做逻辑计划,结束后,需要生成物理计划,从而生成RDD来运行,在生成物理计划的时候,会经过成本模型对整棵树再次执行优化,选择一个更好的计划,在生成物理计划以后,因为考虑到性能,所以会使用代码生成,在机器中运行,可以使用queryExecution方法查看逻辑执行计划使用explain方法查看物理执行计划
    在这里插入图片描述

3. sparksql执行流程总结

  1. 提交SparkSQL代码
  2. catalyst优化
    a.生成原始AST语法数
    b.标记AST元数据
    c.进行断言下推和列值裁剪以及其它方面的优化作用在AST上
    d.将最终AST得到,生成执行计划
    e.将执行计划翻译为RDD代码
  3. Driver执行环境入口构建(SparkSession)
  4. DAG调度器规划逻辑任务
  5. TASK调度区分配逻辑任务到具体Executor_上工作并监控管理任务
  6. Worker干活.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一文了解JAVA的常用API

目录 常用kpimathSystemRuntimeObjectObjectsBigIntegerBigDecima正则表达式包装类 常用kpi 学习目的: 了解类名和类的作用养成查阅api文档的习惯 math 工具类。因为是工具类,因此直接通过类名.方法名(形参)即可直接调用 abs:获取参数绝对…

Spring如何进行事务管理?什么是面向切面编程?

喜欢就点击上方关注我们吧! 本篇将带你快速了解Spring事务管理以及面向切面编程(AOP)相关知识。 一、事务 1、概述 1)事务是一组操作的集合,是一个不可分割的工作单位,这些操作要么同时成功,要么同时失败。 2&#xff…

八股 -- C#

面向对象 (三大特性) 三大特性目的是为了提供更好的代码组织、可维护性、扩展性和重用性 C#基础——面向对象 - 知乎 (zhihu.com) 封装 理解: 你不需要了解这个方法里面写了什么代码,你只需要了解这个方法能够给你返回什么数据&…

矩阵乘法优化:GEMM中如何将大矩阵切割成小矩阵

论文自然还是 Anatomy of High-Performance Matrix Multiplication。 如何拆分 一个矩阵乘法有 6 种拆分方式,其中对 row-major 效率最高的是: 第一次拆分 先做第一次拆分,取 A 的 kc 列(PanelA)和 B 的 kc 行&…

基于 7 大城市实景数据,清华大学团队开源 GPD 模型

城市,是人们安居乐业的故土,是政府开展经济建设的基石,承载着细腻的人文情怀与宏伟的国家发展脉络。长期以来,管理者一直在探寻更加高效、科学的城市治理方法,解决不同地区资源供给不平衡、交通拥挤、人口流失等问题。…

Qt项目通过.pri文件将众多文件按功能模块分类显示,开发大型项目必备

Chapter1 Qt项目通过.pri文件将众多文件按功能模块分类显示,开发大型项目必备 Chapter2 在Qt项目中添加pri文件 原文链接:在Qt项目中添加pri文件_qtpri-CSDN博客 前言 一般我们创建Qt项目工程的时候,都是直接把所有的项目,头文…

Chatopera 云服务的智能问答引擎实现原理,如何融合 #聊天机器人 技术 #Chatbot #AI #NLP

观看视频 Bilibili: https://www.bilibili.com/video/BV1pZ421q7EH/YouTube: https://www.youtube.com/watch?vx0d1_0HQa8o 内容大纲 提前在浏览器打开网址: Chatopera 云服务:https://bot.chatopera.comChatopera 入门教程:https://dwz…

微机原理-基于8086电压报警器系统仿真设计

**单片机设计介绍,微机原理-基于8086电压报警器系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于8086的电压报警器系统仿真设计概要主要涉及到系统的整体架构设计、硬件组成、软件逻辑设计以及仿真环境…

【智能算法】黄金正弦算法(GSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2017年,Tanyildizi等人受到正弦函数单位圆内扫描启发,提出了黄金正弦算法(Golden Sine Algorithm, GSA)。 2.算法原理 2.1算法思想 GSA来源于正弦函…

前端学习<二>CSS基础——14-CSS3属性详解:Web字体

前言 开发人员可以为自已的网页指定特殊的字体(将指定字体提前下载到站点中),无需考虑用户电脑上是否安装了此特殊字体。从此,把特殊字体处理成图片的方式便成为了过去。 支持程度比较好,甚至 IE 低版本的浏览器也能…

C语言内存函数(超详解)

乐观学习,乐观生活,才能不断前进啊!!! 我的主页:optimistic_chen 我的专栏:c语言 点击主页:optimistic_chen和专栏:c语言, 创作不易,大佬们点赞鼓…

安全用电监控系统在工厂的研究与应用论述

摘 要:随着社会时代的发展,人们的安全意识越来越强烈,在人们生活和工作中离不开各种用电设备,用电设备的安全使用是保障人们生命安全的重要内容。工厂因自身厂内工作环境的特殊性,用电设备的种类多且复杂,如…

【数据结构与算法初阶(c语言)】插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序、计数排序-全梳理(万字详解,干货满满,建议三连收藏)

目录 1.排序的概念及其运用 1.1排序的概念 1.2排序运用 1.3常见的排序算法 2.插入排序 2.1 原理演示:​编辑 2.2 算法实现 2.3 算法的时间复杂度和空间复杂度分析 3.希尔排序 3.1算法思想 3.2原理演示 3.3代码实现 3.4希尔算法的时间复杂度 4.冒泡排序 4.1冒泡排…

二、图的表示和带权图

文章目录 1、图的表示1.1 邻接矩阵1.2 邻接表1.3 关联矩阵 2、带权图2.1 最短路径问题2.2 中国邮递员问题2.3 旅行商问题 THE END 1、图的表示 1.1 邻接矩阵 \qquad 将图的所有顶点分别构成一个二维矩阵的行列,将顶点之间的边关系表示在构成的矩阵之中,…

在CentOS 8.5.2111下安装vncserver

# 参考: 如何在 CentOS 8/RHEL 8 上安装配置 VNC 服务器 安装CentOS 8.5.2111 及 vncserver # 标准安装步骤 安装GNOME桌面环境使用屏幕号:1。安装VNC服务器(tigervnc-server tigervnc)设置VNC密码设置VNC服务器配置文件开启vnc服务。开放防…

FX110网:货币交易5个亏损典型,你有中招吗?

人生百年几今日,今日不为真可惜!若言姑待明朝至,明朝又有明朝事。很多投资朋友总是抱怨,为什么总是看见别人赚钱,自己一进场就亏损,那么在这里投资失败无非两点:一是自身原因,自己没…

SAP 销售分销中的免费货物

销售业务中,免费货物在您与客户协商价格时起着重要作用。在零售、化工或消费品这样的行业部门中,通常以免费货物的形式向客户提供折扣。 作为用户,业务用户希望能自动确定免费货物并将它们归入销售凭证中。同时需要向成本控制部门提供免费货物…

密码算法概论

基本概念 什么是密码学? 简单来说,密码学就是研究编制密码和破译密码的技术科学 例题: 密码学的三个阶段 古代到1949年:具有艺术性的科学1949到1975年:IBM制定了加密标准DES1976至今:1976年开创了公钥密…

盘点那些好用的SAP FIORI App(一) Display Customer/Supplier List

做SAP运维的人可能都知道,SAP标准的菜单里面基本没有好用的report可以用来批量显示并导出客户清单,或者供应商清单。T-code MKVZ 可以导出供应商的采购数据,但仅限于部分字段,客户清单的话系统标准的有这个S_ALR_87012179 - Custo…

电脑端手机配置检测工具推荐与使用指南

摘要 本文介绍了如何使用克魔助手工具在电脑上检测手机的配置信息。通过该工具,用户可以全面了解手机的硬件和操作系统信息,包括电池、CPU、内存、基带信息和销售信息等。 引言 在日常工作中,了解手机的配置信息对于开发和测试人员非常重要…