当前位置: 首页 > 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)

    http://www.xdnf.cn/news/580339.html

    相关文章:

  • macOS专业用户远程操作全场景优化指南:开发运维协同、安全合规与性能提升实战
  • GitLab 备份所有仓库(自动克隆)
  • OceanBase数据库全面指南(查询进阶篇DQL)
  • XXE(外部实体注入)
  • 创建信任所有证书的HttpClient:Java 实现 HTTPS 接口调用,等效于curl -k
  • 【Linux学习笔记】ext2文件系统的深度剖析
  • 微软CTO:AI已经“能力过剩”,行业需要努力缩小模型能力与实际产品交付之间的差距
  • rt-linux下的底层锁依赖因cgroup cpu功能导致不相干进程的高时延问题
  • 边缘计算是什么?逻辑视域下的边缘计算:分布式计算范式的理论基础与逻辑结构分析
  • SQL的RAND用法和指定生成随机数的范围
  • MySQL中InnoDB引擎逻辑存储结构、B+树索引结构、B+树高度及存储数据量
  • 从零基础到最佳实践:Vue.js 系列(8/10):《性能优化与最佳实践》
  • 借助Azure AI Foundry 如何打造语音交互新体验
  • 结构型:适配器模式
  • K8S之核心技术Helm
  • 谷歌medgemma-27b-text-it医疗大模型论文速读:面向医学视觉问答的语义标签知识增强数据集SLAKE
  • 【Linux】进程间通信(四):System V标准(共享内存、消息队列、信息量)
  • [Git] 认识 Git 的三大区域 文件的修改和提交
  • linux杀死进程自身
  • Docker实战
  • docker network 自定义网络配置与管理指南
  • 数字孪生技术如何重塑能源产业?
  • 生成树协议(STP)配置详解:避免网络环路的最佳实践
  • java基础(api)
  • 第八天的尝试
  • 印度语言指令驱动的无人机导航!UAV-VLN:端到端视觉语言导航助力无人机自主飞行
  • AllToAll通信为什么用于EP并行?
  • Linux性能监控工具nmon
  • 【开源解析】基于深度学习的双色球预测系统:从数据获取到可视化分析
  • Axure系统原型设计首页模版方案