当前位置: 首页 > article >正文

【Spark】Spark SQL执行计划-精简版

Spark SQL分为四个子项目:

Catalyst (sql/catalyst):

  • Catalyst 是 Spark SQL 使用的功能性、可扩展的查询优化器。它是一个与实现无关的框架,用于操作关系运算符和表达式的树。包括两部分:用来表示树的函数库和应用于该树的规则库

Execution (sql/core):

  • 查询计划程序/执行(planner / execution)引擎,用于将Catalyst的逻辑查询计划转换为Spark RDD代码。该组件还包括一个新的公共接口 SQLContext,它允许用户针对现有的 RDD和Parquet文件执行SQL或LINQ语句。

Hive支持 (sql/ Hive):

  • 包括名为 HiveContext 的 SQLContext 扩展,允许用户使用 HiveSQL 的子集编写查询并使用 Hive SerDes 从 Hive Metastore 访问数据。还有一些包装器允许用户运行包含 Hive UDF、UDAF 和 UDTF 的查询。

HiveServer和CLI支持 (sql/hive-thriftserver)

  • 包括对 SQL CLI (bin/spark-sql) 和 HiveServer2(用于 JDBC/ODBC)兼容服务器的支持。

在这里插入图片描述

SparkSQL执行过程:

Parser: 利用Antlr4对SQL语句进行词法和语法的解析,抽象成AST语法树并转换成Unresolved Logical Plan;

Analyzer:Catalyst要结合DataFrame的Schema信息,来确认计划中的表名、字段名、字段类型与实际数据是否一致,完成确认之后,将 Unresolved Logical Plan 解析成 Analyzed logical plan;

Optimizer:Catalyst基于一些既定的启发式规则将 Analyzed logical plan 解析成 Optimized Logical Plan;规则:如谓词下推,列减裁,常量替换;

Planner

  • 在优化Spark Plan的过程中,Catalyst基于既定的优化策略(Strategies),把逻辑计划中的关系操作符一一映射成物理操作符,生成Spark Plan;优化策略(Strategies)如下:
    • SpecialLimits:指定Limit策略
    • InMemoryScans:缓存策略
    • Aggregation:聚合策略
    • JoinSelection:Join策略选择
    • BasicOperators:逻辑到物理操作符的映射,如Project、Filter、Sort等
  • 在生成Physical Plan过程中,Catalyst再基于事先定义的Preparation Rules,对Spark Plan做进一步的完善、生成可执行的Physical Plan。Preparation Rules如下:
    • EnsureRequirements:验证输出的分区(partition)和我们要的分区是不是一样,不一样的话需要添加shuffle重分区,如果有排序需求,要添加Sort操作,
    • CollapseCodegenStages:全阶段代码生成(Whole Stage Code Generation)
    • ReuseExchange:内存或磁盘复用,
    • ReuseSubquery:子查询复数用
    • PlanSubqueries:生成子查询
    • ExtractPythonUDFs :提取Python的UDF函数

Code Generation:选定最优的物理执行计划,准备生成字节码去开始执行


http://www.kler.cn/a/443600.html

相关文章:

  • python递归最多多少层
  • 闲谭Scala(3)--使用IDEA开发Scala
  • 【CSS in Depth 2 精译_094】16.2:CSS 变换在动效中的应用(下)——导航菜单的文本标签“飞入”特效与交错渲染效果的实现
  • Java中使用四叶天动态代理IP构建ip代理池,实现httpClient和Jsoup代理ip爬虫
  • Postman接口测试01|接口测试基础概念、http协议、RESTful风格、接口文档
  • 解线性方程组
  • 聊聊航空航天软件中常用的SIFT(Software-Implemented Fault Tolerance)三版本方案
  • 前端打印(html)
  • 设计模式之创建型
  • sql server 备份恢复
  • 《Vue3实战教程》5:响应式基础
  • 【异常】GL-SFT1200路由器中继模式,TL-CPE1300D无法搜寻5G网问题分析
  • 如何在STM32中使用RTC定时器
  • [一招过] Python的正则表达式篇
  • 基于51单片机的交通灯设计—夜间、紧急、复位、可调时间、四个数码管显示
  • kubeadm一键部署K8S 集群架构
  • Gitee与idea的项目提交步骤
  • MySQL专题:SQL优化实践
  • JavaCV 之中值滤波:提升图像质量的有效方法
  • 【C语言】库函数常见的陷阱与缺陷(一):字符串处理函数[2]--gets函数
  • PHP:构建动态网站的后端基石
  • 微服务-02
  • 拍立淘按图搜索API接口需要遵循一定的步骤和注意事项
  • 从Python到C++的转变之路——如何高效复现C++开源项目 || Windows || Visual Studio || 持续更新
  • IP协议详解
  • 八大网络安全策略:如何防范物联网(IoT)设备带来的安全风险