
前两天有同学面试遇到了一个问题在内部6级群大家讨论了一番。题目是这样的两套集群跑同一份代码、数据量一样、资源配置也一样但 A 集群跑 5 分钟B 集群跑了 2.5 小时——差了 30 倍。什么原因怎么排查看着简单一开口就容易栽——资源不够网络慢数据量大错。题目已经把明面上的差异全堵死了。这种题面试官最爱。因为它看起来像玄学其实是真功夫。这种开放性问题回答最忌讳上来背八股文而是要有分析思维一步步抽丝剥茧。这种开放性问题其实就是考察你的分析思维对问题的拆解能力。分析可能是什么问题你怎么分析出来的可能不是什么问题你怎么分析出来的。要有理有据。而且为了体现你有丰富的trouble shooting经验你要尽可能考虑的全面。面试中拉开差距的大多是下面这几个方向。1.数据倾斜十次配置一样却差十倍八次可能是它。代码、数据量虽然一样但数据的分布不一样。同样一句group by user_id——A 集群10 亿条100 万个 user_id 平均分布丝滑。B 集群也是 10 亿条但 1 个羊毛党 user_id 占了 9 亿——一个 Reduce /Task累死其他 Reduce/Task全在围观。怎么查Spark UI 看Summary Metrics信息 Task 时长分布。99% 的 Task 30 秒跑完1 个跑了 2 小时——凶手抓到。2.小文件问题同样是 1TB 数据A 集群128 个大文件128 个 MapTask。B 集群100 万个 1MB 小文件100 万个 MapTask。光启动开销就够喝一壶。而且 NameNode 元数据压力直接爆表。怎么查hdfs dfs -count看文件大小。当然这是运维的权限当然开发只需要在元数据管理平台查询库表、文件平均大小以及自己关心的字段。不了解的可以看看HDFS中NameNode元数据内容。3.Shuffle Spill同样groupByKey——A 集群全程内存 shuffle磁盘 IO 几乎为 0。B 集群内存不够全 spill 到磁盘。B 的耗时 A 无数次磁盘读写 GC 停顿。怎么查Spark UI 看 Shuffle Spill (Disk) 那一项爆没爆。4.一样的资源其实不一样CPU 型号不同IPC 可能差 30%。一个全 SSD一个混着机械盘——差 10 倍。万兆网卡 vs 千兆网卡。DDR4 vs DDR3。题目说的集群资源都一样——你信真正的一样要细到 BIOS、驱动、内核参数。5.集群参数差异 / 集群过载一个开了spark.sql.adaptive.enabled一个没开。一个 Java 8一个 Java 11——GC性能就可以差不少YARN 队列被别的业务抢独占 50%变成只分到 20%。怎么查数据平台或者yarn top看队列实际用量挨个比配置。面试官到底在考什么其实答到这里你已经甩开大多数人。这道题没标准答案考的是——你是一个配置工程师还是性能工程师配置工程师看参数、跑任务、看 log。性能工程师看的是从数据 资源 调度 计算 中间件风险评估熟悉全链路并且能够快速定位具有分析思维能独当一面具有trouble shooting能力。回答的顺序可以向面试官反馈你的经验深度。