目 录
第 1章 Spark概述及入门实战 1
1.1 Spark简介 3
1.1.1 为什么要学习Spark 3
1.1.2 学好Spark的关键点 5
1.1.3 Spark学习难点 6
1.1.4 本书编写思路 6
1.2 Spark原理及特点 7
1.2.1 Spark的核心优势 7
1.2.2 Spark生态介绍 11
1.2.3 Spark模块的组成 12
1.2.4 Spark运行模式 18
1.2.5 Spark集群的角色组成 18
1.2.6 Spark核心概念 21
1.2.7 Spark作业运行流程 27
1.3 Spark入门实战 33
1.3.1 Spark独立环境安装实战 33
1.3.2 YARN环境安装实战 36
1.3.3 Spark批处理作业入门实战 39
1.3.4 Spark流式作业入门实战 44
第 2章 Spark的作业调度和资源分配算法 49
2.1 Spark的作业调度 49
2.1.1 Spark作业运行框架概述 49
2.1.2 Spark调度器原理 51
2.1.3 Spark应用程序的核心概念 52
2.1.4 Spark应用程序的调度流程 52
2.1.5 在YARN级别调度Spark作业 58
2.1.6 在任务级别调度Spark作业 58
2.1.7 本地化调度简介 62
2.1.8 本地化调度流程:延迟调度策略 64
2.1.9 Spark任务延迟调度 65
2.1.10 Spark失败重试与黑名单机制 67
2.1.11 推测执行 68
2.1.12 资源分配机制 70
2.2 Spark on YARN资源调度 74
2.2.1 Spark on YARN运行模式 74
2.2.2 YARN调度器 77
2.3 RDD概念 86
2.3.1 RDD简介 86
2.3.2 RDD的特点 87
2.4 RDD分区 89
2.4.1 分区的概念 89
2.4.2 分区器 89
2.4.3 自定义分区器 91
2.5 RDD依赖关系 93
2.6 Stage 94
2.7 RDD持久化 95
2.7.1 RDD持久化的概念 95
2.7.2 RDD持久化的使用 95
2.7.3 RDD持久化级别 96
2.7.4 RDD持久化原则 97
2.8 RDD检查点 98
2.9 RDD实战 98
2.9.1 编写一个简单的RDD演示程序 98
2.9.2 利用外部存储系统生成RDD 99
2.9.3 RDD支持Transformation操作和Action操作 101
2.9.4 RDD懒加载 101
2.9.5 Spark函数的3种实现方式 102
2.9.6 RDD操作中常用Transformation算子的原理及使用 102
2.9.7 RDD操作中常用Action算子的原理及使用 112
2.9.8 Spark广播变量的概念、好处和使用 114
第3章 Spark SQL、DataFrame、Dataset原理和实战 117
3.1 Spark SQL基础概念 117
3.1.1 Spark SQL介绍 117
3.1.2 Spark SQL查询语句介绍 117
3.1.3 DataFrame的概念 118
3.1.4 Dataset的概念 119
3.2 创建一个Spark SQL应用 119
3.3 Spark SQL视图操作 120
3.4 Spark Dataset操作 121
3.5 Spark DataFrame操作 122
3.5.1 DataFrame Schema设置 122
3.5.2 DataFrame数据加载 123
3.5.3 DataFrame数据保存 124
3.6 Spark SQL操作 124
3.6.1 Spark SQL表关联操作 124
3.6.2 Spark SQL函数操作 125
第4章 深入理解Spark数据源 132
4.1 Spark文件读写原理 132
4.1.1 Spark数据分布 133
4.1.2 Spark数据读取过程 135
4.1.3 Spark数据写出过程 136
4.2 Spark数据格式 138
4.2.1 TEXT 138
4.2.2 CSV 139
4.2.3 JSON 140
4.2.4 Parquet 141
4.2.5 ORC 145
4.2.6 AVRO 148
4.2.7 到底应该使用哪种数据格式 150
4.3 Spark读写HDFS 150
4.3.1 HDFS的概念和特点 150
4.3.2 HDFS架构 151
4.3.3 HDFS数据的写入和读取流程 152
4.3.4 HDFS的使用 153
4.4 Spark读写HBase 153
4.4.1 HBase的概念 153
4.4.2 HBase架构 154
4.4.3 HBase数据模型 156
4.4.4 HBase的使用 157
4.5 Spark读写MongoDB 159
4.5.1 MongoDB的概念 159
4.5.2 MongoDB数据模型 160
4.5.3 MongoDB架构 161
4.5.4 MongoDB的使用 164
4.6 Spark读写Cassandra 167
4.6.1 Cassandra的概念 167
4.6.2 Gossip协议 167
4.6.3 Cassandra数据模型 168
4.6.4 Cassandra架构 169
4.6.5 Cassandra的使用 171
4.7 Spark读写MySQL 173
4.8 Spark读写Kafka 174
4.8.1 Kafka的概念 174
4.8.2 Kafka集群架构 175
4.8.3 Kafka数据存储设计 176
4.8.4 Kafka消息并发设计 178
4.8.5 Kafka的使用 179
4.9 Spark读写ElasticSearch 182
4.9.1 ElasticSearch的概念 182
4.9.2 ElasticSearch数据模型 183
4.9.3 ElasticSearch集群架构 184
4.9.4 ElasticSearch副本架构 185
4.9.5 ElasticSearch的使用 186
第5章 Spark流式计算的原理和实战 189
5.1 Spark Streaming 189
5.1.1 Spark Streaming介绍 189
5.1.2 Spark Streaming入门实战 190
5.1.3 Spark Streaming的数据源 194
5.1.4 DStream 195
5.2 Spark Structured Streaming 199
5.2.1 Spark Structured Streaming介绍 199
5.2.2 Spark Structured Streaming的特点 200
5.2.3 Spark Structured Streaming的数据模型 201
5.2.4 创建一个Spark Structured Streaming应用 202
5.2.5 时间概念、延迟数据处理策略和容错语义 206
5.2.6 Spark Structured Streaming编程模型 208
5.2.7 在结构化数据流上执行操作 212
5.2.8 启动Spark Structured Streaming 224
5.2.9 Spark Structured Streaming结果输出 224
5.2.10 触发器 226
第6章 亿级数据处理平台Spark性能调优 228
6.1 内存调优 228
6.1.1 JVM内存调优 228
6.1.2 堆外内存设置 232
6.1.3 storageFraction设置 232
6.1.4 Spark JVM调优的最佳实践 233
6.2 任务调优 234
6.2.1 驱动器数量、内存及CPU配置 234
6.2.2 设置合理的并行度 235
6.2.3 任务等待时长调优 240
6.2.4 黑名单调优 241
6.3 数据本地性调优 242
6.3.1 数据本地化介绍 242
6.3.2 RDD的复用和数据持久化 243
6.3.3 广播变量 244
6.3.4 Kryo序列化 245
6.3.5 检查点 246
6.4 算子调优 248
6.4.1 使用mapPartitions()或
mapPartitionWithIndex()函数取代map()函数 248
6.4.2 使用foreachPartition()函数取代foreach()函数 249
6.4.3 使用coalesce()函数取代repartition()函数 249
6.4.4 使用repartitionAndSortWithin-
Partitions()函数取代“重分区+排序”操作 250
6.4.5 使用reduceByKey()函数取代groupByKey()函数 250
6.4.6 连接不产生Shuffle:map-side关联 251
6.5 Spark SQL调优 251
6.6 Spark Shuffle调优 252
6.7 Spark Streaming调优 253
6.7.1 设置合理的批处理时间(batchDuration) 253
6.7.2 增加并行度 253
6.7.3 使用Kryo序列化器序列化数据 254
6.7.4 缓存经常需要使用的数据 254
6.7.5 清除不需要的数据 254
6.7.6 设置合理的CPU资源 254
6.7.7 设置合理的JVM GC 254
6.7.8 在处理数据前进行重分区 254
6.7.9 设置合理的内存 255
6.8 处理Spark数据倾斜问题 255
6.8.1 什么是数据倾斜 255
6.8.2 导致数据倾斜的原因是什么 256
6.8.3 如何判断Spark应用程序在运行中出现了数据倾斜 256
6.8.4 数据倾斜消除方案 257
第7章 Spark机器学习库 259
7.1 Spark机器学习概述 259
7.1.1 为什么要使用机器学习 259
7.1.2 机器学习的应用场景 259
7.1.3 机器学习的分类 260
7.1.4 机器学习算法 261
7.1.5 机器学习流程概述 264
7.1.6 数据探索 274
7.2 Spark机器学习常用统计方法 276
7.2.1 常用统计指标概述 276
7.2.2 Spark ML基础统计实战 276
7.2.3 Spark ML相关性分析 277
7.2.4 Spark ML数据抽样 279
7.3 Spark分类模型 280
7.3.1 分类模型介绍 280
7.3.2 线性回归 283
7.3.3 逻辑回归 286
7.3.4 朴素贝叶斯 288
7.3.5 决策树 290
7.4 协同过滤 293
7.5 Spark聚类模型 295
7.5.1 聚类模型的概念 295
7.5.2 聚类分析算法 296
7.5.3 k-均值算法模型 296
第8章 Spark 3.0的新特性和数据湖 302
8.1 Spark 3.0新特性概述 302
8.1.1 AQE 303
8.1.2 Spark SQL的新特性 305
8.1.3 Koalas和增强的PySpark 310
8.1.4 数据湖 311
8.1.5 Hydrogen、流和可扩展性 311
8.1.6 Spark 3.0的其他新特性 311
8.2 Spark未来的趋势——数据湖 312
8.2.1 为什么需要数据湖 312
8.2.2 Delta Lake 314
8.2.3 Delta Lake实战 316
术语的中英文对照表 321