2019年,我所在的创业公司决定全面拥抱大数据。作为技术负责人,我亲手操盘了第一台大数据服务器的选型与部署。本以为参考了几份官方白皮书就万无一失,结果第一个月就让我吃尽了苦头。今天不聊理论,只讲我在真实生产环境中踩过的三个“天坑”。
第一个坑:低估了IOPS的威力。我们为了省钱,采购了高容量但低转速的SATA盘来构建HDFS。结果在跑MapReduce作业时,NameNode的响应时间直线飙升,一个T级别的数据排序任务,硬是跑了十几个小时。后来我们紧急更换为NVMe SSD集群,并通过配置Rack Awareness优化了数据本地性,才把性能拉回正轨。教训是:大数据计算本质是IO密集型,硬盘的随机读写能力比容量更重要。
第二个坑:网络拓扑设计成“全连通”。初期我们天真地以为万兆网卡就能搞定一切,把30个节点全部连在一个机架交换机上。结果在Shuffle阶段,网络瞬间被打爆。后来我们学习了Clos网络架构,采用Spine-Leaf拓扑,并启用了ECN(显式拥塞通知)和DCQCN流控协议,才算解决了带宽争用的问题。对于大数据集群,网络收敛比至少要达到1:2.5。
第三个坑:内存与CPU的比例失衡。我们起初配置的是每节点64GB内存配16核CPU。在跑Spark SQL做复杂关联查询时,Executor频繁抛出OOM(内存溢出)。调优后发现,对于DataFrame的JVM堆内内存,合理的配置应该是每核4-8GB内存。最终我们调整到了256GB内存配32核,并且严格区分了堆内和堆外内存的使用策略。
从这些血泪史中,我总结出一条铁律:部署大数据服务器,绝不能只看硬件参数的堆砌,必须从工作负载模型出发,反向推导IO、网络和计算资源的配比。分布式系统从来不是用钱堆出来的,而是用架构的严谨性换来的。