Spark技术内幕
出版信息
张安站 / 机械工业出版社 / 2015-9-1
内容简介
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