订阅更新

Spark on YARN的cluster模式和client模式到底有什么区别?

Spark手册 第 15 题 约 3 分钟读完

本文目录
  1. 先说结论
  2. 详细对比
  3. 为什么生产环境必须用cluster?
  4. 实战踩坑
  5. 总结

先说结论

核心区别就一句话:Driver跑在哪里。 cluster模式Driver跑在YARN集群的某个节点上,client模式Driver跑在提交作业的那台机器上。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

这道题看起来简单,但能说清楚的人不多。尤其是“具体差在哪里、生产环境为什么必须用cluster”,很多人只能说个大概。今天把原理和实战经验讲透。

详细对比

维度cluster模式client模式
Driver位置YARN集群的某个NodeManager提交作业的机器(你的笔记本/跳板机)
提交后能否关闭终端能(Driver在集群里)不能(关了Driver就死了)
日志查看YARN UI / yarn logs命令直接在终端看到
网络开销低(Driver和Executor在同一集群)高(Executor的数据要传回Driver所在的机器)
适用场景生产环境调试/开发

为什么生产环境必须用cluster?

原因一:可靠性 —— client模式Driver跑在你提交作业的机器上。如果这台机器重启、网络断开、或者你关了笔记本,Driver就挂了,整个作业失败。

原因二:网络性能 —— client模式下,Executor的结果数据要通过网络传回Driver所在的机器。如果提交机器在办公室,集群在机房,网络延迟和带宽都是问题。

原因三:资源管理 —— cluster模式的Driver作为YARN的一个Container运行,资源统一管理。client模式的Driver不受YARN管理,可能抢占提交机器的资源。

实战踩坑

我在元宇宙社交App时遇到过两次因为这个导致的生产事故:

事故一: 有同事用client模式提交了一个生产作业然后关了笔记本回家了。Driver挂了,作业失败,下游报表没出数。

事故二: 跳板机内存只有4GB,有人用client模式提交了一个Driver需要2GB内存的作业,把跳板机的内存吃满了,其他人无法登录。

从那以后我们的规则:生产环境只允许cluster模式,调度系统强制检查。 开发调试时可以用client模式,因为能直接看日志方便调试。

总结

cluster和client的核心区别是Driver跑在哪里。生产环境必须cluster(可靠性+网络性能+资源管理),开发调试用client(方便看日志)。面试时能说清楚区别和原因,再加一个踩坑故事,就很有说服力。

第11-15篇完结。下一辑继续聊动态资源分配、Delta Lake/Iceberg配合、Checkpoint容错机制、并行度与分区数设计、项目经验表达等实战场景。

你们生产环境用的是cluster还是client模式?评论区聊聊~

关注「Wood聊大数据」| 9年大数据老兵,聊技术、聊职场、聊成长

刷题进度保存在当前浏览器