首页>参考读物>计算机科学与技术>计算机科学理论与基础知识

Spark技术内幕:深入解析Spark内核架构设计与实现原理
作者 : 张安站 著
丛书名 : 大数据技术丛书
出版日期 : 2015-09-08
ISBN : 978-7-111-50964-6
定价 : 49.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 215
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书以源码为基础,深入分析Spark内核的设计理念和架构实现,系统讲解各个核心模块的实现,为性能调优,二次开发和系统运维提供理论支持;本文最后以项目实战的方式,系统讲解生产环境下Spark应用的开发,部署和性能调优。

图书特色

多位Spark的贡献者和专家联袂推荐,详细剖析Spark内核各个模块并辅以相应源码解析的著作。以源码为基础,全面分析Spark内核各个模块的设计思想和实现原理,深入理解其内部运作机制乃至实现细节。帮助Spark领域的从业人员全面掌握Spark核心技术,进而在应用开发中做到游刃有余和性能调优时做到有的放矢。

在目前的大数据领域,Apache Spark无疑最受关注。越来越多的企业选择Spark作为大数据处理的核心框架。因此,除了熟悉Spark的编程模型之外,也非常有必要更加深入地理解Spark内核。本书详细剖析了Spark中的各个核心模块,并辅以相应的源码解析,使读者能更清晰地掌握Spark的来龙去脉。推荐Spark爱好者尤其是对Spark内核有兴趣的朋友阅读。
— 陈超(@CrazyJvm),七牛云技术总监,Spark布道者

在过去的两三年中,Spark凭借其简单灵活的编程接口以及高效的调度、计算和存储模型毫无争议地成为大数据领域中一个不可或缺的重要组成部分。随着Spark核心代码的日趋成熟,它在SQL/实时计算/机器学习/图计算等应用领域也迸发出强大的生命力。但是万变不离其宗,只有掌握了Spark核心模块的流程原理,在应用开发过程中才能做到游刃有余。本书作者通过详尽的代码分析,详细阐述了Spark核心模块各个功能组件的设计思想和工作原理,相信能成为读者学习Spark过程中的良师益友。
— 刘旭晖,蘑菇街资深架构师,Spark贡献者

Apache Spark已经成为大数据领域炙手可热的未来之星,对于那些想要在生产环境中实施Spark技术方案的相关技术人员,深入理解Spark基本原理、运作机制和工程细节是必不可少的技能要求。本书对Apache Spark底层核心组件进行了细致讲解,相信可以帮助读者更好地钻研分析Apache Spark应用的核心技术,进而在更高层面把控和解决生产环境中的实际问题。    
— 柴华,百度高级架构师,Spark布道者

Apache Spark已经大大简化了一体化大数据流水线的搭建,然而大数据领域固有的内在复杂性使得其研发、运维人员不仅需要掌握各基础组件的常规用法,还必须深入理解其内部运作机制乃至实现细节,这样才能对系统进行细致的调优、诊断和修正。本书针对Apache Spark的核心组件进行了细致剖析,相信可以令读者在钻研的路上事半功倍。
— 连城,DataBricks公司软件工程师

本书详细剖析了Spark核心引擎的源代码及其工作原理,内容翔实准确,也是我目前看到的一本比较全面解析Spark Core的不可多得的好书。特别是有志于Spark内核开发的研发人员,仔细阅读本书并研读代码,将起到事半功倍的效果。
— 孙元浩,星环科技创始人兼CTO


本书以源码为基础,深入分析Spark内核的设计理念和架构实现,系统讲解各个核心模块的实现,为性能调优、二次开发和系统运维提供理论支持,为更好地使用Spark Streaming、Spark SQL、GraphX和MLlib等奠定基础。

