当前位置:首页 > 工业技术
深入理解Spark  核心思想与源码分析
深入理解Spark  核心思想与源码分析

深入理解Spark 核心思想与源码分析PDF电子书下载

工业技术

  • 电子书积分:15 积分如何计算积分?
  • 作 者:耿嘉安著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2016
  • ISBN:9787111522348
  • 页数:470 页
图书介绍:本书分为三大部分:第一部分为准备篇(第1~2章),简单介绍了Spark的环境搭建和基本原理,帮助读者了解一些背景知识。第二部分为核心设计篇(第3~7章),着重讲解SparkContext的初始化、存储体系、任务提交与执行、计算引擎及部署模式的原理和源码分析。第三部分为扩展篇(第8~11章),主要讲解基于Spark核心的各种扩展及应用,包括:SQL处理引擎、Hive处理、流式计算框架Spark Streaming、图计算框架GraphX、机器学习库MLlib等内容。
《深入理解Spark 核心思想与源码分析》目录

准备篇 2

第1章 环境准备 2

1.1 运行环境准备 2

1.1.1 安装JDK 3

1.1.2 安装Scala 3

1.1.3 安装Spark 4

1.2 Spark初体验 4

1.2.1 运行spark-shell 4

1.2.2 执行word count 5

1.2.3 剖析spark-shell 7

1.3 阅读环境准备 11

1.4 Spark源码编译与调试 13

1.5 小结 17

第2章 Spark设计理念与基本架构 18

2.1 初识Spark 18

2.1.1 Hadoop MRv1的局限 18

2.1.2 Spark使用场景 20

2.1.3 Spark的特点 20

2.2 Spark基础知识 20

2.3 Spark基本设计思想 22

2.3.1 Spark模块设计 22

2.3.2 Spark模型设计 24

2.4 Spark基本架构 25

2.5 小结 26

核心设计篇 28

第3章 SparkContext的初始化 28

3.1 SparkContext概述 28

3.2 创建执行环境SparkEnv 30

3.2.1 安全管理器SecurityManager 31

3.2.2 基于Akka的分布式消息系统ActorSystem 31

3.2.3 map任务输出跟踪器mapOutputTracker 32

3.2.4 实例化ShuffleManager 34

3.2.5 shuffle线程内存管理器ShuffleMemoryManager 34

3.2.6 块传输服务BlockTransferService 35

3.2.7 BlockManagerMaster介绍 35

3.2.8 创建块管理器BlockManager 36

3.2.9 创建广播管理器Broadcast-Manager 36

3.2.10 创建缓存管理器CacheManager 37

3.2.11 HTTP文件服务器HttpFile-Server 37

3.2.12 创建测量系统MetricsSystem 39

3.2.13 创建SparkEnv 40

3.3 创建metadataCleaner 41

3.4 SparkUI详解 42

3.4.1 listenerBus详解 43

3.4.2 构造JobProgressListener 46

3.4.3 SparkUI的创建与初始化 47

3.4.4 Spark UI的页面布局与展示 49

3.4.5 SparkUI的启动 54

3.5 Hadoop相关配置及Executor环境变量 54

3.5.1 Hadoop相关配置信息 54

3.5.2 Executor环境变量 54

3.6 创建任务调度器TaskScheduler 55

3.6.1 创建TaskSchedulerImpl 55

3.6.2 TaskSchedulerImpl的初始化 57

3.7 创建和启动DAGScheduler 57

3.8 TaskScheduler的启动 60

3.8.1 创建LocalActor 60

3.8.2 ExecutorSource的创建与注册 62

3.8.3 ExecutorActor的构建与注册 64

3.8.4 Spark自身ClassLoader的创建 64

3.8.5 启动Executor的心跳线程 66

3.9 启动测量系统MetricsSystem 69

3.9.1 注册Sources 70

3.9.2 注册Sinks 70

3.9.3 给Sinks增加Jetty的Servlet-ContextHandler 71

3.10 创建和启动ExecutorAllocation-Manager 72

3.11 ContextCleaner的创建与启动 73

3.12 Spark环境更新 74

3.13 创建DAGSchedulerSource和BlockManagerSource 76

3.14 将SparkContext标记为激活 77

3.15 小结 78

第4章 存储体系 79

4.1 存储体系概述 79

4.1.1 块管理器BlockManager的实现 79

4.1.2 Spark存储体系架构 81

4.2 shuffle服务与客户端 83

4.2.1 Block的RPC服务 84

4.2.2 构造传输上下文Transpor-tContext 85

4.2.3 RPC客户端工厂Transport-ClientFactory 86

4.2.4 Netty服务器TransportServer 87

4.2.5 获取远程shuffle文件 88

4.2.6 上传shuffle文件 89

4.3 BlockManagerMaster对Block-Manager的管理 90

4.3.1 BlockManagerMasterActor 90

4.3.2 询问Driver并获取回复方法 92

4.3.3 向BlockManagerMaster注册BlockManagerld 93

4.4 磁盘块管理器DiskBlockManager 94

