编辑推荐

适读人群:《Spark内核设计的艺术:架构设计与实现》主要适合于以下读者:1.想要学习Scala语言的开发人员2.想要学习Spark原理的数据开发人员3.服务器和分布式系统开发人员4.分布式系统架构师5.Spark集群运维、部署及性

多位专家联袂推荐,360大数据专家撰写,剖析Spark2.1.0架构与实现精髓

细化到方法级,提炼出多个流程图,立体呈现架构、环境、调度、存储、计算、部署、API七大核心设计

内容简介

多位专家联袂推荐,360大数据专家撰写,剖析Spark2.1.0架构与实现精髓。细化到方法级,提炼出多个流程图,立体呈现架构、环境、调度、存储、计算、部署、API七大核心设计。《Spark内核设计的艺术:架构设计与实现》一共有10章内容,主要包括以下部分。

准备部分:介绍Spark的环境搭建和基本原理,有效降低了读者进入Spark世界的门槛,同时对Spark背景知识及整体设计能有宏观的认识。

基础部分:介绍Spark的基础设施(包括配置、RPC、度量等)、初始化、执行环境等内容,使读者深入理解RPC框架的设计、执行环境功能,是了解核心内容的前提。

核心部分:该部分是Spark*为核心的部分,涵盖存储体系、调度系统、计算引擎、部署模式等。读者将充分了解Spark的数据处理与实现细节,透视本质,是进行定制化、性能优化、精准排查的基础,学习和工作更加高效。

API部分:这部分主要对Spark的新老API进行对比,对新API进行简单介绍。

作者简介

耿嘉安10余年IT行业相关经验。先后就职于阿里巴巴、艺龙、360,专注于开源和大数据领域。在大量的工作实践中,对J2EE、JVM、Tomcat、Spring、Hadoop、Spark、MySQL、Redis都有深入研究,尤其喜欢剖析开源项目的源码实现。早期从事J2EE企业级应用开发,对Java相关技术有独到见解。著有《深入理解Spark:核心思想与源码分析》一书。

目录

目录Contents
Spark内核设计的艺术:架构设计与实现》赞誉
前言
第1章 环境准备1
1.1 运行环境准备2
1.1.1 安装JDK2
1.1.2 安装Scala2
1.1.3 安装Spark3
1.2 Spark初体验4
1.2.1 运行spark-shell4
1.2.2 执行wordcount5
1.2.3 剖析spark-shell9
1.3 阅读环境准备14
1.3.1 安装SBT15
1.3.2 安装Git15
1.3.3 安装EclipseScalaIDE插件15
1.4 Spark源码编译与调试17
1.5 小结23
第2章 设计理念与基本架构24
2.1 初识Spark25
2.1.1 HadoopMRv1的局限25
2.1.2 Spark的特点26
2.1.3Spark使用场景28
2.2 Spark基础知识29
2.3 Spark基本设计思想31
2.3.1 Spark模块设计32
2.3.2 Spark模型设计34
2.4 Spark基本架构36
2.5 小结38
第3章 Spark基础设施39
3.1 Spark配置40
3.1.1 系统属性中的配置40
3.1.2 使用SparkConf配置的API41
3.1.3 克隆SparkConf配置42
3.2 Spark内置RPC框架42
3.2.1 RPC配置TransportConf45
3.2.2 RPC客户端工厂Transport-ClientFactory47
3.2.3 RPC服务端TransportServer53
3.2.4 管道初始化56
3.2.5 TransportChannelHandler详解57
3.2.6 服务端RpcHandler详解63
3.2.7 服务端引导程序Transport-ServerBootstrap68
3.2.8 客户端TransportClient详解71
3.3 事件总线78
3.3.1 ListenerBus的继承体系79
3.3.2 SparkListenerBus详解80
3.3.3 LiveListenerBus详解83
3.4 度量系统87
3.4.1 Source继承体系87
3.4.2 Sink继承体系89
3.5 小结92
第4章 SparkContext的初始化93
4.1 SparkContext概述94
4.2 创建Spark环境97
4.3 SparkUI的实现100
4.3.1 SparkUI概述100
4.3.2 WebUI框架体系102
4.3.3 创建SparkUI107
4.4 创建心跳接收器111
4.5 创建和启动调度系统112
4.6 初始化块管理器BlockManager114
4.7 启动度量系统114
4.8 创建事件日志监听器115
4.9 创建和启动ExecutorAllocation-Manager116
4.10 ContextCleaner的创建与启动120
4.10.1 创建ContextCleaner120
4.10.2 启动ContextCleaner120
4.11 额外的SparkListener与启动事件总线122
4.12 Spark环境更新123
4.13 SparkContext初始化的收尾127
4.14 SparkContext提供的常用方法128
4.15 SparkContext的伴生对象130
4.16 小结131
第5章 Spark执行环境132
5.1 SparkEnv概述133
5.2 安全管理器SecurityManager133
5.3 RPC环境135
5.3.1 RPC端点RpcEndpoint136
5.3.2 RPC端点引用RpcEndpointRef139
5.3.3 创建传输上下文TransportConf142
5.3.4 消息调度器Dispatcher142
5.3.5 创建传输上下文Transport-Context154
5.3.6 创建传输客户端工厂Transport-ClientFactory159
5.3.7 创建TransportServer160
5.3.8 客户端请求发送162
5.3.9 NettyRpcEnv中的常用方法173
5.4 序列化管理器SerializerManager175
5.5 广播管理器BroadcastManager178
5.6 map任务输出跟踪器185
5.6.1 MapOutputTracker的实现187
5.6.2 MapOutputTrackerMaster的实现原理191
5.7 构建存储体系199
5.8 创建度量系统201
5.8.1 MetricsCon?g详解203
5.8.2 MetricsSystem中的常用方法207
5.8.3 启动MetricsSystem209
5.9 输出提交协调器211
5.9.1 OutputCommitCoordinator-Endpoint的实现211
5.9.2 OutputCommitCoordinator的实现212
5.9.3 OutputCommitCoordinator的工作原理216
5.10 创建SparkEnv217
5.11 小结217
第6章 存储体系219
6.1 存储体系概述220
6.1.1 存储体系架构220
6.1.2 基本概念222
6.2 Block信息管理器227
6.2.1 Block锁的基本概念227
6.2.2 Block锁的实现229
6.3 磁盘Block管理器234
6.3.1 本地目录结构234
6.3.2 DiskBlockManager提供的方法236
6.4 磁盘存储DiskStore239
6.5 内存管理器242
6.5.1 内存池模型243
6.5.2 StorageMemoryPool详解244
6.5.3 MemoryManager模型247
6.5.4 Uni?edMemoryManager详解250
6.6 内存存储MemoryStore252
6.6.1 MemoryStore的内存模型253
6.6.2 MemoryStore提供的方法255
6.7 块管理器BlockManager265
6.7.1 BlockManager的初始化265
6.7.2 BlockManager提供的方法266
6.8 BlockManagerMaster对Block-Manager的管理285
6.8.1 BlockManagerMaster的职责285
6.8.2 BlockManagerMasterEndpoint详解286
6.8.3 BlockManagerSlaveEndpoint详解289
6.9 Block传输服务290
6.9.1 初始化NettyBlockTransfer-Service291
6.9.2 NettyBlockRpcServer详解292
6.9.3 Shuf?e客户端296
6.10 DiskBlockObjectWriter详解305
6.11 小结308
第7章 调度系统309
7.1 调度系统概述310
7.2 RDD详解312
7.2.1 为什么需要RDD312
7.2.2 RDD

前言/序言

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

其他推荐