Appearance
Spark 作业执行与惰性计算:为什么代码写完了,不代表任务真的开始跑了
Spark 最容易让初学者困惑的一点就是:
- 代码明明写了很多转换
- 但任务好像并没有立刻执行
这背后最核心的机制就是:
- 惰性计算
先说结论
理解 Spark 执行过程,更实用的抓手通常是:
- 哪些操作只是构建计算链
- 哪些操作真正触发执行
- Stage 为什么会被切开
一、惰性计算到底在干什么
可以先粗略理解成:
- Spark 先记住你想怎么计算
- 真正需要结果时才去执行
这让它有机会:
- 统一优化
- 合并计算链
二、为什么 Stage 会被切开
因为不同算子之间的数据依赖关系并不一样。
一旦出现需要大规模重分布的数据过程,Stage 往往就会被切开。
这也是很多性能问题的起点。
三、这套机制为什么重要
因为如果你对执行模型没感觉,就很容易:
- 误判哪里慢
- 看不懂为什么会有 Shuffle
- 不知道缓存和行动算子为什么影响这么大
一句话总结
Spark 惰性计算最重要的价值,是让你意识到:
- 代码顺序不等于执行顺序