具体描述
Spark是不断壮大的大数据分析解决方案家族中备受关注的新增成员。它不仅为分布式数据集的处理提供一个有效框架,而且以高效的方式处理分布式数据集。它支持实时处理、流处理和批处理,提供了AllinOne的统一解决方案,使得Spark极具竞争力。
本书以源码为基础,深入分析Spark内核的设计理念和架构实现,系统讲解各个核心模块的实现,为性能调优、二次开发和系统运维提供理论支持;本文最后以项目实战的方式,系统讲解生产环境下Spark应用的开发、部署和性能调优。
作者简介
张安站,2008年本科毕业于天津大学,2011年研究生毕业于南开大学,毕业后加入EMC中国卓越研发集团,从事商业存储系统控制模块的研发。2014年7月加入百度上海研发中心,从事分布式系统架构相关工作,当前负责NLP Cloud(为公司内用户提供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
· · · · · · (收起)
读后感
用户评价
这本书的文笔和结构设计,展现了作者深厚的学术功底和卓越的沟通能力。它不像很多技术书籍那样,堆砌着生硬的术语,而是用一种近乎散文的流畅感,将技术细节娓娓道来。我常常在阅读过程中,会因为某个精妙的比喻或恰到好处的类比而会心一笑。作者在构建知识体系时,展现了极高的智慧,信息的组织方式非常巧妙,总能在不经意间将看似不相关的概念联系起来,形成一个有机的整体。这种高屋建瓴的视角,让我得以跳出具体的代码实现,去思考整个系统的架构之美。阅读过程是享受,而不是负担,这在技术书籍中是难能可贵的体验。
从排版和装帧来看,出版方也确实下了不少功夫。纸张的质感、字体的选择,都让人在长时间阅读时感到舒适,眼睛不容易疲劳。更重要的是,图表的质量非常高,那些复杂的架构图和流程图,线条清晰,注释明确,极大地辅助了对抽象概念的理解。我注意到,即便是那些最复杂的流程图,也通过巧妙的颜色区分和层次划分,变得一目了然,这无疑是提升阅读效率的关键因素。好的内容需要好的载体来承载,这本书在硬件和软件的结合上做到了极高的水准,充分体现了对读者的尊重,让整个学习体验从开始到结束都保持着一种高品质的享受。
我得说,这本书的实践指导性实在是太强了,简直就是一本操作手册,而不是枯燥的理论说教。每当遇到一个技术难点,翻开书本,总能找到最贴近实际的解决方案和代码示例。我试着按照书中的步骤搭建了几次实验环境,每一次都取得了预期的效果,这极大地增强了我的信心。与其他同类书籍相比,它在“如何做”的层面做得尤为出色,提供的配置清单和调试技巧简直是救命稻草。这种注重实战的风格,非常适合那些需要在短时间内快速掌握某项技能的工程师。书中的案例分析也非常贴合工业界的真实场景,让我能提前预见到在实际项目中可能遇到的陷阱,并提前做好准备。
这本书在对前沿技术趋势的洞察力方面,表现得非常敏锐和超前。它不仅仅是在描述当前流行的技术栈,更是在探讨未来可能的发展方向,以及支撑这些方向的底层逻辑。我尤其欣赏作者对“为什么是这样”的追问,而不是仅仅停留在“现在是这样”的描述。这种前瞻性的分析,使得这本书的生命周期得以延长,即使技术在不断迭代,其中的核心思想依然具有指导意义。它促使我开始用一种更具批判性的眼光去看待新的工具和框架,不再盲目跟风,而是去探究其背后的价值主张。对于希望走在技术前沿的读者来说,这本书提供了绝佳的思考素材。
这本书的叙述方式真是引人入胜,作者仿佛带着我们走进了一个全新的技术世界,每一个章节都像是一扇通往更深层次理解的大门。我特别欣赏它对基础概念的梳理,那种层层递进的逻辑推导,让那些原本看似高深莫测的理论,变得清晰可见。读完后,我感觉自己对这个领域不再是停留在表面的了解,而是有了一种扎实的、可以深入实践的知识框架。特别是它在处理复杂算法时的耐心和细致,让人感到非常受用。作者没有满足于简单地罗列事实,而是深入挖掘了背后的设计哲学,这对于希望成为专家的读者来说,是极其宝贵的财富。那种将复杂的工程问题解构为可管理模块的能力,在书中得到了淋漓尽致的体现,读来让人茅塞顿开。
做个框架式的入口是可以的,但是后面几章越来越水,有些内容基本都是过时的,怒给3星半
对于学习Spark源码有一定的帮助,但是要学习深入,自己啃源代码是必不可少的。
在京东上购买的电子书。因为代码排版不好,影响读者阅读理解代码。后面几章的内容含糊不清,没有深入分析,更多的是直接粘贴源码。个别语句不通顺,不够严谨。书里面使用的版本较老,和我手上的源码比较,个别模块的实现方式,已经不同。不过,看这本书还是可以基本理解Spark的思想。
总的来说中规中矩吧。前几章讲得还算是清楚,后面开始大段大段的贴代码了,许多值得展开的地方也没有详细讲解。
一本类似于技术博客的书籍,想用200页讲明白Spark技术内幕还是很有难度的