60 TB 数据:Facebook 是如何大规模使用 Apache Spark 的
这篇讲的是Facebook如何将一个关键的大数据流水线,从古老的Hive迁移到现代的Apache Spark上。背景是,他们用于实时实体排名的特征准备流程,原本基于Hive,由数百个小作业组成,耗时长达三天,且极其难以监控和维护。为了追求更快的速度和更好的可管理性,他们选择将整个流水线整合成一个单独的Spark作业,直接处理高达60TB的压缩数据。 迁移过程并非一帆风顺。作者坦言,第一次甚至第十次尝试都未成功,因为要可靠地运行一个处理如此大规模shuffle数据的作业,挑战巨大。团队对Spark的可靠性进行了大量修补,例如提升节点频繁重启时的容错能力,修复了从PipedRDD获取失败到执行器内存溢出等一系列问题。这使得作业得以稳定运行。 在性能优化上,他们的努力同样深入。通过自定义的火焰图等分析工具定位瓶颈后,他们对Spark底层进行了关键修改:修复排序器的内存泄漏带来了30%的速度提升;优化Snappy压缩调用节省了10% CPU;减少不必要的重排文件打开操作最高提升了50%的性能。最终,这个迁移项目不仅让Facebook自身受益,所有改进也被回馈给了开源Apache Spark社区。