SparkSQL 演变历史分析

发布时间:2026/10/6 3:51:53

SparkSQL 演变历史分析 摘要从 2012 年的 Shark 到 2020 年的 Adaptive Query ExecutionSparkSQL 走过了一条从Hive on Spark到世界级 SQL 引擎的进化之路。本文沿时间线追溯 Shark→SchemaRDD→DataFrame→Dataset→AQE 五个关键阶段深度解析 Catalyst 优化器的 TreeNodeRule 架构Analysis→Logical Optimization→Physical Planning→Code Generation配合版本能力矩阵和 2 张原创架构图完整展现 SparkSQL 的十年演变史。关键词SparkSQL, DataFrame, Dataset, Catalyst, Tungsten, AQE, WholeStageCodegen, Shark一、开篇为什么需要理解 SparkSQL 的演变SparkSQL 是 Spark 生态中使用最广泛的模块——从spark.sql(SELECT ...)到df.filter().groupBy().agg()背后是近十年持续演进的查询引擎。SparkSQL 演变主线 2012: Shark (Hive on Spark) → 2014 废弃 2014: SchemaRDD (Spark 1.0-1.2) → DataFrame 前身 2015: DataFrame Catalyst (1.3) → 里程碑 2016: Dataset Tungsten (1.6-2.0) → 类型安全极致性能 2017: WholeStageCodegen (2.0) → 全阶段代码生成 2020: AQE DPP (3.0) → 运行时自适应优化二、演变全景时间线阶段一Shark (0.9~1.0) — 已废弃Shark HiveQL 解析 → 翻译为 RDD 操作 → 在 Spark 上执行 优势: 复用 Hive 元数据 · SerDe · UDF · 比 Hive MR 快 100x 致命缺陷: ❌ 编译缓慢HiveQL→RDD 翻译层开销大 ❌ 不支持中间结果缓存 ❌ 与 Spark 编程模型割裂 ❌ 无 Catalyst · 无 Tungsten阶段二SchemaRDD (1.0~1.2)SchemaRDD RDD[Row] Schema 信息 spark.sql(SELECT * FROM t) → SchemaRDD 局限: 无类型安全 · 无 Encoder · 无 Catalyst阶段三DataFrame Catalyst (1.3) — 里程碑DataFrame Dataset[Row] — 带 Schema 的分布式数据表 Catalyst Optimizer 首次引入 核心优化: 谓词下推 · 列裁剪 · 常量折叠 · 投影合并 Tungsten 引擎: 堆外内存 · 代码生成 · 缓存友好布局阶段四Dataset Encoder (1.6~2.x)Dataset[T] DataFrame Encoder[T] Encoder: JVM 对象 ↔ Spark SQL 内部二进制格式比 Kryo 快 ~10x 编译时类型安全 运行时 Tungsten 优化 Spark 2.0: WholeStageCodegen阶段五AQE DPP (3.0)AQE 三大利器: ① 动态合并 Shuffle 分区 ② 动态切换 Join 策略SortMerge → Broadcast ③ 动态优化数据倾斜 Join DPP: 分区裁剪下推到 Scan ANSI SQL 模式三、Catalyst 优化器核心架构3.1 四阶段流水线① Analysis: Unresolved → Resolved LogicalPlan 解析表名/列名/函数名 → 类型推断与隐式转换 ② Logical Optimization (70 规则): 谓词下推·列裁剪·常量折叠·子查询消除·布尔简化 ③ Physical Planning: Cost-Based: 评估行数/数据大小 → 选择最佳 Join 策略 AQE (3.0): 运行时根据实际数据量动态调整 ④ Code Generation: WholeStageCodegen → 多算子融合 → Janino 编译3.2 RuleExecutor 引擎Batch(OperatorOptimization,FixedPoint(100),PushPredicateThroughJoin,// 谓词穿透 JoinColumnPruning,// 列裁剪NullPropagation,// Null 传播ConstantFolding,// 常量折叠BooleanSimplification,// 布尔简化...70规则)// 策略: Once · FixedPoint(N) · Strategy四、版本能力矩阵能力1.0 Shark1.3 DataFrame2.0 Dataset3.0 AQECatalyst✗✓✓Cost✓Tungsten✗✓✓WSCG✓AQE✗✗✗✓Encoder✗✗✓✓ANSI SQL✗✗✗✓五、总结演变主线Shark→SchemaRDD→DataFrameCatalyst(1.3)→DatasetEncoder(1.6)→WholeStageCodegen(2.0)→AQEDPP(3.0)。Catalyst 四阶段Analysis→Logical Optimization(70规则)→Physical Planning(CBOAQE)→Code Generation。关键转折DataFrame(1.3)让 Spark 有了查询优化器Dataset(1.6)让 API 层面类型安全AQE(3.0)让优化从编译时跃升到运行时。作者starzy博客blog.starzy.cnGitHubstarzy1990.github.io专注 AI Agent · LangGraph · RAG · 大数据架构 · 数据工程实践
延伸阅读

更多相关文章

2026/10/2 7:36:03

第二天 C语言预备知识

一.低级,高级语言指的是更接近硬件层级还是应用层级 二.GCC广泛使用的编译器,其编译过程: (.c) 1.预处理:gcc -E main.c -o main.i 在编译前,把代码中的宏名直接替换成对应的文本(宏定义),展开头文件,删除注释,处理条…

2026/10/1 3:43:33

掌握LangGraph:让智能体自主选择最合适的工具(收藏版)

本文深入解析如何运用LangGraph技术,使智能体能够针对不同问题自主判断并选择最适配的工具——无论是向量搜索、图遍历还是网络搜索。传统RAG模型固定执行序列,无法灵活应对多样化问题,而本文介绍的Agentic RAG通过状态机设计,赋予…

2026/10/2 17:22:28

从 Demo 到生产级别的 Agent 项目

交互响应同步响应同步响应就是最简单的,给模型一个输入,然后一直在那里等,等到有答案了一股脑全部返回。SSE 流式输出SSE 流式输出是大模型会生成很多个字,每生成一个就推送给前端,看上去就好像在打字一样。异步输出异…

2026/10/6 3:48:32

ET框架斗地主Demo实战:棋牌服务端核心机制与踩坑全解

简介:这是一份基于ET框架(4.0版本)开发的斗地主Demo工程,面向希望入门ET游戏服务器框架的开发者,尤其适合具备一定C#和Unity基础、想了解分布式游戏架构与服务器客户端联调的初学者。包体为7z压缩格式,共10…

2026/10/6 3:48:32

会议室预订预约小程序前后台源码:防超订与自动释放实战

简介:这是一套面向写字楼、高校及创业园区的会议室在线预订系统源码,采用小程序前端与原生PHP后台组合,适合需要快速搭建预约平台的开发者或企业二次开发。前端基于小程序实现会议室查询、时段选择与预订操作,后台负责资源管理、订…

2026/10/6 3:48:32

2核2G云服务器架设游戏服务器的真实边界与部署技巧

2核2G的云服务器能不能架游戏?这个问题我这些年被问过不下几十次。问的人里有大学生、有刚组队做小游戏的朋友、也有单纯想开个私服带同学玩的老玩家。我的回答一直很直接:能,但前提是你得先搞明白自己架的是什么游戏、打算让几个人在线。这两…

2026/10/6 3:48:32

FreeCAD Expression Framework源码解析:参数化建模的表达式引擎

“FreeCAD没有齿轮工具”,这句社区热评我关注了很久。乍一听是吐槽,往深了想其实点中了FreeCAD和传统商业CAD最根本的差异:它不愿意把每一个你需要的形状都做成现成命令,而是把“让模型自己长出来”的能力交给你。支撑这个能力的底…

2026/10/6 3:43:32

Python+PySpark+DeepSeek-R1实现弹幕情感分析与推荐系统

每年到这个时间点,总有学弟学妹拿着差不多的题目来问我:能不能用 Python 做弹幕情感分析,能不能把大模型接进去,能不能再加一个推荐系统和一个可视化大屏凑成一整套毕业设计。说实话,这种题目现在很常见,但…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/4 0:01:02

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/5 17:38:27

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 0:03:23

MR25H40CDF+STM32F031C6工业级高可靠数据存储方案

1. 项目概述:为什么在工业现场非得用 MR25H40CDF 配 STM32F031C6 做数据存储?在工厂产线的 PLC 控制柜里、在风电变流器的散热片背面、在矿井监测终端的金属外壳下,你经常能看到一块指甲盖大小的黑色芯片——它既不是 Flash,也不是…

2026/10/6 0:03:23

MRAM+STM32工业断电数据保全实战指南

1. 项目概述:为什么在工业现场非得用 MR25H40CDF 配 STM32F031C6 做数据存储?在工厂产线的PLC柜里、在野外无人值守的环境监测终端里、在高速运转的包装机控制板上,你经常能看到一块指甲盖大小的黑色芯片,旁边贴着“MR25H40CDF”丝…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