本书内容概述
第1章 Spark简介:介绍Spark的技术背景和特点,并且就架构给出整体概述;简单介绍Spark的生态圈。
第2章 Spark学习环境的搭建:介绍Spark源码如何获取和学习环境如何搭建。
第3章 RDD实现详解:介绍RDD的定义和Spark对于DAG(有向无环图)的实现,最后通过RDD计算的详细介绍,详细讲解了Spark对于计算的实现原理。
第4章 Scheduler模块详解:介绍任务调度的实现,包括如何通过DAG来生成计算任务,最后会通过“Word Count”来加深这个实现过程的理解。
第5章 Deploy模块详解:介绍Spark的运行模式,尤其是Standalone模式。Standalone作为Spark自身实现的资源管理和调度的模块,本章会详细介绍它的实现原理。
第6章 Executor模块详解:Executor是最终执行计算任务的单元,本章会详细介绍Executor的实现原理,包括Executor的分配,Task在Executor的详细执行过程。
第7章 Shuffle模块详解:介绍Spark对于Shuffle的实现原理,包括基于Hash和基于排序的。此外,还介绍了Shuffle Pluggable的框架,为需要实现特定Shuffle逻辑的读者介绍其实现原理。
第8章 Storage模块详解:详细介绍Spark的存储模块,在介绍了模块的详细架构后详细解析不同存储级别的实现细节。
第9章 企业应用概述:介绍Spark在百度、腾讯和阿里等国内著名互联网企业的应用现状。

2008年本科毕业于天津大学,2011年研究生毕业于南开大学,毕业后加入EMC中国卓越研发集团,从事商业存储系统控制模块的研发。2014年7月加入百度上海研发中心,从事分布式系统架构相关工作,当前负责NLP Cloud(为公司内用户提供NLP核心算法的云平台)和Sofa Cloud(为策略服务化提供一站式解决方案的云平台)两个计算方向。目前专注分布式资源管理和大数据处理平台等相关技术。

图书前言