4.4.1 DiskBlockManager的构造过程 94

4.4.2 获取磁盘文件方法getFile 96

4.4.3 创建临时Block方法create-TempShuffleBlock 96

4.5 磁盘存储DiskStore 97

4.5.1 NIO读取方法getBytes 97

4.5.2 NIO写入方法putBytes 98

4.5.3 数组写入方法putArray 98

4.5.4 Iterator写入方法putIterator 98

4.6 内存存储MemoryStore 99

4.6.1 数据存储方法putBytes 101

4.6.2 Iterator写入方法putIterator详解 101

4.6.3 安全展开方法unrollSafely 102

4.6.4 确认空闲内存方法ensureFree-Space 105

4.6.5 内存写入方法putArray 107

4.6.6 尝试写入内存方法tryToPut 108

4.6.7 获取内存数据方法getBytes 109

4.6.8 获取数据方法getValues 110

4.7 Tachyon存储TachyonStore 110

4.7.1 Tachyon简介 111

4.7.2 TachyonStore的使用 112

4.7.3 写入Tachyon内存的方法putIntoTachyonStore 113

4.7.4 获取序列化数据方法getBytes 113

4.8 块管理器BlockManager 114

4.8.1 移出内存方法dropFrom-Memory 114

4.8.2 状态报告方法reportBlockStatus 116

4.8.3 单对象块写入方法putSingle 117

4.8.4 序列化字节块写入方法putBytes 118

4.8.5 数据写入方法doPut 118

4.8.6 数据块备份方法replicate 121

4.8.7 创建DiskBlockObjectWriter的方法getDiskWriter 125

4.8.8 获取本地Block数据方法getBlockData 125

4.8.9 获取本地shuffle数据方法doGetLocal 126

4.8.10 获取远程Block数据方法doGetRemote 127

4.8.11 获取Block数据方法get 128

4.8.12 数据流序列化方法dataSerializeStream 129

4.9 metadataCleaner和broadcast-Cleaner 129

4.10 缓存管理器CacheManager 130

4.11 压缩算法 133

4.12 磁盘写入实现DiskBlockObject-Writer 133

4.13 块索引shuffle管理器Index-ShuffleBlockManager 135

4.14 shuffle内存管理器Shuffle-MemoryManager 137

4.15 小结 138

第5章 任务提交与执行 139

5.1 任务概述 139

5.2 广播Hadoop的配置信息 142

5.3 RDD转换及DAG构建 144

5.3.1 为什么需要RDD 144

5.3.2 RDD实现分析 146

5.4 任务提交 152

5.4.1 任务提交的准备 152

5.4.2 finalStage的创建与Stage的划分 157

5.4.3 创建Job 163

5.4.4 提交Stage 164

5.4.5 提交Task 165

5.5 执行任务 176

5.5.1 状态更新 176

5.5.2 任务还原 177

5.5.3 任务运行 178

5.6 任务执行后续处理 179

5.6.1 计量统计与执行结果序列化 179

5.6.2 内存回收 180

5.6.3 执行结果处理 181

5.7 小结 187

第6章 计算引擎 188

6.1 迭代计算 188

6.2 什么是shuffle 192

6.3 map端计算结果缓存处理 194

6.3.1 map端计算结果缓存聚合 195

6.3.2 map端计算结果简单缓存 200

6.3.3 容量限制 201

6.4 map端计算结果持久化 204

6.4.1 溢出分区文件 205

6.4.2 排序与分区分组 207

6.4.3 分区索引文件 209

6.5 reduce端读取中间计算结果 210

6.5.1 获取map任务状态 213

6.5.2 划分本地与远程Block 215

6.5.3 获取远程Block 217

6.5.4 获取本地Block 218

6.6 reduce端计算 219

6.6.1 如何同时处理多个map任务的中间结果 219

6.6.2 reduce端在缓存中对中间计算结果执行聚合和排序 220

6.7 map端与reduce端组合分析 221

6.7.1 在map端溢出分区文件,在reduce端合并组合 221

6.7.2 在map端简单缓存、排序分组,在reduce端合并组合 222

6.7.3 在map端缓存中聚合、排序分组,在reduce端组合 222

6.8 小结 223

第7章 部署模式 224

7.1 local部署模式 225

7.2 local-cluster部署模式 225

7.2.1 LocalSparkCluster的启动 226

7.2.2 CoarseGrainedSchedulerBackend的启动 236

7.2.3 启动AppClient 237

7.2.4 资源调度 242

7.2.5 local-cluster模式的任务执行 253

7.3 Standalone部署模式 255

7.3.1 启动Standalone模式 255

7.3.2 启动Master分析 257

7.3.3 启动Worker分析 259

7.3.4 启动Driver Application分析 261

7.3.5 Standalone模式的任务执行 263

7.3.6 资源回收 263

7.4 容错机制 266

7.4.1 Executor异常退出 266

7.4.2 Worker异常退出 268

7.4.3 Master异常退出 269

7.5 其他部署方案 276

