Spark内核设计的艺术:架构设计与实现
上QQ阅读APP看书,第一时间看更新

前言

为什么写这本书

给本书写前言时,让我想起了两年前给《深入理解Spark:核心思想与源码分析》该书由机械工业出版社出版,书号978-7-111-52234-8。一书写前言的经历。我不禁想起崔护的《题都城南庄》这首诗,诗的内容是:

去年今日此门中,人面桃花相映红。

人面不知何处去,桃花依旧笑春风。

从核心思想和架构来看,Spark依然是那个Spark,但是我已经找了一个新的“东家”。我的年龄不知不觉中又长了两岁,Spark也在大数据领域从“新贵”变成了“老人”。Spark的版本从0.x.x到2.x.x基本上也是用了两年时间。

自从《深入理解Spark:核心思想与源码分析》一书出版后,引起了一些市场反响,更难得的是得到了很多读者的反馈。一些热心的读者通过微信或者邮件向我指出了书中内容的很多不足之处,包括错别字、错误的描述、代码分析有点像流水账、提纲挈领的内容偏少、代码版本过低等。一些错误在修订的版本中得到了解决,有些修正的内容则通过单独写博客来补充。在与读者的沟通过程中,也纠正了我对一些问题的理解偏差。再次深深地感谢广大读者的支持与帮助!

一些读者对《深入理解Spark:核心思想与源码分析》一书的内容非常肯定,希望能够出第2版,高婧雅编辑也一再“怂恿”我,但是我一直没有写第2版的打算。我当时希望有人能够以更好的方式写一本介绍和分析Spark 2.0版本的源码分析书籍,因为我感觉之前的写作方式的确不是很好。在我心中一直有个矛盾:如果源码太少,源码分析的书籍将退化成单纯讲原理的书籍,对于想深入理解Spark实现的读者来说这是不够的;如果源码太多,又让人有堆砌代码或者“混”篇幅的感觉。很多源码分析的书只是简单说说接口或者方法的功能,让人始终有种“雾里看花”的感觉。所以我一直很期待能有更好的方式来写作源码分析类的书。

在一年多的等待中,我始终没有发现类似书籍的出现,于是我打算再做一次尝试。这次摈弃了《深入理解Spark:核心思想与源码分析》一书中按照代码执行流程分析的方式,改为先从整体上介绍一个系统,然后逐个分析每个组件的功能,最后将这些组件之间的关系用流程图的方式串联起来。本书的写作方式依然犯有代码过多的“毛病”,但我还是期待本书能带来一些新的气象。

本书的主要特色

按照源码分析的习惯设计,从脚本分析到初始化,再到核心内容。整个过程遵循由浅入深的基本思路。

每一章先对本章的内容有个总体介绍,然后深入分析各个组件的实现原理,最后将各个组件之间的关系通过执行流程来展现。

本书尽可能地用图来展示原理,以加速读者对内容的掌握。

本书讲解的很多实现及原理都值得借鉴,可以帮助读者提升架构设计、程序设计等方面的能力。

本书尽可能保留较多的源码,以便于初学者能够在脱离办公环境的地方(如地铁、公交等),也能轻松阅读。

读者对象

源码阅读是一项苦差事,人力和时间成本都很高,尤其对于刚刚接触Spark的人来说更是如此。本书尽可能保留源码,使得分析过程不至于产生跳跃感,目的是降低大多数人的学习门槛。如果你是从事IT工作1~3年的新人或者希望开始学习Spark的核心知识,本书非常适合你。如果你已经对Spark有所了解或者已经使用它,还想进一步提高自己,那么本书更适合你。如果你是一个开发新手,对Java、Linux等基础知识还不是很了解的话,本书可能不太适合你。如果你已经对Spark有深入的研究,本书也许可以作为你的参考资料。

总体来说,本书适合以下人群:

已经了解过Spark,但还想深入理解Spark实现原理的人;

大数据技术爱好者;

对性能优化和部署方案感兴趣的运维工程师与架构师;

开源代码爱好者,喜欢研究源码的同学可以通过本书学到一些阅读源码的方式、方法。

本书不会教你如何开发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演示了Hadoop 1.0版本中的word count例子;附录F介绍了工具类CommandUtils的常用方法;附录G是关于Netty的简介和工具类NettyUtils的介绍;附录H是对Spark中的RPC工具类RpcUtils的介绍。

为了降低读者阅读理解Spark源码的门槛,本书尽可能保留源码实现。本书以Spark 2.1.0版本为主,有兴趣的读者也可按照本书的方式,阅读Spark的最新源码。

勘误

本书内容很多,限于笔者水平有限,书中内容难免有错误之处。如果你对本书有任何问题或者意见,都可以通过邮箱beliefer@163.com或者博客http://blog.csdn.net/beliefer联系我,给我提交你的建议或者想法,我将怀着一颗谦卑之心与大家共同进步。

致谢

感谢我们生活在信息时代,让我们有机会接触互联网与大数据;感谢父母多年来在学习、工作及生活上的帮助与支持;感谢妻子在生活中的照顾和谦让。

感谢高婧雅编辑给予本书出版的大力支持与帮助。

感谢我在大数据路上的领路人——和仲;感谢热衷于技术的王欢对本书内容提出的宝贵建议;感谢对本书内容进行审阅的余尧尧和马晓波;感谢对本书内容有过帮助的读者朋友们。

耿嘉安