Skip to content
Spark 执行模型与性能优化 · 第 1 篇 / 共 2 篇
领域数据与中间件
专题Spark 专题
当前序列Spark 执行模型与性能优化
阅读位置第 1 篇 / 共 2 篇当前专题第 1 个序列 / 共 3 个序列

Spark 作业执行与惰性计算:为什么代码写完了,不代表任务真的开始跑了

Spark 最容易让初学者困惑的一点就是:

  • 代码明明写了很多转换
  • 但任务好像并没有立刻执行

这背后最核心的机制就是:

  • 惰性计算

先说结论

理解 Spark 执行过程,更实用的抓手通常是:

  1. 哪些操作只是构建计算链
  2. 哪些操作真正触发执行
  3. Stage 为什么会被切开

一、惰性计算到底在干什么

可以先粗略理解成:

  • Spark 先记住你想怎么计算
  • 真正需要结果时才去执行

这让它有机会:

  • 统一优化
  • 合并计算链

二、为什么 Stage 会被切开

因为不同算子之间的数据依赖关系并不一样。

一旦出现需要大规模重分布的数据过程,Stage 往往就会被切开。

这也是很多性能问题的起点。

三、这套机制为什么重要

因为如果你对执行模型没感觉,就很容易:

  • 误判哪里慢
  • 看不懂为什么会有 Shuffle
  • 不知道缓存和行动算子为什么影响这么大

一句话总结

Spark 惰性计算最重要的价值,是让你意识到:

  • 代码顺序不等于执行顺序
延伸阅读相关文章优先当前专题,再补跨专题关联。
同一序列 · 顺着当前主线继续读Spark Shuffle、数据倾斜和 Join 优化适合沿着执行模型、Shuffle、Join 和数据倾斜这条线连续看。Spark 专题 · Spark 执行模型与性能优化同专题其他序列 · Spark 作业执行与性能判断广播变量和累加器什么时候该用适合把依赖类型、Executor 内存、广播变量和 AQE 放在一条 Spark 执行主线上理解。Spark 专题 · Spark 作业执行与性能判断同专题其他序列 · Spark 作业执行与性能判断窄依赖和宽依赖怎么影响执行计划适合把依赖类型、Executor 内存、广播变量和 AQE 放在一条 Spark 执行主线上理解。Spark 专题 · Spark 作业执行与性能判断同专题其他序列 · Spark 资源与状态管理细节资源提交和动态分配怎么调优适合把抽象模型、缓存和资源调度放到一起看。Spark 专题 · Spark 资源与状态管理细节跨专题关联 · 同场景:基础学习@Conditional 系列注解怎么配合使用适合把自动装配、条件装配、Profile 和循环依赖放回 Spring Boot 启动过程里理解。Spring 专题 · Spring Boot 启动、装配与配置跨专题关联 · 同场景:基础学习保留策略和日志压缩适合哪些场景适合把副本机制、acks、批量压缩和日志组织放在一条 Kafka 投递主线上理解。Kafka 专题 · Kafka 投递链路与日志存储机制
继续阅读Spark 执行模型与性能优化当前序列第 1 篇 / 共 2 篇当前专题第 1 个序列 / 共 3 个序列
往前看
上一序列Hive 表设计与 SQL 调优从第 1 篇开始:Hive 分区、分桶和文件格式怎么选
往后看
下一篇Spark Shuffle、数据倾斜和 Join 优化继续当前序列下一章下一序列Spark 资源与状态管理细节从第 1 篇开始:RDD、DataFrame、Dataset 怎么选

把零散经验整理成可查、可复用、可持续更新的企业级知识门户