诞生于2005年的Hadoop解决了大数据的存储和计算问题,已经成为大数据处理的事实标准。但是,随着数据规模的爆炸式增长和计算场景的丰富细化,使得Hadoop越来越难以满足用户的需求。针对不同的计算场景,开源社区和各大互联网公司也推出了各种大数据分析的平台,旨在满足特定应用场景下的计算需求。但是,众多的平台使得用户不得不为平台开发类似的策略,这增加了运维开发成本。
2009年诞生于AMPLab的Spark,它的设计目标就是为大数据的多种计算场景提供一个通用的计算引擎,同时解决大数据处理的4V难题,即Volume(海量)、Velocity(快速)、Variety(多样)、Value(价值)。正如Spark的核心作者之一的Ion Stoica所说,“The goal is to build a new generation of data analytics software,to be used across academia and industry。” Hadoop之父Doug Cutting也说过,MapReduce引擎将被Spark替代(Use of MapReduce engine for Big Data projects will decline,replaced by Apache Spark)。可以说,Spark自诞生之日起就得到了广泛的关注,也是近年来开源社区最活跃的项目之一。Spark 的1.X版本的每次发布,都包含了数百位贡献者的上千次提交。最新的版本是发布于2015年6月11日的1.4.0,是迄今为止Spark最大的一次版本发布,涵盖了210位开发者的贡献。
Spark得到了众多大数据公司的支持,这些公司包括Hortonworks、IBM、Intel、Cloudera、MapR、Pivotal和星环科技;Spark也被百度、阿里、腾讯、京东、携程、优酷土豆等互联网公司应用到多种不同的计算场景中,并且在实际的生产环境中获得了很多收益。当前百度的Spark已应用于凤巢、大搜索、直达号、百度大数据等业务;阿里利用GraphX构建了大规模的图计算和图挖掘系统,实现了很多生产系统的推荐算法;腾讯Spark集群达到8000台的规模,是当前已知的世界上最大的Spark集群。
但是,当前并没有一本系统介绍Spark内核实现原理的书,而Spark内核是Spark SQL、Spark Streaming、MLlib、GraphX等多个模块的基础,这些模块最终的计算执行都是由内核模块完成的。为了在应用开发中做到游刃有余,在性能调优时做到有的放矢,需要了解内核模块的实现原理。笔者从Spark 发布版本0.8.1时开始关注Spark,并深入学习内核模块的架构实现原理。Spark在1.0发布后,内核模块趋于稳定,虽然内核模块依旧会有不断地改进和完善,但是整体的设计思想和实现方法是不会变的,因此笔者决定为Spark社区的用户和关注者写一本书,详细介绍Spark内核模块的实现原理。最终,笔者基于Spark 1.2.0版本完成了本书。
写作是一件严肃的事情,同样是一份苦差事,尤其是在工作比较忙的时候。本书在半年前就完成了基本的框架,但是随后又对本书进行了多次修改和完善。笔者认为,对一本架构分析的书,一个最基本的要求就是基于源码如实描述系统的实现,能做到这点就是一本及格的书;如果能做到分析这个架构的好坏,指出架构改进的方案,那么就是一本质量比较好的书;如果能高屋建瓴地进行再次抽象,指出类似架构不同实现的优劣,抽象出一些理论,那么这就是一本质量上乘,可以当作教科书的书。我深知自己的能力水平,希望这本书最起码是一本及格的书,即能基于源码如实描述系统的实现,对那些希望深入学习Spark架构实现的同仁有所帮助。
目标读者
本书适合大数据领域的架构师、运维人员,尤其是Spark领域的从业人员阅读,也适合作为研究生和高年级的本科生大数据领域分布式架构具体实现原理的参考资料。
内容概述
第1章介绍了Spark的技术背景和特点,给出了架构的整体概述,并简单介绍了Spark的生态圈。
第2章介绍了Spark源码如何获取和学习环境如何搭建。
第3章是RDD的详细介绍,介绍了RDD的定义和Spark对于DAG的实现,最后通过RDD计算的详细介绍,讲解了Spark对于计算的实现原理。
第4章详细介绍任务调度的实现,包括如何通过DAG来生成计算任务,最后通过“Word Count”来加深对这个实现过程的理解。
第5章介绍了Spark的运行模式,尤其是Standalone模式。Standalone是Spark自身实现的资源管理和调度的模块,这里会详细介绍它的实现原理。
第6章是Executor模块的详细讲解。Executor是最终执行计算任务的单元,这章将详细介绍Executor的实现原理,包括Executor的分配、Task在Executor的详细执行过程。
第7章详细介绍了Spark对于Shuffle的实现原理,包括基于Hash和基于排序的实现。除了详细阐述基于Hash和排序的Shuffle写和Shuffle读之外,还介绍了Shuffle Pluggable框架,为需要实现特定Shuffle逻辑的读者介绍其实现原理。
第8章详细介绍了Spark的Storage模块,在详细介绍了模块的架构后详细解析了不同存储级别的实现细节。
第9章介绍了Spark在百度、腾讯和阿里等国内互联网领域的应用现状。
致谢
本书在写作的过程中,得到了很多朋友、同仁的帮助和支持,在此表示衷心感谢!
感谢七牛云的技术总监陈超先生、蘑菇街的资深架构师刘旭晖先生、百度公司的高级架构师柴华先生、Databricks软件工程师连城先生在百忙之中为本书审稿,并提出了很多宝贵的修改意见。尤其感谢星环科技的创始人兼CTO孙元浩先生对本书的完成给予了很多的支持,还在百忙之中为本书作序。感谢华为诺亚方舟实验室的董振华博士,在Spark上做机器学习方面给了我很多指导。
感谢百度上海研发中心网页搜索部的同事们。在一年多的工作中,笔者得到了很多同事的指导、支持和帮助,尤其感谢曲晶莹、吴永巍、汪韬、葛俊、刘桐仁、段雪涛、周波涛、马鑫云、李战平、杨大毛、朱晓阳、赵鹏程等。
感谢机械工业出版社的姚蕾编辑,她不但积极策划和推动本书的出版,还容忍我蜗牛般的写作速度;感谢她在这一年多的时间中给予的理解与支持。感谢机械工业出版社的李艺编辑为本书做了非常辛苦和专业的编辑工作。
还要感谢我的家人一直以来对我的支持和宽容。感谢父亲、母亲和三个姐姐,你们是我漫漫求学路的最强大支柱和后盾;感谢我的妻子王珊珊,不但在家庭方面付出很多,也为本书的顺利出版做出了很重要的贡献;感谢我的女儿,你的微笑是爸爸消除疲惫的良药。
联系方式
由于本书的写作都是在业余时间完成,加上笔者自身水平有限,错误在所难免,敬请读者谅解,如果有任何问题,可以通过下列方式与Spark的关注者和使用者进行交流沟通:
Spark架构实现原理交流QQ群:473842835
Spark用户使用交流QQ群:473853269
也可以直接与笔者联系:
邮箱:anzhsoft@gmail.com
新浪微博:@anzhsoft
个人博客:http://blog.csdn.net/anzhsoft

上架指导

计算机科学/大数据分析与处理

封底文字

