《Spark大数据处理技术》以Spark 0.9版本为基础进行编写,是一本全面介绍Spark及Spark生态圈相关技术的书籍,是国内首本深入介绍Spark原理和架构的技术书籍。主要内容有Spark基础功能介绍及内部重要模块分析,包括部署模式、调度框架、存储管理以及应用监控;同时也详细介绍了Spark生态圈中其他的软件和模块,包括SQL处理引擎Shark和Spark SQL、流式处理引擎Spark Streaming、图计算框架Graphx以及分布式内存文件系统Tachyon。《Spark大数据处理技术》从概念和原理上对Spark核心框架和生态圈做了详细的解读,并对Spark的应用现状和未来发展做了一定的介绍,旨在为大数据从业人员和Spark爱好者提供一个更深入学习的平台。
《Spark大数据处理技术》适合任何大数据、Spark领域的从业人员阅读,同时也为架构师、软件开发工程师和大数据爱好者展现了一个现代大数据框架的架构原理和实现细节。相信通过学习《Spark大数据处理技术》,读者能够熟悉和掌握Spark这一当前流行的大数据框架,并将其投入到生产实践中去。
目录
- 第1章 Spark系统概述 1
- 1.1 大数据处理框架 1
- 1.2 Spark大数据处理框架 3
- 1.2.1 RDD表达能力 3
- 1.2.2 Spark子系统 4
- 1.3 小结 7
- 第2章 Spark RDD及编程接口 9
- 2.1 Spark程序“Hello World” 9
- 2.2 Spark RDD 12
- 2.2.1 RDD分区(partitions) 13
- 2.2.2 RDD优先位置(preferredLocations) 13
- 2.2.3 RDD依赖关系(dependencies) 15
- 2.2.4 RDD分区计算(compute) 19
- 2.2.5 RDD分区函数(partitioner) 20
- 2.3 创建操作 23
- 2.3.1 集合创建操作 23
- 2.3.2 存储创建操作 23
- 2.4 转换操作 26
- 2.4.1 RDD基本转换操作 26
- 2.4.2 键值RDD转换操作 35
- 2.4.3 再论RDD依赖关系 43
- 2.5 控制操作(control operation) 46
- 2.6 行动操作(action operation) 47
- 2.6.1 集合标量行动操作 47
- 2.6.2 存储行动操作 52
- 2.7 小结 56
- 第3章 Spark运行模式及原理 57
- 3.1 Spark运行模式概述 57
- 3.1.1 Spark运行模式列表 57
- 3.1.2 Spark基本工作流程 58
- 3.1.3 相关基本类 59
- 3.2 Local模式 62
- 3.2.1 部署及程序运行 62
- 3.2.2 内部实现原理 63
- 3.3 Standalone模式 64
- 3.3.1 部署及程序运行 64
- 3.3.2 内部实现原理 67
- 3.4 Local cluster模式 68
- 3.4.1 部署及程序运行 68
- 3.4.2 内部实现原理 69
- 3.5 Mesos模式 69
- 3.5.1 部署及程序运行 69
- 3.5.2 内部实现原理 70
- 3.6 YARN standalone / YARN cluster模式 72
- 3.6.1 部署及程序运行 72
- 3.6.2 内部实现原理 75
- 3.7 YARN client模式 76
- 3.7.1 部署及程序运行 76
- 3.7.2 内部实现原理 77
- 3.8 各种模式的实现细节比较 78
- 3.8.1 环境变量的传递 78
- 3.8.2 JAR包和各种依赖文件的分发 80
- 3.8.3 任务管理和序列化 82
- 3.8.4 用户参数配置 83
- 3.8.5 用户及权限控制 84
- 3.9 Spark 1.0版本之后的变化 85
- 3.10 小结 86
- 第4章 Spark调度管理原理 87
- 4.1 Spark作业调度管理概述 87
- 4.2 Spark调度相关基本概念 88
- 4.3 作业调度模块顶层逻辑概述 89
- 4.4 作业调度具体工作流程 92
- 4.4.1 调度阶段的拆分 94
- 4.4.2 调度阶段的提交 97
- 4.4.3 任务集的提交 99
- 4.4.4 完成状态的监控 99
- 4.4.5 任务结果的获取 101
- 4.5 任务集管理模块详解 102
- 4.6 调度池和调度模式分析 104
- 4.7 其他调度相关内容 106
- 4.7.1 Spark应用之间的调度关系 106
- 4.7.2 调度过程中的数据本地性问题 106
- 4.8 小结 107
- 第5章 Spark的存储管理 109
- 5.1 存储管理模块整体架构 109
- 5.1.1 通信层架构 110
- 5.1.2 通信层消息传递 112
- 5.1.3 注册存储管理模块 113
- 5.1.4 存储层架构 114
- 5.1.5 数据块 (Block) 116
- 5.2 RDD 持久化 116
- 5.2.1 RDD分区和数据块的关系 117
- 5.2.2 内存缓存 118
- 5.2.3 磁盘缓存 119
- 5.2.4 持久化选项 120
- 5.2.5 如何选择不同的持久化选项 122
- 5.3 Shuffle数据持久化 122
- 5.4 广播(Broadcast)变量持久化 125
- 5.5 小结 126
- 第6章 Spark监控管理 127
- 6.1 UI管理 127
- 6.1.1 实时UI管理 128
- 6.1.2 历史UI管理 132
- 6.2 Metrics管理 133
- 6.2.1 Metrics系统架构 133
- 6.2.2 Metrics系统配置 135
- 6.2.3 输入源(Metrics Source)介绍 136
- 6.2.4 输出方式(Metrics Sink)介绍 138
- 6.3 小结 139
- 第7章 Shark架构与安装配置 141
- 7.1 Shark架构浅析 142
- 7.2 Hive/Shark各功能组件对比 143
- 7.2.1 MetaStore 143
- 7.2.2 CLI/ Beeline 143
- 7.2.3 JDBC/ODBC 144
- 7.2.4 Hive Server/2 与 Shark Server/2 144
- 7.2.5 Driver 145
- 7.2.6 SQL Parser 146
- 7.2.7 查询优化器(Query Optimizer) 147
- 7.2.8 物理计划与执行 147
- 7.3 Shark安装配置与使用 148
- 7.3.1 安装前准备工作 149
- 7.3.2 在不同运行模式下安装Shark 149
- 7.4 Shark SQL命令行工具(CLI) 152
- 7.5 使用Shark Shell命令 155
- 7.6 启动Shark Server 155
- 7.7 Shark Server2配置与启动 156
- 7.8 缓存数据表 157
- 7.8.1 数据缓存级别 158
- 7.8.2 创建不同缓存级别的Shark数据表 158
- 7.8.3 指定数据表缓存策略 159
- 7.8.4 使用Tachyon 160
- 7.9 常见问题分析 160
- 7.9.1 OutOfMemory异常 160
- 7.9.2 数据处理吞吐量低 161
- 7.9.3 Shark查询比Hive慢 161
- 7.10 小结 162
- 第8章 SQL程序扩展 163
- 8.1 程序扩展并行运行模式 164
- 8.2 Evaluator和ObjectInspector 164
- 8.3 自定义函数扩展 168
- 8.3.1 自定义函数扩展分类 168
- 8.3.2 CLI中的用户自定义函数扩展相关命令 170
- 8.3.3 用户自定义函数(UDF) 171
- 8.3.4 通用用户自定义函数(Generic UDF) 175
- 8.3.5 用户自定义聚合函数(UDAF) 178
- 8.3.6 通用用户自定义聚合函数(Generic UDAF) 182
- 8.3.7 通用用户自定义表函数(Generic UDTF) 186
- 8.4 自定义数据存取格式 190
- 8.4.1 SerDe 190
- 8.4.2 StorageHandler 197
- 8.5 小结 198
- 第9章 Spark SQL 199
- 9.1 Spark SQL逻辑架构 199
- 9.1.1 Catalyst功能边界 200
- 9.1.2 SQL解析阶段 201
- 9.1.3 逻辑计划元数据绑定和语义分析阶段 202
- 9.1.4 逻辑计划优化阶段 202
- 9.1.5 物理计划生成阶段 202
- 9.1.6 Shark和Spark SQL对比 203
- 9.2 Catalyst上下文(Context) 204
- 9.2.1 SQLContext 204
- 9.2.2 HiveContext 205
- 9.3 SQL DSL API 206
- 9.3.1 数据源管理 206
- 9.3.2 SchemaRDD 208
- 9.3.3 Row API 210
- 9.3.4 数据类型 211
- 9.3.5 DSL API举例 213
- 9.3.6 表达式计算 214
- 9.3.7 Parquet列式存储文件 218
- 9.3.8 代码演示 218
- 9.4 Java API 221
- 9.5 Python API 224
- 9.6 Spark SQL CLI 225
- 9.7 Thrift服务 225
- 9.8 小结 225
- 第10章 Spark Streaming流数据处理框架 227
- 10.1 快速入门 227
- 10.2 Spark Streaming基本概念 229
- 10.2.1 链接和初始化 229
- 10.2.2 时间和窗口概念 231
- 10.2.3 DStream原理 232
- 10.2.4 DStream输入源 234
- 10.2.5 DStream 操作 235
- 10.2.6 DStream持久化 237
- 10.3 性能调优 238
- 10.3.1 运行时间优化 238
- 10.3.2 内存使用优化 238
- 10.4 容错处理 239
- 10.4.1 工作节点失效 239
- 10.4.2 驱动节点失效 240
- 10.5 DStream作业的产生和调度 242
- 10.5.1 作业产生 242
- 10.5.2 作业调度 243
- 10.5.3 Streaming作业与Spark作业之间的关系 244
- 10.6 DStream与RDD关系 246
- 10.7 数据接收原理 248
- 10.8 自定义数据输入源 251
- 10.9 自定义监控接口(StreamingListener) 253
- 10.10 Spark Streaming案例分析 254
- 10.11 小结 256
- 第11章 GraphX计算框架 259
- 11.1 图并行计算 259
- 11.1.1 数据并行与图并行计算 259
- 11.1.2 图并行计算框架简介 260
- 11.1.3 GraphX简介 264
- 11.2 GraphX模型设计 264
- 11.2.1 数据模型 264
- 11.2.2 图计算接口 265
- 11.3 GraphX模型实现 269
- 11.3.1 图的分布式存储 269
- 11.3.2 图操作执行策略 278
- 11.3.3 图操作执行优化 280
- 11.3.4 序列化和反序列化 283
- 11.3.5 GraphX内置算法库 284
- 11.4 GraphX应用 285
- 11.4.1 Pregel模型 285
- 11.4.2 N维邻接关系计算 288
- 11.5 小结 291
- 第12章 Tachyon存储系统 293
- 12.1 设计原理 294
- 12.1.1 高效的内存读写 294
- 12.1.2 无副本的可靠性实现——Lineage 297
- 12.2 框架设计 299
- 12.2.1 主节点 300
- 12.2.2 工作节点 304
- 12.2.3 客户端 306
- 12.2.4 读写工作流程 307
- 12.3 Tachyon的部署 313
- 12.3.1 单机部署 313
- 12.3.2 分布式部署 316
- 12.3.3 Tachyon的配置 317
- 12.4 Tachyon应用 321
- 12.4.1 Shark原始表(RawTable) 321
- 12.4.2 Spark的堆外RDD 325
- 12.4.3 Tachyon用户接口(API) 327
- 12.5 相关项目讨论 335
- 12.6 小结 336