7.5.1 YARN 277

7.5.2 Mesos 280

7.6 小结 282

扩展篇 284

第8章 Spark SQL 284

8.1 Spark SQL总体设计 284

8.1.1 传统关系型数据库SQL运行原理 285

8.1.2 Spark SQL运行架构 286

8.2 字典表Catalog 288

8.3 Tree和TreeNode 289

8.4 词法解析器Parser的设计与实现 293

8.4.1 SQL语句解析的入口 294

8.4.2 建表语句解析器DDLParser 295

8.4.3 SQL语句解析器SqlParser 296

8.4.4 Spark代理解析器SparkSQL-Parser 299

8.5 Rule和RuleExecutor 300

8.6 Analyzer与Optimizer的设计与实现 302

8.6.1 语法分析器Analyzer 304

8.6.2 优化器Optimizer 305

8.7 生成物理执行计划 306

8.8 执行物理执行计划 308

8.9 Hive 311

8.9.1 Hive SQL语法解析器 311

8.9.2 Hive SQL元数据分析 313

8.9.3 Hive SQL物理执行计划 314

8.10 应用举例:JavaSparkSQL 314

8.11 小结 320

第9章 流式计算 321

9.1 Spark Streaming总体设计 321

9.2 StreamingContext初始化 323

9.3 输入流接收器规范Receiver 324

9.4 数据流抽象DStream 325

9.4.1 Dstream的离散化 326

9.4.2 数据源输入流InputDStream 327

9.4.3 Dstream转换及构建DStreamGraph 329

9.5 流式计算执行过程分析 330

9.5.1 流式计算例子CustomReceiver 331

9.5.2 Spark Streaming执行环境构建 335

9.5.3 任务生成过程 347

9.6 窗口操作 355

9.7 应用举例 357

9.7.1 安装mosquitto 358

9.7.2 启动mosquitto 358

9.7.3 MQTTWordCount 359

9.8 小结 361

第10章 图计算 362

10.1 Spark GraphX总体设计 362

10.1.1 图计算模型 363

10.1.2 属性图 365

10.1.3 GraphX的类继承体系 367

10.2 图操作 368

10.2.1 属性操作 368

10.2.2 结构操作 368

10.2.3 连接操作 369

10.2.4 聚合操作 370

10.3 Pregel API 371

10.3.1 Dijkstra算法 373

10.3.2 Dijkstra的实现 376

10.4 Graph的构建 377

10.4.1 从边的列表加载Graph 377

10.4.2 在Graph中创建图的方法 377

10.5 顶点集合抽象VertexRDD 378

10.6 边集合抽象EdgeRDD 379

10.7 图分割 380

10.8 常用算法 382

10.8.1 网页排名 382

10.8.2 Connected Components的应用 386

10.8.3 三角关系统计 388

10.9 应用举例 390

10.10 小结 391

第11章 机器学习 392

11.1 机器学习概论 392

11.2 Spark MLlib总体设计 394

11.3 数据类型 394

11.3.1 局部向量 394

11.3.2 标记点 395

11.3.3 局部矩阵 396

11.3.4 分布式矩阵 396

11.4 基础统计 398

11.4.1 摘要统计 398

11.4.2 相关统计 399

11.4.3 分层抽样 401

11.4.4 假设检验 401

11.4.5 随机数生成 402

11.5 分类和回归 405

11.5.1 数学公式 405

11.5.2 线性回归 407

11.5.3 分类 407

11.5.4 回归 410

11.6 决策树 411

11.6.1 基本算法 411

11.6.2 使用例子 412

11.7 随机森林 413

11.7.1 基本算法 414

11.7.2 使用例子 414

11.8 梯度提升决策树 415

11.8.1 基本算法 415

11.8.2 使用例子 416

11.9 朴素贝叶斯 416

11.9.1 算法原理 416

11.9.2 使用例子 418

11.10 保序回归 418

11.10.1 算法原理 418

11.10.2 使用例子 419

11.11 协同过滤 419

11.12 聚类 420

11.12.1 K-means 420

11.12.2 高斯混合 422

11.12.3 快速迭代聚类 422

11.12.4 latent Dirichlet allocation 422

11.12.5 流式K-means 423

11.13 维数减缩 424

11.13.1 奇异值分解 424

11.13.2 主成分分析 425

11.14 特征提取与转型 425

11.14.1 术语频率反转 425

11.14.2 单词向量转换 426

11.14.3 标准尺度 427

11.14.4 正规化尺度 428

11.14.5 卡方特征选择器 428

11.14.6 Hadamard积 429

11.15 频繁模式挖掘 429

11.16 预言模型标记语言 430

11.17 管道 431

11.17.1 管道工作原理 432

11.17.2 管道API介绍 433

11.17.3 交叉验证 435

11.18 小结 436

附录A Utils 437

附录B Akka 446

附录C Jetty 450

附录D Metrics 453

附录E Hadoop word count 456

附录F CommandUtils 458

附录G Netty 461

附录H 源码编译错误 465

返回顶部