在目前的大数据领域,Apache Spark无疑最受关注。越来越多的企业选择Spark作为大数据处理的核心框架。因此,除了熟悉Spark的编程模型之外,也非常有必要更加深入地理解Spark内核。本书详细剖析了Spark中的各个核心模块,并辅以相应的源码解析,使读者能更清晰地掌握Spark的来龙去脉。推荐Spark爱好者尤其是对Spark内核有兴趣的朋友阅读。
      陈 超(@CrazyJvm),七牛云技术总监,Spark布道者

在过去的两三年中,Spark凭借其简单灵活的编程接口以及高效的调度、计算和存储模型毫无争议地成为大数据领域中一个不可或缺的重要组成部分。随着Spark核心代码的日趋成熟,它在SQL/实时计算/机器学习/图计算等应用领域也迸发出强大的生命力。但是万变不离其宗,只有掌握了Spark核心模块的流程原理,在应用开发过程中才能做到游刃有余。本书作者通过详尽的代码分析,详细阐述了Spark核心模块各个功能组件的设计思想和工作原理,相信能成为读者学习Spark过程中的良师益友。
刘旭晖,蘑菇街资深架构师,Spark贡献者

Apache Spark已经成为大数据领域炙手可热的未来之星,对于那些想要在生产环境中实施Spark技术方案的相关技术人员,深入理解Spark基本原理、运作机制和工程细节是必不可少的技能要求。本书对Apache Spark底层核心组件进行了细致讲解,相信可以帮助读者更好地钻研分析Apache Spark应用的核心技术,进而在更高层面把控和解决生产环境中的实际问题。    
柴华,百度高级架构师,Spark布道者


Apache Spark已经大大简化了一体化大数据流水线的搭建,然而大数据领域固有的内在复杂性使得其研发、运维人员不仅需要掌握各基础组件的常规用法,还必须深入理解其内部运作机制乃至实现细节,这样才能对系统进行细致的调优、诊断和修正。本书针对Apache Spark的核心组件进行了细致剖析,相信可以令读者在钻研的路上事半功倍。
连城,DataBricks公司软件工程师

本书详细剖析了Spark核心引擎的源代码及其工作原理,内容翔实准确,也是我目前看到的一本比较全面解析Spark Core的不可多得的好书。特别是有志于Spark内核开发的研发人员,仔细阅读本书并研读代码,将起到事半功倍的效果。
孙元浩,星环科技创始人兼CTO

作者简介

张安站 著:张安站,2011年硕士毕业于南开大学,2008年学士毕业于天津大学。毕业后加入EMC中国卓越研发集团,从事商业存储系统控制模块的研发。2014年7月加入百度上海研发中心,从事式系统架构相关工作,当前负责NLPC(为公司内用户提供NLP核心算法的云平台)和Sofa Cloud(为策略服务化提供一站式解决方案的云平台)两个计算方向。工作之余关注开源社区分布式计算架构和存储系统相关的设计和实现原理等。

图书目录


