《循序渐进Spark大数据应用开发》
本书内容
《循序渐进Spark大数据应用开发》结合作者一线开发实践,循序渐进地介绍了新版Apache Spark 3.x的开发技术。全书共10章,第1章和第2章主要介绍Spark的基本概念、安装,并演示如何编写最简单的Spark程序。第3章深入探讨了Spark的核心组件RDD。第4章讲解了Spark集群管理,帮助读者理解任务提交与执行的基本原理。第5章介绍了Spark SQL,这是处理结构化数据的基础工具。第6章展示了Spark Web UI,通过界面化的方式了解Spark集群运行状况。第7章和第8章分别介绍了Spark流式数据处理框架Spark Streaming和Structured Streaming。第9章和第10章则分别介绍了业界流行的机器学习和图计算处理框架MLlib和GraphX。书中各章节还提供了丰富的实战案例和上机练习题,以便读者在学习的同时进行实际操作,迅速提升动手能力。
本书作者
柳伟卫,网名老卫、waylau,在IT公司担任过项目经理、架构师、高级技术顾问等职位,拥有十余年开发经验,具有丰富的软件开发管理及系统架构经验。主导过多个省、国家级大型分布式系统的设计与研发,参与过面向全球的供应链系统服务化改造。在实际工作中,积累了大量的分布式系统、微服务架构以及性能调优经验。业余时间创建了 waylau.com 网站,用于分享个人技术心得。喜欢开源,长期跃于各大开源社区,编著了《跟老卫学HarmonyOS开发》《Netty 实战(精髓)》等近30余本开源技术教程(见 https://waylau.com/books/),广受网友好评,是 CSDN、 开源中国、阿里云开发者、华为开发者等技术社区专家,慕课网、华为开发者联盟社区认证讲师。已出版包括《HarmonyOS应用开发入门》《分布式系统常用技术及案例分析》《Java核心编程》《轻量级Java EE企业应用开发实战》《Node.js+Express+MongoDB+Vue.js全栈开发实战》《Netty原理解析与开发实战》等在内的几十本专著。
本书读者
《循序渐进Spark大数据应用开发》技术先进,案例丰富,适合对Spark大数据应用感兴趣的学生、大数据开发人员及架构师使用,也可作为培训机构和高校大数据课程的教学用书。
本书目录
第 1 章 Spark概述 1
1.1 Spark简介 1
1.1.1 诞生与初始阶段 1
1.1.2 开源与社区建设 2
1.1.3 成为顶级项目 2
1.1.4 版本更新 3
1.2 Spark组成 4
1.2.1 Spark Core 5
1.2.2 集群管理器 5
1.2.3 Spark UI 5
1.2.4 Spark SQL 6
1.2.5 Spark Streaming 6
1.2.6 Structured Streaming 6
1.2.7 MLlib 6
1.2.8 GraphX 7
1.2.9 其他 7
1.3 Spark数据类型 7
1.3.1 RDD 7
1.3.2 DataFrame 8
1.3.3 Dataset 8
1.3.4 数值类型 8
1.3.5 字符串类型 8
1.3.6 日期和时间类型 9
1.3.7 复杂类型 9
1.4 Spark的使用场景 9
1.4.1 批处理 9
1.4.2 实时流处理 9
1.4.3 分布式文件系统 10
1.4.4 机器学习 10
1.4.5 图计算 10
1.5 Spark与Hadoop的联系与区别 11
1.5.1 Hadoop概述 11
1.5.2 Spark的优缺点 11
1.5.3 Spark与Hadoop的关系 12
1.6 本章小结 12
第 2 章 Spark安装及初体验 13
2.1 下载并安装Spark 13
2.1.1 普通安装 13
2.1.2 通过Docker镜像安装 15
2.1.3 验证安装 17
2.2 通过Shell使用Spark 18
2.2.1 使用Scala的Shell 18
2.2.2 使用其他语言的Shell 19
2.3 实战:通过Spark进行词频统计 19
2.3.1 初始化应用 19
2.3.2 创建Spark应用程序 20
2.3.3 准备数据文件 22
2.3.4 运行程序 22
2.4 日志信息详解 23
2.4.1 启动信息 23
2.4.2 资源分配、Spark上下文初始化 25
2.4.3 任务进度和状态 26
2.4.4 应用程序日志 29
2.4.5 完成信息 29
2.5 动手练习 31
练习1:安装和配置Spark 31
练习2:使用Spark读取CSV文件并显示前5行 32
练习3:使用Spark创建不同类型的数据结构 33
练习4:通过Spark进行词频统计 34
2.6 本章小结 36
第 3 章 RDD基础编程 37
3.1 了解RDD的基本概念 37
3.1.1 RDD的定义 37
3.1.2 RDD的特性 38
3.1.3 RDD的操作 38
3.1.4 RDD的依赖关系 38
3.1.5 RDD的容错机制 39
3.1.6 RDD的持久化 40
3.2 创建RDD 40
3.2.1 并行化集合 40
3.2.2 读取外部数据集 40
3.3 操作RDD 41
3.4 实战:transformation操作 42
3.4.1 map 42
3.4.2 filter 44
3.4.3 flatMap 44
3.4.4 sample 45
3.4.5 union 46
3.4.6 distinct 46
3.4.7 groupByKey 47
3.5 实战:action操作 48
3.5.1 collect 48
3.5.2 reduce 49
3.5.3 count 49
3.5.4 first 50
3.5.5 take 50
3.5.6 foreach 51
3.5.7 saveAsTextFile 51
3.6 惰性求值 52
3.7 函数式编程 53
3.8 持久化 53
3.8.1 RDD持久化的基本概念 53
3.8.2 RDD持久化的方法 54
3.8.3 RDD持久化的存储级别 54
3.8.4 RDD持久化的使用场景 54
3.8.5 RDD持久化的注意事项 54
3.8.6 删除数据 55
3.9 实战:持久化 55
3.10 共享变量 57
3.10.1 广播变量 57
3.10.2 累加器 58
3.11 混洗 60
3.11.1 定义与原理 60
3.11.2 混洗流程 61
3.11.3 混洗优化方法 62
3.12 键-值对 62
3.13 动手练习 63
练习1:创建一个RDD并打印其元素(并行化集合) 63
练习2:读取外部数据集并统计单词数量(读取外部数据集) 64
3.14 本章小结 65
第 4 章 Spark集群管理 66
4.1 Spark集群概述 66
4.1.1 Spark集群组件 66
4.1.2 使用Spark集群的注意事项 67
4.1.3 集群管理器类型 68
4.2 提交任务到Spark集群 68
4.2.1 捆绑应用程序的依赖关系 68
4.2.2 使用spark-submit启动应用 69
4.2.3 主节点URL 70
4.2.4 从文件加载配置 71
4.3 启动Spark集群 71
4.3.1 手动启动集群 72
4.3.2 集群启动脚本 72
4.4 Spark集群的高可用方案 73
4.4.1 使用ZooKeeper的备用模式 73
4.4.2 使用本地文件系统的单节点恢复 74
4.5 使用YARN集群 74
4.5.1 在YARN集群管理器上启动Spark 74
4.5.2 添加其他的JAR 75
4.5.3 调试应用 75
4.5.4 使用Spark历史记录服务器替换Spark Web UI 76
4.6 YARN集群的常用配置 77
4.7 YARN集群资源分配和配置 80
4.8 YARN阶段级调度 81
4.8.1 阶段级调度概述 81
4.8.2 注意事项 82
4.9 动手练习 82
练习1:提交任务到Spark集群 82
练习2:启动Spark集群 83
练习3:使用YARN集群 84
练习4:使用Spark进行数据清洗和转换 84
4.10 本章小结 86
第 5 章 Spark SQL 87
5.1 Spark SQL的基本概念及工作原理 87
5.1.1 Spark SQL的基本概念 87
5.1.2 Spark SQL的工作原理 88
5.1.3 Spark RDD与Spark SQL的比较 89
5.1.4 抉择建议 90
5.2 Dataset与DataFrame 90
5.2.1 SQL API与Dataset/DataFrame API 90
5.2.2 RDD、Dataset和DataFrame的优缺点总结 92
5.2.3 RDD、Dataset、DataFrame的相互转换 93
5.3 实战:DataFrame的基本操作 94
5.3.1 创建SparkSession 94
5.3.2 创建DataFrame 95
5.3.3 DataFrame的常用操作 97
5.4 实战:Dataset的基本操作 99
5.4.1 创建SparkSession 99
5.4.2 创建Dataset 100
5.4.3 Dataset的常用操作 101
5.5 实战:使用DataFrame创建临时视图 103
5.5.1 如何创建本地临时视图 104
5.5.2 createTempView与createOrReplaceTempView的异同 105
5.5.3 全局临时视图 105
5.6 实战:RDD转换为Dataset 106
5.6.1 使用反射推断Schema 106
5.6.2 以编程方式构建Schema 107
5.7 Apache Parquet列存储格式 108
5.7.1 什么是列存储格式 108
5.7.2 Parquet文件格式 110
5.8 实战:Apache Parquet数据源的读取和写入 111
5.8.1 读取Parquet文件 111
5.8.2 写入Parquet文件 112
5.8.3 手动指定选项 113
5.9 实战:使用JDBC操作数据库 115
5.9.1 引入JDBC驱动程序 115
5.9.2 初始化表结构和数据 115
5.9.3 读取表数据 117
5.9.4 设置查询条件 118
5.9.5 将数据写入表 119
5.10 实战:读取二进制文件 120
5.10.1 读取二进制文件 120
5.10.2 运行应用 121
5.11 实战:导出数据到CSV文件 122
5.11.1 创建Dataset 122
5.11.2 将Dataset导出到CSV文件 123
5.11.3 运行 124
5.12 Apache ORC文件 124
5.12.1 ORC文件概述 124
5.12.2 ORC支持的数据类型 125
5.12.3 ORC实现 126
5.12.4 矢量化读取器 127
5.12.5 模式合并 127
5.12.6 使用Zstandard压缩 127
5.12.7 使用Bloom过滤器 127
5.12.8 列式加密 128
5.12.9 Hive元存储ORC表转换 128
5.12.10 ORC的常用配置 128
5.13 实战:Apache ORC文件操作示例 129
5.13.1 写入ORC文件 129
5.13.2 读取ORC文件 130
5.14 Apache Hive数据仓库 130
5.14.1 Hive的特性 131
5.14.2 Hive数据组织 131
5.14.3 Hive的数据类型 132
5.14.4 创建、显示、更改和删除表 133
5.14.5 加载数据 136
5.14.6 查询 137
5.15 实战:Apache Hive操作示例 139
5.15.1 Spark集成Hive 139
5.15.2 创建SparkSession 140
5.15.3 建表 141
5.15.4 加载数据 141
5.15.5 查询 141
5.15.6 运行 141
5.16 Apache Avro格式 142
5.16.1 Avro概述 142
5.16.2 Avro的架构与实现 143
5.16.3 Avro类型转换Spark SQL类型 143
5.16.4 Spark SQL类型转换Avro类型 144
5.17 实战:Apache Avro操作示例 145
5.17.1 Spark集成Avro 145
5.17.2 创建SparkSession 147
5.17.3 读取Avro文件 147
5.17.4 写入Avro文件 147
5.18 动手练习 148
练习1:使用DataFrame创建临时视图 148
练习2:对Apache Parquet数据源进行数据的读取和写入 149
练习3:使用DataFrame操作数据库 149
练习4:导出数据到CSV文件 150
5.19 本章小结 150
第 6 章 Spark Web UI 152
6.1 Web UI概述 152
6.1.1 Web UI的组成 152
6.1.2 Web UI的功能 153
6.1.3 Web UI的使用 153
6.1.4 Web UI的优化 153
6.2 启动Web UI 154
6.2.1 Standalone模式 154
6.2.2 YARN模式 154
6.2.3 Kubernetes模式 154
6.2.4 其他集群管理器 155
6.3 Jobs页面 155
6.4 Stages页面 156
6.5 Storage页面 157
6.6 Environment页面 158
6.7 Executors页面 160
6.8 SQL页面 161
6.9 动手练习 162
练习1:启动Web UI并访问 162
练习2:使用Web UI了解集群运行状态 163
6.10 本章小结 164
第 7 章 Spark Streaming 165
7.1 Spark Streaming概述 165
7.1.1 数据集类型 165
7.1.2 统一数据处理 166
7.1.3 Spark Streaming的基本概念 167
7.1.4 Spark Streaming的工作原理 167
7.1.5 Spark Streaming的应用场景 168
7.1.6 Spark Streaming的优势与挑战 168
7.1.7 使用Spark Streaming的依赖 168
7.2 DStream的transformation操作 169
7.2.1 DStream的常用操作 170
7.2.2 DStream的窗口操作 170
7.3 DStream的输入 171
7.3.1 输入源的使用要点 172
7.3.2 基本输入源 172
7.3.3 高级输入源 173
7.3.4 Receiver的可靠性 173
7.3.5 自定义Receiver 173
7.3.6 自定义可靠的Receiver 175
7.4 实战:DStream无状态的transformation操作 176
7.4.1 创建JavaStreamingContext对象 176
7.4.2 创建DStream 176
7.4.3 启动计算 177
7.4.4 单词发送服务器 177
7.4.5 运行 179
7.5 实战:DStream有状态的transformation操作 179
7.5.1 滑动窗口 179
7.5.2 编写滑动窗口示例 181
7.5.3 运行 181
7.6 DStream的输出操作 181
7.6.1 常用的输出操作 182
7.6.2 foreachRDD设计模式 182
7.7 实战:DStream的输出操作 183
7.7.1 将DStream输出到文件 184
7.7.2 运行 184
7.8 Spark Streaming使用DataFrame和SQL操作 185
7.9 Spark Streaming检查点 186
7.9.1 Spark Streaming检查点概念及原理 186
7.9.2 应用场景 187
7.9.3 配置方法 187
7.9.4 优化策略 188
7.9.5 总结与展望 188
7.10 Spark Streaming性能优化 188
7.10.1 数据接收并行度调优 188
7.10.2 批处理时间优化 189
7.10.3 内存管理优化 189
7.10.4 容错性优化 189
7.10.5 其他优化策略 190
7.11 Spark Streaming容错机制 190
7.11.1 Spark Streaming容错机制概述 190
7.11.2 基于文件的数据源容错机制 190
7.11.3 基于Receiver的数据源容错机制 191
7.11.4 驱动程序节点的容错机制 191
7.12 实战:Spark Streaming与Kafka集成 192
7.12.1 Spark Streaming集成Kafka 192
7.12.2 自定义生产者 192
7.12.3 构造消费者 193
7.12.4 启动Kafka服务器 195
7.12.5 运行 196
7.13 动手练习 198
练习1:DStream无状态的transformation操作 198
练习2:DStream有状态的transformation操作(滑动窗口) 199
练习3:编写一个Spark Streaming应用程序 201
7.14 本章小结 203
第 8 章 Structured Streaming 204
8.1 Structured Streaming概述 204
8.1.1 基本概念 204
8.1.2 处理事件时间和延迟数据 206
8.1.3 容错语义 207
8.1.4 Spark Streaming与Structured Streaming的比较 207
8.2 创建流式DataFrame/Dataset 208
8.2.1 从输入源创建DataFrame/Dataset 208
8.2.2 流式DataFrame/Dataset的模式推理与分区 209
8.3 Structured Streaming操作 210
8.3.1 基本操作 210
8.3.2 窗口操作 211
8.3.3 连接操作 211
8.3.4 不支持的DataFrame/Dataset操作 213
8.4 Structured Streaming统计来自Socket数据流的词频 214
8.4.1 创建SparkSession 214
8.4.2 创建DataFrame 214
8.4.3 执行查询 215
8.4.4 运行 215
8.5 实战:Structured Streaming窗口操作 216
8.5.1 在事件时间上执行窗口操作 216
8.5.2 创建SparkSession 217
8.5.3 创建DataFrame 217
8.5.4 执行查询 218
8.5.5 运行 219
8.6 Structured Streaming输出接收器 220
8.6.1 文件接收器 220
8.6.2 Kafka接收器 220
8.6.3 Foreach接收器 220
8.6.4 Console接收器 220
8.6.5 内存接收器 221
8.7 消除重复数据 221
8.7.1 使用唯一身份标识符 221
8.7.2 结合使用水印 221
8.8 状态存储 222
8.8.1 状态存储与恢复 222
8.8.2 状态分片与读写 223
8.8.3 版本管理 223
8.8.4 状态存储的实现 223
8.9 启动流式查询 225
8.9.1 流式查询的参数 225
8.9.2 foreach和foreachBatch 226
8.9.3 流式表API 228
8.9.4 触发器 228
8.9.5 管理流式查询 230
8.10 异步进度跟踪 231
8.10.1 异步进度跟踪的概念与重要性 231
8.10.2 异步进度跟踪的实现机制 232
8.10.3 使用示例 232
8.10.4 使用限制 233
8.11 连续处理 233
8.11.1 启用连续处理 233
8.11.2 连续处理与微批处理的比较 234
8.12 实战:Structured Streaming与Kafka集成 235
8.12.1 Structured Streaming集成Kafka 235
8.12.2 构造消费者 236
8.12.3 运行 237
8.13 动手练习 239
练习1:使用Structured Streaming统计来自Socket数据流的词频 239
练习2:使用Structured Streaming进行窗口操作 240
练习3:使用Structured Streaming与Kafka集成 241
8.14 本章小结 243
第 9 章 MLlib 244
9.1 MLlib概述 244
9.1.1 功能简介 244
9.1.2 重要算法 245
9.1.3 应用状况 245
9.2 机器学习基础知识 246
9.2.1 机器学习的定义 246
9.2.2 机器学习的分类 246
9.2.3 机器学习的基本流程 247
9.2.4 常见的机器学习算法 247
9.3 MLlib的RDD API和DataFrame API 247
9.4 MLlib流水线 248
9.4.1 MLlib流水线的核心概念 248
9.4.2 Pipeline 248
9.5 实战:MLlib的Estimator例子 250
9.5.1 使用MLlib依赖 250
9.5.2 创建SparkSession 250
9.5.3 创建DataFrame 250
9.5.4 使用Estimator 251
9.5.5 运行 252
9.6 实战:MLlib的Transformer例子 253
9.6.1 创建DataFrame 253
9.6.2 使用Transformer 253
9.6.3 运行 254
9.7 实战:MLlib的Pipeline例子 254
9.7.1 准备JavaBean 254
9.7.2 准备训练数据 255
9.7.3 配置Pipeline 256
9.7.4 学习PipelineModel 256
9.7.5 运行 257
9.8 动手练习 257
练习1:使用Spark MLlib中的Estimator进行线性回归模型的训练 257
练习2:使用Spark MLlib中的Transformer进行特征转换 259
练习3:使用Spark MLlib中的Pipeline进行特征转换和模型训练 261
9.9 本章小结 263
第 10 章 GraphX 264
10.1 GraphX概述 264
10.1.1 GraphX的核心概念 264
10.1.2 GraphX的主要功能 265
10.1.3 GraphX的实现原理 265
10.1.4 GraphX的应用场景 265
10.2 属性图 266
10.2.1 属性图的基本结构 266
10.2.2 属性图的存储与处理 266
10.2.3 属性图的图计算功能 267
10.2.4 属性图的优化 267
10.3 实战:GraphX从边构建图 268
10.3.1 初始化JavaSparkContext 268
10.3.2 初始化Edge 268
10.3.3 初始化Graph 269
10.3.4 输出Graph的内容 269
10.3.5 运行 269
10.4 GraphX分区优化 270
10.5 动手练习 271
练习:使用GraphX库 271
10.6 本章小结 272
参考文献 274
编辑推荐
1.《循序渐进Spark大数据应用开发》是一本深入浅出的Spark大数据开发实战指南,专为希望掌握Apache Spark 3.x技术栈的开发者量身定制。《循序渐进Spark大数据应用开发》不仅涵盖了Spark的基础概念和安装步骤,更通过丰富的实战案例和上机练习,引导读者逐步深入理解并掌握Spark的核心组件、集群管理、SQL处理、流式数据处理以及机器学习与图计算等高级功能。
2.作者凭借一线开发经验,精心编排了10个章节的内容,确保读者能够循序渐进地学习Spark的各项关键技术。从最简单的Spark程序编写开始,逐步过渡到复杂的数据处理和分析任务,每一章都充满了实用价值和操作指导。
3.特别值得一提的是,《循序渐进Spark大数据应用开发》提供了24个精心设计的实战案例和26个上机练习题,这些内容旨在帮助读者将理论知识转化为实践技能,快速提升解决实际问题的能力。无论是对于学生、大数据开发人员还是架构师来说,这都是一本不可多得的宝贵资源。
本文摘自《循序渐进Spark大数据应用开发》,获出版社和作者授权发布。
循序渐进Spark大数据应用开发——jd