当前位置:主页 > 计算机电子书 > 程序设计 > Spark下载
深入理解Spark:核心思想与源码分析

深入理解Spark:核心思想与源码分析 PDF 高清版

  • 更新:2020-07-07
  • 大小:58.5 MB
  • 类别:Spark
  • 作者:耿嘉安
  • 出版:机械工业出版社
  • 格式:PDF

  • 资源介绍
  • 相关推荐

《深入理解SPARK:核心思想与源码分析》结合大量图和示例,对Spark的架构、部署模式和工作模块的设计理念、实现源码与使用技巧进行了深入的剖析与解读。

《深入理解SPARK:核心思想与源码分析》一书对Spark1.2.0版本的源代码进行了全面而深入的分析,旨在为Spark的优化、定制和扩展提供原理性的指导。阿里巴巴集团专家鼎力推荐、阿里巴巴资深Java开发和大数据专家撰写。

本书分为三篇:

准备篇(第1~2章),介绍了Spark的环境搭建、设计理念与基本架构,帮助读者了解一些背景知识。

核心设计篇(第3~7章),着重讲解SparkContext的初始化、存储体系、任务提交与执行、计算引擎及部署模式的原理和源码分析。通过这部分的内容,读者可以通过源码剖析更加深入理解Spark的核心设计与实现,以便在实际使用中能够快速解决线上问题并对性能进行调优。

扩展篇(第8~11章),主要讲解基于Spark核心的各种扩展及应用,包括SQL处理引擎、Hive处理、流式计算框架Spark Streaming、图计算框架GraphX、机器学习库MLlib等内容。通过阅读这部分内容,读者可以扩展实际项目中对Spark的应用场景,让Spark焕发活力。

目录

  • 前言
  • 准 备 篇
  • 第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
  • 核心设计篇
  • 第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注册BlockManagerId 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 确认空闲内存方法ensureFreeSpace 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和broadcastCleaner 129
  • 4.10 缓存管理器CacheManager 130
  • 4.11 压缩算法 133
  • 4.12 磁盘写入实现DiskBlockObjectWriter 133
  • 4.13 块索引shuffle管理器IndexShuffleBlockManager 135
  • 4.14 shuffle内存管理器ShuffleMemoryManager 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
  • 扩 展 篇
  • 第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代理解析器SparkSQLParser 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转换及构建DStream Graph 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.1K-means 420
  • 11.12.2高斯混合 422
  • 11.12.3快速迭代聚类 422
  • 11.12.4latent 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.6Hadamard积 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

资源下载

资源下载地址1:https://pan.baidu.com/s/1oFsbNR2hI4yTAKhWLJZygw

相关资源

网友留言