前言
第1章 Spark简介1
1.1Spark的技术背景1
1.2Spark的优点2
1.3Spark架构综述4
1.4Spark核心组件概述5
1.4.1Spark Streaming5
1.4.2MLlib6
1.4.3Spark SQL7
1.4.4 GraphX8
1.5Spark的整体代码结构规模8
第2章 Spark学习环境的搭建9
2.1源码的获取与编译9
2.1.1源码获取9
2.1.2源码编译10
2.2构建Spark的源码阅读环境11
2.3小结15
第3章 RDD实现详解16
3.1概述16
3.2什么是RDD17
3.2.1RDD的创建19
3.2.2RDD的转换20
3.2.3 RDD的动作22
3.2.4RDD的缓存23
3.2.5RDD的检查点24
3.3RDD的转换和DAG的生成25
3.3.1RDD的依赖关系26
3.3.2DAG的生成30
3.3.3Word Count的RDD转换和DAG划分的逻辑视图30
3.4RDD的计算33
3.4.1Task简介33
3.4.2Task的执行起点33
3.4.3缓存的处理35
3.4.4checkpoint的处理37
3.4.5RDD的计算逻辑39
3.5RDD的容错机制39
3.6小结40
第4章 Scheduler 模块详解41
4.1模块概述41
4.1.1整体架构41
4.1.2Scheduler的实现概述43
4.2DAGScheduler实现详解45
4.2.1DAGScheduler的创建46
4.2.2Job的提交48
4.2.3Stage的划分49
4.2.4任务的生成54
4.3任务调度实现详解57
4.3.1TaskScheduler的创建57
4.3.2Task的提交概述58
4.3.3任务调度具体实现61
4.3.4Task运算结果的处理65
4.4Word Count调度计算过程详解72
4.5小结74
第5章 Deploy模块详解76
5.1 Spark运行模式概述76
5.1.1 local77
5.1.2Mesos78
5.1.3YARN82
5.2模块整体架构86
5.3消息传递机制详解87
5.3.1Master和Worker87
5.3.2Master和Client89
5.3.3Client和Executor91
5.4集群的启动92
5.4.1Master的启动92
5.4.2Worker的启动96
5.5集群容错处理98
5.5.1Master 异常退出98
5.5.2Worker异常退出99
5.5.3Executor异常退出101
5.6Master HA实现详解102
5.6.1Master启动的选举和数据恢复策略103
5.6.2集群启动参数的配置105
5.6.3Curator Framework简介 106
5.6.4ZooKeeperLeaderElectionAgent的实现109
5.7小结110
第6章 Executor模块详解112
6.1Standalone模式的Executor分配详解113
6.1.1SchedulerBackend创建AppClient114
6.1.2AppClient向Master注册Application116
6.1.3Master根据AppClient的提交选择Worker119
6.1.4Worker根据Master的资源分配结果创建Executor121
6.2Task的执行122
6.2.1依赖环境的创建和分发123
6.2.2任务执行125
6.2.3任务结果的处理128
6.2.4Driver端的处理130
6.3 参数设置131
6.3.1 spark.executor.memory131
6.3.2日志相关132
6.3.3spark.executor.heartbeatInterval132
6.4小结133
第7章 Shuffle模块详解134
7.1Hash Based Shuffle Write135
7.1.1Basic Shuffle Writer实现解析136
7.1.2存在的问题138
7.1.3Shuffle Consolidate Writer139
7.1.4小结140
7.2Shuffle Pluggable 框架141
7.2.1org.apache.spark.shuffle.ShuffleManager141
7.2.2org.apache.spark.shuffle.ShuffleWriter143
7.2.3org.apache.spark.shuffle.ShuffleBlockManager143
7.2.4org.apache.spark.shuffle.ShuffleReader144
7.2.5如何开发自己的Shuffle机制144
7.3Sort Based Write144
7.4Shuffle Map Task运算结果的处理148
7.4.1Executor端的处理148
7.4.2Driver端的处理150
7.5Shuffle Read152
7.5.1整体流程152
7.5.2数据读取策略的划分155
7.5.3本地读取156
7.5.4远程读取158
7.6性能调优160
7.6.1spark.shuffle.manager160
7.6.2spark.shuffle.spill162
7.6.3spark.shuffle.memoryFraction和spark.shuffle.safetyFraction162
7.6.4spark.shuffle.sort.bypassMergeThreshold 163
7.6.5spark.shuffle.blockTransferService 163
7.6.6spark.shuffle.consolidateFiles 163
7.6.7spark.shuffle.compress和 spark.shuffle.spill.compress164
7.6.8spark.reducer.maxMbInFlight165
7.7小结165
第8章 Storage模块详解167
8.1模块整体架构167
8.1.1整体架构167
8.1.2源码组织结构170
8.1.3Master 和Slave的消息传递详解173
8.2存储实现详解181
8.2.1存储级别181
8.2.2模块类图184
8.2.3org.apache.spark.storage.DiskStore实现详解186
8.2.4org.apache.spark.storage.MemoryStore实现详解188
8.2.5org.apache.spark.storage.TachyonStore实现详解189
8.2.6Block存储的实现190
8.3性能调优194
8.3.1spark.local.dir194
8.3.2spark.executor.memory194
8.3.3spark.storage.memoryFraction194
8.3.4spark.streaming.blockInterval195
8.4小结195
第9章 企业应用概述197
9.1Spark在百度197
9.1.1现状197
9.1.2百度开放云BMR的Spark198
9.1.3在Spark中使用Tachyon199
9.2Spark在阿里200
9.3Spark在腾讯200
9.4小结201

教学资源推荐
作者: Barry Wilkinson, Michael Allen
作者: 王晓东 著
作者: Ellis Horowitz, Sartaj Sahni, Sanguthevar Rajasekaran
作者: 许畅,冯洋,郑艳伟,陈鄞等
参考读物推荐
作者: 华诚科技 编著
作者: 陈锐 成建设 等编著
作者: 华诚科技 编著
作者: 华诚科技 编著