给这本书写前言,让我想起了两年前给《深入理解Spark:核心思想与源码分析》一书写前言的经历。这让我不禁想起崔护的《题都城南庄》,诗的内容是:
去年今日此门中,人面桃花相映红。
人面不知何处去,桃花依旧笑春风。
Spark从核心思想和架构来看,它依然是那个Spark,但是我已经找了一个新的东家。我的年龄不知不觉中又长了两岁,Spark也在大数据领域从 “新贵”变成了“老人”。Spark的版本从0.X.X到2.X.X所用的时间和我的两年基本相同。
自从《深入理解Spark:核心思想与源码分析》一书出版后,收到了一些市场的反响,更难得的是得到了很多读者的反馈。一些热心的读者通过微信或者邮件向我指出了很多书中内容的不足之处,包括错别字、错误的描述、代码分析有点像流水账、提纲挈领的内容偏少、代码版本过低等。一些错误在修订的版本中得到了解决,有些修正的内容则单独写博客来补充。在与读者的沟通过程中,也纠正了我对于一些问题的理解偏差。再次深深的感谢广大读者的支持与帮助!
一些读者对《深入理解Spark:核心思想与源码分析》一书的内容非常肯定,希望能够出第二版,高婧雅编辑也一再“怂恿”我,但是我一直没有写第二版的打算。我当时希望有人能够以更好的方式写一本介绍和分析2.0版本的源码分析书籍,因为我感觉之前的写作方式的确不是很好。在我心中一直有个矛盾——如果源码太少,源码分析的书籍将退化成讲原理的,对于想深入理解实现的读者来说这是不够的。如果源码太多,让人又有堆砌代码或者混篇幅的感觉。很多源码分析的书只简单说说接口或者方法的功能,让人始终有种“雾里看花”的感觉。所以我一直很期待能有更好的方式来写作源码分析类型的书。
在一年多的等待中,我始终没有发现类似书籍的出现,于是我打算再做一次尝试。本书这次摈弃了《深入理解Spark:核心思想与源码分析》一书按照代码执行流程分析的方式,改为先从整体上介绍一个系统,然后逐个分析每个组件的功能,最后将这些组件之间的关系用流程图的方式串联起来的方式。本书的写作方式依然犯有代码过多的“毛病”,但我还是期待本书能带来一些新的气象。
l 按照源码分析的习惯设计,从脚本分析到初始化再到核心内容。整个过程遵循由浅入深的基本思路。
l 每一章先对本章的内容有个总体的介绍,然后深入分析各个组件的实现原理,最后将各个组件之间的关系通过执行流程来展现。
l 本书尽可能的用图来展示原理,加速读者对内容的掌握。
l 本书讲解的很多实现及原理都值得借鉴,能帮助读者提升架构设计、程序设计等方面的能力。
l 本书尽可能保留较多的源码,以便于初学者能够在脱离办公环境的地方(如地铁、公交),也能轻松阅读。
源码阅读是一项苦差事,人力和时间成本都很高,尤其对于刚刚接触Spark的人来说。本书尽可能保留源码,使得分析过程不至于产生跳跃感,目的是降低大多数人的学习门槛。如果你是从事IT工作1~3年的新人或者希望开始学习Spark核心知识的人来说,本书非常适合你。如果你已经对Spark有所了解或者已经使用它,还想进一步提高自己,那么本书更适合你。如果你是一个开发新手,对Java、Linux等基础知识不是很了解的话,本书可能不太适合你。如果你已经对Spark有深入的研究,本书也许可以作为你的参考资料。
总体说来,本书适合以下人群:
l 已经了解过Spark,但还想深入理解Spark实现原理的人;
l 大数据技术爱好者;
l 对性能优化和部署方案感兴趣的运维工程师和架构师;
l 开源代码爱好者,喜欢研究源码的同学可以从本书学到一些阅读源码的方式方法。
本书不会教你如何开发Spark应用程序,只拿word count的经典例子做演示。本书会简单介绍Hadoop MapReduce、Hadoop YARN、Mesos、Alluxio(Tachyon)、ZooKeeper、HDFS、Akka、Jetty、Netty,但不会过多介绍这些框架的使用,因为市场上已经有丰富的书籍供读者挑选。本书也不会过多介绍Scala、Java、Shell的语法,读者可以在市场上选择适合自己的书籍阅读。本书将无比适合那些想要破解潘多拉魔盒的人!
本书一共有10章内容,主要包括以下部分:
准备部分(第1 ~ 2 章):简单介绍了Spark 的环境搭建和基本原理,帮助读者了解一些背景知识。
基础部分( 第3 ~ 5 章):介绍Spark 的基础设施、SparkContext的初始化、Spark执行环境等内容。
核心部分( 第6 ~ 9 章):这部分是Spark 最为核心的部分,包括存储体系、调度系统、计算引擎、部署模式等。
API 部分( 第10 章):这部分主要对Spark 的新老API进行对比,对新API进行介绍。
本书最后的附录中还包括一些内容:附录 A 介绍的 Spark 中最常用的工具类 Utils ;附录 B 是 Akka 的简介;附录 C 为 Jetty 的简介和工具类 JettyUtils 的介绍;附录 D 为 Metrics 库的简介和 Metrics 中部分 API 的介绍;附录 E 演示了 Hadoop1.0 版本中的 word count 例子;附录 F 介绍了工具类 CommandUtils 的常用方法;附录 G 是关于 Netty 的简介和工具类 NettyUtils 的介绍;附录 H 是对 Spark 中的 RPC 工具类 RpcUtils 的介绍。
为了降低读者阅读理解 Spark 源码的门槛,本书尽可能保留源码实现。本书以 Spark2.1.0 版本为主,有兴趣的读者也可按照本书的方式,阅读 Spark 的最新源码。
本书内容很多,限于笔者水平有限,书中内容难免有错误之处。在本书出版的任何时间,如果你对本书有任何问题或者意见都可以通过邮箱beliefer@163.com或者博客http://blog.csdn.net/beliefer联系我,给我提交你的建议或者想法,我本人将怀着一颗谦卑之心与大家共同进步。
感谢我们生活在信息时代,让我们有机会接触互联网与大数据。感谢父母,多年来在学习、工作及生活上的帮助与支持;感谢妻子在生活中的照顾和谦让。
感谢高婧雅编辑给予本书出版的大力支持与帮助。
感谢我在大数据路上的领路人——和仲;感谢热心于技术的王欢在对本书内容提出的宝贵建议;感谢对本书内容进行审阅的余尧尧和马晓波;感谢对本书内容有过帮助的读者朋友们。
纸质版售卖链接如下:
京东: https://item.jd.com/12302500.html
电子版售卖链接如下:
京东: https://e.jd.com/30389208.html