别问,问就是个大坑。
市面上讲Spark的书,多如牛毛,真的,你去搜搜看,一大堆封面花里胡哨,标题一个比一个唬人——“从入门到精通”、“实战宝典”、“高手进阶之路”。结果呢?买回来三本,两本是官网文档的“精美”翻译和搬运,剩下一本,写得云里雾里,作者自己可能都没在生产环境里踩过几个像样的坑。

所以,今天不搞那些虚头巴脑的“TOP 10”榜单。我就聊聊我书架上那几本被我翻得起了毛边、被咖啡溅过、被我在半夜两点对着屏幕上该死的OOM (Out Of Memory)异常时拿来猛K的书。这几本,是能救命的。
咱们先聊聊那本绕不开的书,几乎人手一本的《Spark: The Definitive Guide》,中文名叫《Spark权威指南》。
你问我?我跟你说,这本书,你别指望从第一页舒舒服服地看到最后一页。你要是这么干,我保证你看到第三章就想睡觉。这本书的正确打开方式,不是“读”,是“查”。它就是一本Spark领域的《新华字典》。你忘了某个API怎么用?查它。你想搞清楚DataFrame的某个操作和原生SQL的细微差别?查它。你想知道Structured Streaming里的Watermark到底是怎么个逻辑?还是查它。
它的好,就好在“全”。Matei Zaharia和Bill Chambers这俩哥们,一个是 Spark 的亲爹,一个是 Databricks 的大佬,他们写出来的东西,还能有错?这本书覆盖了Spark SQL、DataFrame、Dataset API、GraphFrames、MLlib……几乎所有你能想到的 Spark 组件。它的代码示例,尤其是在Scala、Python和Java之间的切换,做得非常地道。所以,这本书,你必须有。但别把它当成你的入门导师,把它当成你身边最可靠、最博学、但有点不苟言笑的技术顾问。当你被某个具体问题卡住时,这位顾问总能给你最准确的答案。它就是你的弹药库,不是你的启蒙老师。
好了,字典有了。但光有字典,你写不出文章,更打不赢仗。接下来,才是真正让你从“会用”到“用好”的进阶。
你有没有过那种体验?一个Spark Job跑了八个小时,最后给你报一个红得发紫的OOM。你想死的心都有了。或者,明明数据量不大,任务却卡在某个Stage百分之九十九的地方,一动不动,活像个植物人。这个时候,你翻开《Spark权威指南》,它可能会告诉你某个参数的作用,但它不会告诉你为什么你的任务会变成这副德性。
这时候,你需要的是第二本书:《High Performance Spark》。
这本书,简直就是Spark 性能调优的福音书。它不教你基础语法,它默认你已经会写 Spark 代码了。它只干一件事:告诉你怎么把你的代码写得更快、更省、更稳。
作者 Holden Karau,是 Spark 社区里一个非常有名的贡献者,一个真正的实战派。这本书里,没有废话。它会掰开了、揉碎了跟你讲Spark底层那些要命的东西:Shuffle的机制是什么?为什么它被称为“万恶之源”?数据倾斜(Data Skew)是怎么发生的,又有哪些黑魔法可以治它?Tungsten计划到底是怎么通过优化内存和CPU使用来给 Spark 提速的?序列化,这个平时你可能根本不会注意到的细节,是怎么在关键时刻拖垮你整个集群的?
这本书就是干这个的。它不跟你绕弯子。直接上干货。它会逼着你去思考,为什么这里要用一个Broadcast Join而不是一个Shuffle Hash Join,为什么你的Stage划分会如此诡异,为什么明明数据量不大,Shuffle的数据量却能膨胀到天上去。看完这本书,你再去看 Spark UI,你会发现那个曾经让你眼花缭乱的DAG图,瞬间变得眉清目秀。你开始能看懂每个 Stage 的读写数据量,能判断出瓶颈到底在哪里。这本书,是让你从一个普通的 Spark 司机,变成一个懂得看引擎、听声响的赛车手。
讲完性能,我们再往深了走。你想不想知道,当你提交一个 spark-submit
命令之后,那个黑色的窗口背后,到底发生了什么惊心动魄的故事?Driver和Executor是怎么通信的?DAGScheduler和TaskScheduler这对兄弟是怎么分工合作,把你的代码大卸八块,然后扔到各个节点上去执行的?
如果你对这些“黑魔法”感兴趣,如果你不满足于仅仅做一个调优的赛车手,而是想成为一个能自己造车的工程师,那么你需要啃下一本硬骨头:《深入理解Spark:核心思想与源码剖析》。
这本书是国人写的,好处就是特别接地气,思维方式更贴合我们。作者耿嘉安把Spark的核心源码,一块一块地给你拆解开来。这本书,真的,非常硬核。它不适合新手,甚至不适合大部分只会写业务代码的工程师。它适合那些已经对 Spark 有了相当深入的理解,但总觉得还隔着一层窗户纸的人。
读这本书的过程,是痛苦的,但也是收获巨大的。你会看到RDD的五大要素是怎么在代码里体现的,你会明白窄依赖和宽依赖在源码层面是如何被区分和调度的,你会真正理解为什么Stage的划分要以Shuffle为界。这就像你以前只会开车,现在有人把发动机的图纸铺在你面前,告诉你每一个活塞、每一个齿轮是怎么咬合联动的。读完它,你对 Spark 的理解,会上升到一个全新的维度。以后再遇到疑难杂症,你甚至可以直接去扒源码,因为你知道该从哪里下手。这是一种彻彻底底的掌控感。
最后,我想跳出 Spark 本身,推荐一本看似无关,但实际上是所有大数据工程师内功心法的书:《Designing Data-Intensive Applications》,中文版叫《数据密集型应用系统设计》,我们都叫它DDIA。
为什么推荐这本?因为Spark从来都不是孤立存在的。它只是庞大的数据生态系统中的一个计算引擎。你用 Spark 处理的数据从哪里来?可能是 Kafka,可能是 HDFS,可能是数据库。处理完的数据到哪里去?可能是数仓,可能是数据湖,可能是线上的服务。
DDIA 这本书,就是帮你建立起整个数据世界的宏观认知。它不讲任何一个具体框架的 API,它讲的是原理和思想。它会告诉你,在分布式系统里,一致性和可用性是怎么权衡的;批处理和流处理的本质区别和联系是什么;各种数据模型(关系型、文档型、图)的优劣和适用场景在哪里。
读完这本书,你再回头看 Spark,你会发现你的视野完全不同了。你不会再纠结于 Spark 的某个 API,而是会思考,我这个业务场景,到底应该用批处理还是流处理?我设计的数据管道,如何保证数据的可靠性和一致性?我选择的存储方案,和 Spark 的计算模式是否匹配?它教你如何思考,如何设计,如何权衡。这种能力,比你记住一万个 API 重要的多。它让你从一个“码农”,真正开始向“架构师”的角色转变。
所以,我的推荐清单就这四本,不多,但每一本都值得反复咀嚼。
- 《Spark: The Definitive Guide》 :你的字典和军火库,常备案头,随时查阅。
- 《High Performance Spark》 :你的战地手册,专门解决各种性能疑难杂症,救你于水火。
- 《深入理解Spark:核心思想与源码剖析》 :你的屠龙之术,过程痛苦,练成之后,功力大增。
- 《Designing Data-Intensive Applications》 :你的内功心法,打通任督二脉,让你拥有上帝视角。
书,不在多,在精。更重要的是,别光看。把书里的代码敲一遍,把书里的场景在自己的集群上复现一下,把书里的理论和你踩过的坑对应起来。那样,这些印在纸上的铅字,才会真正变成你脑子里的东西。
本文由用户 大王 上传分享,若内容存在侵权,请联系我们(点这里联系)处理。如若转载,请注明出处:http://www.365yunshebao.com/book/5759.html