本书共8章,内容主要包括Spark概述及入门实战,Spark的作业调度和资源分配算法,Spark SQL、DataFrame、Dataset的原理和实战,深入理解Spark数据源,流式计算的原理和实战,亿级数据处理平台Spark性能调优,Spark机器学习库,Spark 3.0的新特性和数据湖等。
本书适合Spark开发人员和Spark运维人员阅读。
基于大数据分析实战,图文并茂,系统讲解Spark内核的原理,有助于读者快速掌握Spark开源集群计算框架的使用方法。
Spark 是专为大规模数据处理而设计的快速通用的计算引擎,本书涵盖 Spark 3.0 新特性。
本书结合大量原理图和流程图,系统介绍Spark内核的相关技术。
本书注重实战,图文并茂,系统讲解了Spark内核原理、Spark实战应用、 Spark数据源、Spark流式计算、Spark性能调优和数据湖等内容。
通过本书,读者不仅可以深入理解Spark的原理、使应用、运维、监控等技术,还可以快速编写出性能更好、可靠性更高的大数据应用。
本书主要内容:
? Spark内核的原理
? Spark的作业调度和资源分配算法
? Spark SQL、DataFrame、Dataset的原理和实战
? Spark数据源
? Spark 流式计算原理和实战
? Spark 亿级数据处理平台Spark性能调优
? Spark机器学习库
? Spark 3.0的新特性和数据湖等
王磊,阿里云MVP(最有价值专家)、易点天下大数据架构师,《Offer来了:Java面试核心知识点精讲(原理篇)》和《Offer来了:Java面试核心知识点精讲(框架篇)》的作者,极客时间每日一课专栏作者;喜欢读书和研究新技术,长期从事物联网和大数据研发工作;有十余年丰富的物联网及大数据研发和技术架构经验,对物联网及大数据的原理和技术实现有深刻理解;长期从事海外项目的研发和交付工作,对异地多活数据中心的建设及高可用、高并发系统的设计有丰富的实战经验。
目 录
第 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