
Spark内核机制解析及性能调优封面
责任编辑: 王 斌
责任校对: 张艳霞
印刷 ( 装订)
2017 年 1 月第 1 版·第 1 次印刷
184mm × 260mm·22 印张·537 千字
0001 - 3000 册
标准书号: ISBN 978 - 7 - 111 - 55442 - 4
定价: 59. 00 元
本书主要面向的对象是广大的 Spark 爱好者和大数据开发者, 以 Spark 内核解析及性能调优为主导, 由浅入深, 对 Spark 内核运行机制从源代码角度加以详细解析, 全书共分 9章, 分别是: RDD 的功能解析、 RDD 的运行机制、 部署模式 (Deploy) 解析、 Spark 调度器(Scheduler) 运行机制、 执行器 (Executor)、 Spark 的存储模块 (Storage)、 Shuffle 机制、 钨丝计划 (Project Tungsten) 以及性能优化。 读者通过对这些内容的深入学习, 将能够较为透彻地掌握 Spark 这一大数据计算框架的应用方法。
目 录
前言
第 1 章 RDD 功能解析 ………………………………………………………………………… 1
1. 1 RDD 产生的技术背景及功能 ………………………………………………………… 1
1. 2 RDD 的基本概念 ……………………………………………………………………… 2
1. 2. 1 RDD 的定义 ……………………………………………………………………… 2
1. 2. 2 RDD 五大特性 …………………………………………………………………… 5
1. 2. 3 RDD 弹性特性的 7 个方面 ………………………………………………………… 7
1. 3 创建 RDD 的方式 …………………………………………………………………… 13
1. 3. 1 通过已经存在的 Scala 集合创建 RDD …………………………………………… 13
1. 3. 2 通过 HDFS 和本地文件系统创建 RDD …………………………………………… 13
1. 3. 3 其他的 RDD 的转换 ……………………………………………………………… 14
1. 3. 4 其他的 RDD 的创建 ……………………………………………………………… 20
1. 4 RDD 算子 …………………………………………………………………………… 21
1. 5 RDD 的 Transformation 算子 ………………………………………………………… 24
1. 5. 1 Transformation 的定义 …………………………………………………………… 24
1. 5. 2 Transformation 在 RDD 中的角色定位及功能 ……………………………………… 24
1. 5. 3 Transformation 操作的 Lazy 特性…………………………………………………… 24
1. 5. 4 通过实践说明 Transformation 的 Lazy 特性 ………………………………………… 25
1. 6 RDD 的 Action 算子 ………………………………………………………………… 25
1. 6. 1 Action 的定义 …………………………………………………………………… 25
1. 6. 2 Action 在 RDD 中的角色定位及功能 ……………………………………………… 25
1. 7 小结…………………………………………………………………………………… 27
第 2 章 RDD 的运行机制……………………………………………………………………… 28
2. 1 RDD 依赖关系 ……………………………………………………………………… 28
2. 1. 1 窄依赖 (Narrow Dependency) …………………………………………………… 28
2. 1. 2 宽依赖 (Shuffle Dependency) …………………………………………………… 30
2. 2 有向无环图 (Directed Acyclic Graph, DAG) …………………………………… 31
2. 2. 1 什么是 DAG …………………………………………………………………… 31
2. 2. 2 DAG 的生成机制 ………………………………………………………………… 32
2. 2. 3 DAG 的逻辑视图 ………………………………………………………………… 33
2. 3 RDD 内部的计算机制 ……………………………………………………………… 34
2. 3. 1 RDD 的计算任务 (Task) ……………………………………………………… 34
2. 3. 2 RDD 的计算过程 ………………………………………………………………… 35
Ⅳ
2. 4 RDD 中缓存的适用场景和工作机制 ……………………………………………… 41
2. 4. 1 缓存的使用 ……………………………………………………………………… 41
2. 4. 2 缓存的适用场景 ………………………………………………………………… 42
2. 4. 3 缓存工作机制解析 ……………………………………………………………… 43
2. 5 RDD 的检查点 (Checkpoint) 的适用场景和工作机制 …………………………… 45
2. 5. 1 Checkpoint 的触发………………………………………………………………… 45
2. 5. 2 Checkpoint 的适用场景 …………………………………………………………… 46
2. 5. 3 Checkpoint 工作机制解析 ………………………………………………………… 46
2. 6 RDD 容错原理及其四大核心要点 ………………………………………………… 49
2. 6. 1 RDD 容错原理 …………………………………………………………………… 49
2. 6. 2 RDD 容错的四大核心要点 ……………………………………………………… 49
2. 7 通过 WordCount 实践 RDD 内部机制 ……………………………………………… 51
2. 7. 1 WordCount 案例实践 ……………………………………………………………… 51
2. 7. 2 解析 RDD 生成的内部机制 ……………………………………………………… 53
2. 8 小结…………………………………………………………………………………… 54
第 3 章 部署模式 (Deploy) 解析 …………………………………………………………… 55
3. 1 部署模式概述………………………………………………………………………… 55
3. 2 应用程序的部署……………………………………………………………………… 55
3. 2. 1 应用程序部署的脚本解析………………………………………………………… 55
3. 2. 2 应用程序部署的源代码解析 ……………………………………………………… 58
3. 3 Local 与 Local - Cluster 部署 ………………………………………………………… 69
3. 3. 1 Local 部署 ……………………………………………………………………… 70
3. 3. 2 Local[∗]与 Local[N]部署 ……………………………………………………… 70
3. 3. 3 Local[∗,M]与 Local[N,M]部署 ………………………………………………… 70
3. 3. 4 Local - Cluster[S,C,M]部署 ……………………………………………………… 72
3. 4 Spark Standalone 部署 ……………………………………………………………… 72
3. 4. 1 部署框架 ………………………………………………………………………… 72
3. 4. 2 应用程序的部署 ………………………………………………………………… 73
3. 4. 3 Master 的部署 …………………………………………………………………… 84
3. 4. 4 Worker 的部署 …………………………………………………………………… 98
3. 4. 5 内部交互的消息机制 …………………………………………………………… 108
3. 4. 6 Master HA 的部署 ……………………………………………………………… 110
3. 5 Spark on YARN 的部署模型 ……………………………………………………… 115
3. 5. 1 部署框架 ……………………………………………………………………… 115
3. 5. 2 应用程序的部署………………………………………………………………… 118
3. 6 小结 ………………………………………………………………………………… 124
第 4 章 Spark 调度器 (Scheduler) 运行机制 …………………………………………… 125
4. 1 Spark 运行的核心概念……………………………………………………………… 125
Ⅴ
4. 1. 1 Spark 运行的基本对象 ………………………………………………………… 125
4. 1. 2 Spark 运行框架及各组件的基本运行原理………………………………………… 126
4. 2 Spark Driver Program 剖析 ………………………………………………………… 127
4. 2. 1 什么是 Spark Driver Program …………………………………………………… 127
4. 2. 2 SparkContext 原理剖析…………………………………………………………… 128
4. 2. 3 SparkContext 源代码解析 ………………………………………………………… 129
4. 3 Spark Job 的触发 …………………………………………………………………… 134
4. 3. 1 Job 的逻辑执行 (General Logical Plan) ………………………………………… 134
4. 3. 2 Job 具体的物理执行 …………………………………………………………… 135
4. 3. 3 Job 触发流程源代码解析 ……………………………………………………… 138
4. 4 高层的 DAG 调度器 (DAGScheduler) …………………………………………… 140
4. 4. 1 DAG 的定义 …………………………………………………………………… 140
4. 4. 2 DAG 的实例化 ………………………………………………………………… 140
4. 4. 3 DAGScheduer 划分 Stage 的原理 ………………………………………………… 142
4. 4. 4 DAGScheduer 划分 Stage 的具体算法 …………………………………………… 143
4. 4. 5 Stage 内部 Task 获取最佳位置的算法 …………………………………………… 148
4. 5 底层的 Task 调度器 (TaskScheduler) …………………………………………… 150
4. 5. 1 TaskScheduer 原理剖析 ………………………………………………………… 151
4. 5. 2 TaskScheduer 源代码解析 ……………………………………………………… 152
4. 6 调度器的通信终端 (SchedulerBackend) ………………………………………… 157
4. 6. 1 SchedulerBackend 原理 ………………………………………………………… 157
4. 6. 2 SchedulerBackend 源代码解析 …………………………………………………… 158
4. 6. 3 Spark 程序的注册机制 ………………………………………………………… 160
4. 6. 4 Spark 程序对计算资源 Executor 的管理 ………………………………………… 163
4. 7 小结 ………………………………………………………………………………… 167
第 5 章 执行器 (Executor) ………………………………………………………………… 168
5. 1 Executor 的创建、 分配、 启动及异常处理 ……………………………………… 169
5. 1. 1 Executor 的创建 ………………………………………………………………… 169
5. 1. 2 Executor 的资源分配 …………………………………………………………… 177
5. 1. 3 Executor 的启动 ………………………………………………………………… 183
5. 1. 4 Executor 的异常处理 …………………………………………………………… 188
5. 2 执行器的通信接口 (ExecutorBackend) ………………………………………… 190
5. 2. 1 ExecutorBackend 接口与 Executor 的关系 ………………………………………… 190
5. 2. 2 ExecutorBackend 的不同实现 …………………………………………………… 191
5. 2. 3 ExecutorBackend 中的通信 ……………………………………………………… 194
5. 3 执行器 (Executor) 中任务的执行 ……………………………………………… 198
5. 3. 1 Executor 中任务的加载 ………………………………………………………… 198
5. 3. 2 Executor 中的任务线程池 ……………………………………………………… 199
Ⅵ
5. 3. 3 任务执行失败处理 ……………………………………………………………… 199
5. 3. 4 剖析 TaskRunner ……………………………………………………………… 201
5. 4 小结 ………………………………………………………………………………… 202
第 6 章 Spark 的存储模块 (Storage) …………………………………………………… 203
6. 1 Storage 概述 ………………………………………………………………………… 203
6. 1. 1 Storage 的概念 ………………………………………………………………… 203
6. 1. 2 Storage 的设计模式 ……………………………………………………………… 204
6. 2 Storage 模块整体架构 ……………………………………………………………… 204
6. 2. 1 通信层 ………………………………………………………………………… 205
6. 2. 2 存储层 ………………………………………………………………………… 208
6. 2. 3 Partition 与 Block 的对应关系 …………………………………………………… 235
6. 3 不同 Storage Level 对比 …………………………………………………………… 236
6. 4 Executor 内存模型 ………………………………………………………………… 237
6. 5 Tachyon ……………………………………………………………………………… 239
6. 5. 1 Tachyon 简介 …………………………………………………………………… 239
6. 5. 2 Tachyon API 的使用 …………………………………………………………… 240
6. 5. 3 Tachyon 在 Spark 中的使用 ……………………………………………………… 242
6. 6 小结 ………………………………………………………………………………… 245
第 7 章 Shuffle 机制 ………………………………………………………………………… 246
7. 1 Shuffle 概述 ………………………………………………………………………… 246
7. 2 Shuffle 的框架 ……………………………………………………………………… 248
7. 2. 1 Shuffle 的框架演进 ……………………………………………………………… 248
7. 2. 2 Shuffle 的框架内核 ……………………………………………………………… 249
7. 2. 3 Shuffle 框架的源代码解析 ……………………………………………………… 250
7. 2. 4 Shuffle 的注册 ………………………………………………………………… 254
7. 2. 5 Shuffle 读写数据的源代码解析 ………………………………………………… 255
7. 3 基于 Hash 的 Shuffle ……………………………………………………………… 261
7. 3. 1 基于 Hash 的 Shuffle 内核 ……………………………………………………… 261
7. 3. 2 基于 Hash 的 Shuffle 写数据的源代码解析 ……………………………………… 265
7. 4 基于 Sort 的 Shuffle ………………………………………………………………… 270
7. 4. 1 基于 Sort 的 Shuffle 内核 ………………………………………………………… 271
7. 4. 2 基于 Sort 的 Shuffle 写数据的源代码解析 ………………………………………… 273
7. 5 基于 Tungsten Sort 的 Shuffle ……………………………………………………… 279
7. 5. 1 基于 Tungsten Sort 的 Shuffle 内核 ……………………………………………… 279
7. 5. 2 基于 Tungsten Sort 的 Shuffle 写数据的源代码解析 ……………………………… 281
7. 6 小结 ………………………………………………………………………………… 286
第 8 章 钨丝计划 (Project Tungsten) …………………………………………………… 287
8. 1 钨丝计划 (Project Tungsten) 概述 ……………………………………………… 287
Ⅶ
8. 2 内存管理模型 ……………………………………………………………………… 288
8. 2. 1 现有内存管理的机制 …………………………………………………………… 288
8. 2. 2 Project Tungsten 内存管理的模型及其源代码的解析 ……………………………… 290
8. 3 基于内存管理模型的 Shuffle 二进制数据处理 …………………………………… 305
8. 3. 1 插入记录时二进制数据的处理 ………………………………………………… 308
8. 3. 2 spill 时二进制数据的处理 ……………………………………………………… 312
8. 4 小结 ………………………………………………………………………………… 313
第 9 章 性能优化……………………………………………………………………………… 314
9. 1 Spark 的配置机制…………………………………………………………………… 314
9. 1. 1 通过 SparkConf 配置 Spark ……………………………………………………… 314
9. 1. 2 通过 spark - submit 配置 Spark ………………………………………………… 315
9. 1. 3 通过配置文件配置 Spark ……………………………………………………… 316
9. 1. 4 Spark 配置机制总结 …………………………………………………………… 316
9. 2 性能诊断 …………………………………………………………………………… 317
9. 2. 1 WebUI 的 8080 端口 …………………………………………………………… 317
9. 2. 2 WebUI 的 18080 端口 …………………………………………………………… 318
9. 2. 3 WebUI 的 4040 端口 …………………………………………………………… 319
9. 2. 4 WebUI 的 Jobs 页面……………………………………………………………… 319
9. 2. 5 WebUI 的 Stages 页面 …………………………………………………………… 320
9. 2. 6 WebUI 的 Storage 页面…………………………………………………………… 321
9. 2. 7 WebUI 的 Environment 页面 ……………………………………………………… 322
9. 2. 8 WebUI 的 Executors 页面 ………………………………………………………… 324
9. 2. 9 Driver 和 Executor 的日志 ……………………………………………………… 324
9. 3 性能优化 …………………………………………………………………………… 325
9. 3. 1 程序编写准则 ………………………………………………………………… 325
9. 3. 2 并行度 ………………………………………………………………………… 330
9. 3. 3 资源参数调优 ………………………………………………………………… 331
9. 3. 4 序列化与压缩 ………………………………………………………………… 332
9. 3. 5 内存调优 ……………………………………………………………………… 334
9. 3. 6 广播大变量 …………………………………………………………………… 336
9. 3. 7 持久化与 checkpoint …………………………………………………………… 337
9. 3. 8 数据本地性 …………………………………………………………………… 341
9. 3. 9 垃圾回收调优 ………………………………………………………………… 342
9. 3. 10 Shuffle 调优 …………………………………………………………………… 343
9. 4 小结 ………………………………………………………………………………… 344
代找资源网不售卖任何资源,只提供代找服务
QQ客服
微信客服

评论0