自己牺牲了7个月的周末和下班空闲时间,通过研究Spark源码和原理,总结整理的《深入理解Spark:核心思想与源码分析》一书现在已经正式出版上市,目前亚马逊、京东、当当、天猫等网站均有销售,欢迎感兴趣的同学购买。我开始研究源码时的Spark版本是1.2.0,经过7个多月的研究和出版社近4个月的流程,Spark自身的版本迭代也很快,如今最新已经是1.6.0。目前市面上另外2本源码研究的Spark书籍的版本分别是0.9.0版本和1.2.0版本,看来这些书的作者都与我一样,遇到了这种问题。由于研究和出版都需要时间,所以不能及时跟上Spark的脚步,还请大家见谅。但是Spark核心部分的变化相对还是很少的,如果对版本不是过于追求,依然可以选择本书。
京东:http://item.jd.com/11846120.html
当当:http://product.dangdang.com/23838168.html
为了让大家对本书有个大致了解,这里将本书的前言及目录附上:
前言
为什么写这本书
要回答这个问题,需要从我个人的经历说起。说来惭愧,我第一次接触计算机是在高三。当时跟大家一起去网吧玩CS,跟身边的同学学怎么“玩”。正是通过这种“玩”的过程,让我了解到计算机并没有那么神秘,它也只是台机器,用起来似乎并不比打开电视机复制多少。高考填志愿的时候,凭着直觉“糊里糊涂”就选择了计算机专业。等到真正学习计算机课程的时候却又发现,它其实很难!
早在2004年,还在学校的我跟很多同学一样,喜欢看Flash,也喜欢谈论Flash甚至做Flash。感觉Flash正如它的名字那样“闪光”。那些年,在学校里,知道Flash的人可要比知道Java的人多得多,这说明当时的Flash十分火热。此外Oracle也成为关系型数据库里的领军人物,很多人甚至觉得懂Oracle要比懂Flash、Java及其它数据库要厉害得多!
2007年,笔者刚刚参加工作不久。那时Struts1、Spring、Hibernate几乎可以称为那些用Java作为开发语言的软件公司的三驾马车。很快随着Struts2的诞生,很快替代了Struts1的地位,让我第一次意识到IT领域的技术更新竟然如此之快!随着很多传统软件公司向互联网公司转型,更让人吃惊的是,当初那个勇于技术更新的年轻人Gavin King,也许很难想象他创造的Hibernate也难以确保其地位,iBATIS诞生了!
2010年,有关Hadoop的技术图书涌入中国,当时很多公司用它只是为了数据统计、数据挖掘或者搜索。一开始,人们对于Hadoop的认识和使用可能相对有限。大约2011年的时候,关于云计算的概念在网上吵得火热,当时依然在做互联网开发的我,对其只是“道听途说”。后来跟同事借了一本有关云计算的书,回家挑着看了一些内容,之后什么也没有弄到手,怅然若失!上世纪60年代,美国的军用网络作为互联网的雏形,很多内容已经与云计算中的某些说法相类似。到上世纪80年代,互联网就已经开启了云计算,为什么如今又要重提这样的概念?这个问题笔者可能回答不了,还是交给历史吧。
2012年,国内又呈现出大数据热的态势。从国家到媒体、教育、IT等几乎所有领域,人人都在谈大数据。我的亲戚朋友中,无论老师、销售还是工程师们都可以对大数据谈谈自己的看法。我也找来一些Hadoop的书籍进行学习,希望能在其中探索到大数据的味道。
有幸在工作过程中接触到阿里的开放数据处理服务(Open Data Processing Service, 简称ODPS),并且基于ODPS与其他小伙伴一起构建阿里的大数据商业解决方案——御膳房。去杭州出差的过程中,有幸认识和仲,跟他学习了阿里的实时多维分析平台——Garuda和实时计算平台——Galaxy的部分知识。和仲推荐我阅读Spark的源码,这样会对实时计算及流式计算有更深入的了解。2015年春节期间,自己初次上网查阅Spark的相关资料学习,开始研究Spark源码。还记得那时只是出于对大数据的热爱,想使自己在这方面的技术能力有所提升。
从阅读Hibernate源码开始,到后来阅读Tomcat、Spring的源码,随着挖掘源码,从学习源码的过程中成长,我对源码阅读也越来越感兴趣。随着对Spark源码阅读的深入,发现很多内容从网上找不到答案,只能自己硬啃了。随着自己的积累越来越多,突然有天发现,我所总结的这些内容好像可以写成一本书了!从闪光(Flash)到火花(Spark),足足有11个年头了。无论是Flash、Java,还是Spring、iBATIS我一直扮演着一个追随者,我接受这些书籍的洗礼,从未给予。如今我也是Spark的追随者,不同的是,我不再只想简单的攫取,还要给予。
最后还想说下2016年是我从事IT工作的第十个年头,此书特别作为送给自己的十周年礼物。
本书的主要特色
- 按照源码分析的习惯设计,从脚本分析到初始化再到核心内容,最后介绍Spark的扩展内容。整个过程遵循由浅入深,由深到广的基本思路。
- 本书涉及的所有内容都有相应的例子,以便于对源码的深入研究能有更好的理解。
- 本书尽可能的用图来展示原理,加速读者对内容的掌握。
- 本书讲解的很多实现及原理都值得借鉴,能帮助读者提升架构设计、程序设计等方面的能力。
- 本书尽可能保留较多的源码,以便于初学者能够在脱离办公环境的地方(如地铁、公交),也能轻松阅读。
本书面向的读者
源码阅读是一项苦差事,人力和时间成本都很高,尤其是对于Spark陌生或者刚刚开始学习的人来说,难度可想而知。本书尽可能保留源码,使得分析过程不至于产生跳跃感,目的是降低大多数人的学习门槛。如果你是从事IT工作1~3年的新人或者希望开始学习Spark核心知识的人来说,本书非常适合你。如果你已经对Spark有所了解或者已经使用它,还想进一步提高自己,那么本书更适合你。
如果你是一个开发新手,对Java、Linux等基础知识不是很了解的话,本书可能不太适合你。如果你已经对Spark有深入的研究,本书也许可以作为你的参考资料。
总体说来,本书适合以下人群:
- 想要使用Spark,但对Spark实现原理不了解,不知道怎么学习的人;
- 大数据技术爱好者,以及想深入了解Spark技术内部实现细节的人;
- 有一定Spark使用基础,但是不了解Spark技术内部实现细节的人;
- 对性能优化和部署方案感兴趣的大型互联网工程师和架构师;
- 开源代码爱好者,喜欢研究源码的同学可以从本书学到一些阅读源码的方式方法。
本书不会教你如何开发Spark应用程序,只是拿一些经典例子演示。本书会简单介绍Hadoop MapReduce、Hadoop YARN、Mesos、Tachyon、ZooKeeper、HDFS、Amazon S3,但不会过多介绍这些等框架的使用,因为市场上已经有丰富的这类书籍供读者挑选。本书也不会过多介绍Scala、Java、Shell的语法,读者可以在市场上选择适合自己的书籍阅读。本书实际适合那些想要破解一个个潘多拉魔盒的人!
如何阅读本书
本书分为三大部分(不包括附录):
第一部分为准备篇(第1 ~ 2章),简单介绍了Spark的环境搭建和基本原理,帮助读者了解一些背景知识。
第二部分为核心设计篇(第3 ~ 7章),着重讲解SparkContext的初始化、存储体系、任务提交与执行、计算引擎及部署模式的原理和源码分析。
第三部分为扩展篇(第8 ~ 11章),主要讲解基于Spark核心的各种扩展及应用,包括:SQL处理引擎、Hive处理、流式计算框架Spark Streaming、图计算框架GraphX、机器学习库MLlib等内容。
本书最后还添加了几个附录,包括:附录A介绍的Spark中最常用的工具类Utils;附录B是Akka的简介与工具类AkkaUtils的介绍;附录C为Jetty的简介和工具类JettyUtils的介绍;附录D为Metrics库的简介和测量容器MetricRegistry的介绍;附录E演示了Hadoop1.0版本中的word count例子;附录F 介绍了工具类CommandUtils的常用方法;附录G是关于Netty的简介和工具类NettyUtils的介绍;附录H列举了笔者编译Spark源码时遇到的问题及解决办法。
为了降低读者阅读理解Spark源码的门槛,本书尽可能保留源码实现,希望读者能够怀着一颗好奇的心,Spark当前很火热,其版本更新也很快,本书以Spark 1.2.3版本为主,有兴趣的读者也可按照本书的方式,阅读Spark的最新源码。
联系方式
本书内容很多,限于笔者水平有限,书中内容难免有错误之处。在本书出版的任何时间,如果你对本书有任何问题或者意见都可以通过邮箱beliefer@163.com或者博客http://www.cnblogs.com/jiaan-geng/联系我,给我提交你的建议或者想法,我本人将怀着一颗谦卑之心与大家共同进步。
致谢
感谢苍天,让我生活在这样一个时代接触互联网和大数据;感谢父母,这么多年来,在学习、工作及生活上的帮助与支持;感谢妻子在生活中的照顾和谦让。
感谢杨福川编辑和高婧雅编辑给予本书出版的大力支持与帮助。
感谢冰夷老大和王贲老大让我有幸加入阿里,接触大数据应用;感谢和仲对Galaxy和Garuda耐心细致的讲解以及对Spark的推荐;感谢张中在百忙之中给本书写评语;感谢周亮、澄苍、民瞻、石申、清无、少侠、征宇、三步、谢衣、晓五、法星、曦轩、九翎、峰阅、丁卯、阿末、紫丞、海炎、涵康、云飏、孟天、零一、六仙、大知、井凡、隆君、太奇、晨炫、既望、宝升、都灵、鬼厉、归钟、梓撤、昊苍、水村、惜冰、惜陌、元乾等同学在工作上的支持和帮助。
耿嘉安
北京