《深入理解SPARK:核心思想与源码分析》一书正式出版上市

自己牺牲了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

天猫:https://detail.tmall.com/item.htm?spm=a220m.1000858.1000725.1.7A0Q7O&id=525738928528&areaId=131000&cat_id=2&rn=11dc74780fc5d8a25b7b09e3d932fe5f&standard=1&user_id=217042976&is_b=1

亚马逊:http://www.amazon.cn/gp/product/B01A5G5LHK/sr=8-1/qid=1452505597/ref=olp_product_details?ie=UTF8&me=&qid=1452505597&sr=8-1

 

为了让大家对本书有个大致了解,这里将本书的前言及目录附上:

前言

为什么写这本书

         要回答这个问题,需要从我个人的经历说起。说来惭愧,我第一次接触计算机是在高三。当时跟大家一起去网吧玩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)到火花(Saprk),足足有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的最新源码。

联系方式

         本书内容很多,限于笔者水平有限,书中内容难免有错误之处。在本书出版的任何时间,如果你对本书有任何问题或者意见都可以通过邮箱[email protected]或者博客http://www.cnblogs.com/jiaan-geng/联系我,给我提交你的建议或者想法,我本人将怀着一颗谦卑之心与大家共同进步。

致谢

         感谢苍天,让我生活在这样一个时代接触互联网和大数据;感谢父母,这么多年来,在学习、工作及生活上的帮助与支持;感谢妻子在生活中的照顾和谦让。

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

         感谢冰夷老大和王贲老大让我有幸加入阿里,接触大数据应用;感谢和仲对Galaxy和Garuda耐心细致的讲解以及对Spark的推荐;感谢张中在百忙之中给本书写评语;感谢周亮、澄苍、民瞻、石申、清无、少侠、征宇、三步、谢衣、晓五、法星、曦轩、九翎、峰阅、丁卯、阿末、紫丞、海炎、涵康、云飏、孟天、零一、六仙、大知、井凡、隆君、太奇、晨炫、既望、宝升、都灵、鬼厉、归钟、梓撤、昊苍、水村、惜冰、惜陌、元乾等同学在工作上的支持和帮助。

耿嘉安

北京

时间: 2016-01-11

《深入理解SPARK:核心思想与源码分析》一书正式出版上市的相关文章

《深入理解Spark:核心思想与源码分析》——2.3节Spark基本设计思想

2.3 Spark基本设计思想2.3.1 Spark模块设计 整个Spark主要由以下模块组成: Spark Core:Spark的核心功能实现,包括:SparkContext的初始化(Driver Application通过SparkContext提交).部署模式.存储体系.任务提交与执行.计算引擎等. Spark SQL:提供SQL处理能力,便于熟悉关系型数据库操作的工程师进行交互查询.此外,还为熟悉Hadoop的用户提供Hive SQL处理能力. Spark Streaming:提供流式计

《深入理解Spark:核心思想与源码分析》——第1章环境准备

第1章 环 境 准 备 凡事豫则立,不豫则废:言前定,则不跲:事前定,则不困. -<礼记·中庸> 本章导读 在深入了解一个系统的原理.实现细节之前,应当先准备好它的源码编译环境.运行环境.如果能在实际环境安装和运行Spark,显然能够提升读者对于Spark的一些感受,对系统能有个大体的印象,有经验的技术人员甚至能够猜出一些Spark采用的编程模型.部署模式等.当你通过一些途径知道了系统的原理之后,难道不会问问自己:"这是怎么做到的?"如果只是游走于系统使用.原理了解的层面,

《深入理解Spark:核心思想与源码分析》——第3章SparkContext的初始化

第3章 SparkContext的初始化 道生一, 一生二, 二生三, 三生万物. -<道德经> 本章导读 SparkContext的初始化是Driver应用程序提交执行的前提,本章内容以local模式为主,并按照代码执行顺序讲解,这将有助于首次接触Spark的读者理解源码.读者朋友如果能边跟踪代码,边学习本章内容,也许是快速理解SparkContext初始化过程的便捷途径.已经熟练使用Spark的开发人员可以选择跳过本章内容. 本章将在介绍SparkContext初始化过程的同时,向读者介绍

