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

Spark SQL、Hive SQL运行流程解析及对比

目录

    • 一、Spark SQL 运行过程详解
      • 1. SQL 解析(Parsing)
      • 2. 逻辑计划生成(Logical Plan)
      • 3. 逻辑计划优化(Logical Optimization)
      • 4. 物理计划生成(Physical Planning)
      • 5. 代码生成(Code Generation)
      • 6. 任务划分与调度(Task Scheduling)
      • 7. 执行(Execution)
      • 8. 结果返回
    • 总结流程图(简化版)
    • 额外说明
  • 二、Hive 执行流程
      • 1.SQL 解析(Parsing)
      • 2. 语义分析和逻辑计划生成(Semantic Analysis & Logical Plan)
      • 3.逻辑计划优化(Logical Optimization)
      • 4. 物理计划生成(Physical Plan)
      • 5.作业提交(Job Submission)
      • 6.执行(Execution)
      • 7. 结果返回
  • 二、Hive 与 Spark SQL 执行流程的区别
  • 三、总结
  • 四、举例对比

Spark SQL 是 Apache Spark 提供的用于 结构化数据处理的模块,它允许 使用 SQL 语句查询数据,同时 支持DataFrame和Dataset API

一、Spark SQL 运行过程详解

1. SQL 解析(Parsing)

  • 用户提交一条 SQL 语句(例如 SELECT * FROM table WHERE id > 10)。
  • Spark SQL 的解析器(Parser)会将 SQL 语句转换成抽象语法树(AST,Abstract Syntax Tree)。
  • 解析器会检查 SQL 语法是否正确,如果语法错误会抛出异常。

2. 逻辑计划生成(Logical Plan)

  • 解析后的 AST 会被转换成一个未解析的逻辑计划(Unresolved Logical Plan)。
  • 这个逻辑计划是对查询的抽象表示,包含了查询的各个操作(如过滤、投影、连接等),但字段和表名还未解析
  • 接下来,Spark 会根据 Catalog(元数据存储,包含表结构、函数信息等)解析表名、列名,生成解析后的逻辑计划(Resolved Logical Plan)。

3. 逻辑计划优化(Logical Optimization)

  • 解析后的逻辑计划会被传入 Catalyst 优化器
  • Catalyst 优化器会应用一系列规则(Rule-based Optimizations),例如:
    • 常量折叠(Constant Folding):将表达式中常量计算提前。
    • 谓词下推(Predicate Pushdown):将过滤条件尽可能早地应用,减少数据量。
    • 投影剪裁(Projection Pruning):只读取和处理必要的列。
    • 子查询消除连接重排序等。
  • 优化后生成优化的逻辑计划(Optimized Logical Plan)。

4. 物理计划生成(Physical Planning)

  • Catalyst 会将优化后的逻辑计划转换成一个或多个物理计划(Physical Plan)。
  • 物理计划描述了具体的执行策略,比如使用哪种连接算法(Broadcast Hash Join、Sort Merge Join等)、是否使用缓存等。
  • Spark 会根据成本模型(Cost Model)选择最优的物理计划

5. 代码生成(Code Generation)

    相关文章:

  • Linux环境基础开发工具->vim
  • Paimon和Hive相集成
  • Java的Filter与Spring的Interceptor的比较
  • vim以及vi编辑器常用快捷键指令
  • DDS与PLL技术
  • [Harmony]实现JSON与类的双向转换
  • OpenCV CUDA模块图像过滤------用于创建一个最小值盒式滤波器(Minimum Box Filter)函数createBoxMinFilter()
  • 第三十二天打卡
  • FFmpeg 超级详细安装与配置教程(Windows 系统)
  • 高等数学-积分
  • Ubuntu18.04安装ros
  • PG Craft靶机复现 宏macro攻击
  • flask允许跨域访问如何设置
  • Android 内存溢出(OOM)的 Kotlin 排查与优化指南
  • 【Java多态】:灵活编程的核心
  • 当AI遇上科研:北大“科学导航”重塑学术探索全流程
  • 数智读书笔记系列034《最优解人生》对编程群体的理念契合
  • 养生攻略:五步打造健康生活
  • 深度学习模型部署:使用Flask将图像分类(5类)模型部署在服务器上,然后在本地GUI调用。(全网模型部署项目步骤详解:从模型训练到部署再到调用)
  • 【缓存】JAVA本地缓存推荐Caffeine和Guava
  • 装修公司加盟哪个好/seo的中文是什么
  • 玉田网站建设/南昌seo网站排名
  • 长期供应小企业网站建设/百度关键词搜索量排名
  • 做ps彩图什么网站好/关键词seo服务
  • 东莞樟木头做网站哪家好/平台seo
  • 做公众号首图的设计网站/seo去哪学