《深入理解Spark:核心思想与源码分析》——1.4节Spark源码编译与调试

1.4 Spark源码编译与调试 1.下载Spark源码 首先,访问Spark官网http://spark.apache.org/,如图1-18所示. 2.构建Scala应用 使用cmd命令行进到Spark根目录,执行sbt命令.会下载和解析很多jar包,要等很长时间,笔者大概花了一个多小时才执行完. 3.使用sbt生成Eclipse工程文件 等sbt提示符(>)出现后,输入Eclipse命令,开始生成Eclipse工程文件,也需要花费很长时间,笔者本地大致花了40分钟.完成时的状况如图1-21

《深入理解Spark:核心思想与源码分析》——3.1节SparkContext概述

3.1 SparkContext概述 Spark Driver用于提交用户应用程序,实际可以看作Spark的客户端.了解Spark Driver的初始化,有助于读者理解用户应用程序在客户端的处理过程. Spark Driver的初始化始终围绕着SparkContext的初始化.SparkContext可以算得上是所有Spark应用程序的发动机引擎,轿车要想跑起来,发动机首先要启动.SparkContext初始化完毕,才能向Spark集群提交任务.在平坦的公路上,发动机只需以较低的转速.较低的功率

《深入理解Spark:核心思想与源码分析》——1.5节小结

1.5 小结 本章通过引导大家在Linux操作系统下搭建基本的执行环境,并且介绍spark-shell等脚本的执行,来帮助读者由浅入深地进行Spark源码的学习.由于目前多数开发工作都在Windows系统下进行,并且Eclipse有最广大的用户群,即便是一些开始使用IntelliJ的用户对Eclipse也不陌生,所以在Windows环境下搭建源码阅读环境时,选择这些最常用的工具,能降低读者的学习门槛,并且替大家节省时间.

《深入理解Spark:核心思想与源码分析》——2.2节Spark基础知识

2.2 Spark基础知识 1.版本变迁 经过4年多的发展,Spark目前的版本是1.4.1.我们简单看看它的版本发展过程. 1)Spark诞生于UCBerkeley的AMP实验室(2009). 2)Spark正式对外开源(2010年). 3)Spark 0.6.0版本发布(2012-10-15),进行了大范围的性能改进,增加了一些新特性,并对Standalone部署模式进行了简化. 4)Spark 0.6.2版本发布(2013-02-07),解决了一些bug,并增强了系统的可用性. 5)Spa

《深入理解Spark:核心思想与源码分析》——3.6节创建任务调度器TaskScheduler

3.6 创建任务调度器TaskScheduler TaskScheduler也是SparkContext的重要组成部分,负责任务的提交,并且请求集群管理器对任务调度.TaskScheduler也可以看做任务调度的客户端.创建TaskScheduler的代码如下. private[spark] var (schedulerBackend, taskScheduler) = SparkContext.createTaskScheduler(this, master) createTaskSchedu

《深入理解Spark:核心思想与源码分析》——2.4节Spark基本架构

2.4 Spark基本架构从集群部署的角度来看,Spark集群由以下部分组成:Cluster Manager:Spark的集群管理器,主要负责资源的分配与管理.集群管理器分配的资源属于一级分配,它将各个Worker上的内存.CPU等资源分配给应用程序,但是并不负责对Executor的资源分配.目前,Standalone.YARN.Mesos.EC2等都可以作为Spark的集群管理器.Worker:Spark的工作节点.对Spark应用程序来说,由集群管理器分配得到资源的Worker节点主要负责以

《深入理解Spark:核心思想与源码分析》——3.7节创建和启动DAGScheduler

3.7 创建和启动DAGSchedulerDAGScheduler主要用于在任务正式交给TaskSchedulerImpl提交之前做一些准备工作,包括:创建Job,将DAG中的RDD划分到不同的Stage,提交Stage,等等.创建DAG-Scheduler的代码如下. @volatile private[spark] var dagScheduler: DAGScheduler = _ dagScheduler = new DAGScheduler(this) DAGScheduler的数据结