清华大学黄永峰教授、江铭虎教授郑重推荐,培训机构长达8年千锤百炼、锻造而成,教学视频、作者微信群答疑服务,助您掌握Spark核心技术、应用案例与面试问答

本书内容
《Spark大数据开发与应用案例:视频教学版》在培训机构的教学实践中历经8年锤炼而成,以简明清晰且易于理解的方式,全面覆盖Spark集群构建、Spark Core、Spark SQL、Spark实战案例以及面试问答等内容。为增强读者的学习体验,《Spark大数据开发与应用案例:视频教学版》配套丰富的电子资源,包括示例源码、PPT教学课件、集群环境、教学视频以及作者微信群答疑服务。
《Spark大数据开发与应用案例:视频教学版》精心编排为15章,内容包括Spark简介、Spark集群环境部署、Spark编程体验、RDD深度解读、RDD的Shuffle详解、Spark共享变量、Spark序列化和线程安全、Spark内存管理机制、Spark SQL简介、Spark SQL抽象编程详解、Spark SQL自定义函数、Spark SQL源码解读、Spark性能调优、Spark实战案例、Spark面试题。
本书作者
段海涛,毕业于南京邮电大学,高级工程师。曾就职于中国移动、中国石油、亚信科技等。从事大数据行业10余年,海易牛科技(大数据平台开发技术服务)和北京多易教育(大数据技术培训)创始人。为中国移动、用友软件、四方精创及多个城市的数据局等企业和单位提供过解决方案和技术咨询服务;为数千有志进入大数据开发行业的大学生提供了就业培训服务。在多个互联网平台公开Hadoop、Spark、Flink等大量培训视频,广受欢迎和好评。
杨忠良,毕业于清华大学电子工程系,博士,北京邮电大学副研究员、博士生导师。长期从事人工智能、大数据分析等领域的研究。在国内外重要期刊和会议发表学术论文80余篇,多篇文章收录ESI高被引论文。主持或参与多项国家自然科学基金、国家重点研发计划项目等,参与编撰教材1部。获得 2024年中国通信学会科学技术二等奖,2021 年 ACM SIGWEB CHINA 新星奖。
余辉,毕业于中科院,硕士,中级工程师,大数据平台架构师。曾就职于京东金融、酷开网络。从事大数据行业10余年,专注于大数据及机器学习领域。发表大数据相关论文3篇,发表软著10多个,授权专利30多个。著有《Hadoop+Spark生态系统与实战指南》。
本书读者
《Spark大数据开发与应用案例:视频教学版》不仅适合Spark初学者快速入门,也有助于大数据分析人员及大数据应用开发人员进一步提升技能。同时,《Spark大数据开发与应用案例:视频教学版》也可以作为高等院校或高职高专院校Spark大数据技术课程的教材。
本书目录
目 录
第1章 Spark简介1
1.1 Spark概念及其特点1
1.2 Spark技术生态系统2
1.3 Spark运行模式4
1.4 Spark执行流程8
1.5 Spark专有名词9
1.6 本章小结11
第2章 Spark集群环境部署12
2.1 VM虚拟机安装13
2.2 Ubuntu 22.04系统安装19
2.3 Ubuntu 22.04网络配置24
2.4 Ubuntu 22.04环境配置28
2.5 ZooKeeper安装33
2.6 Hadoop安装35
2.6.1 下载并解压35
2.6.2 配置系统环境变量35
2.6.3 配置核心文件36
2.6.4 分发Hadoop40
2.6.5 启动和验证40
2.7 Spark安装47
2.7.1 下载和解压47
2.7.2 配置系统环境变量47
2.7.3 配置核心文件47
2.7.4 分发Spark48
2.7.5 Spark启动及UI界面查看48
2.7.6 spark-shell启动验证49
2.8 集群和代码下载50
2.9 本章小结52
第3章 Spark编程体验54
3.1 Scala基础编程54
3.1.1 基本语法55
3.1.2 函数和方法57
3.1.3 控制语句59
3.1.4 函数式编程62
3.1.5 类和对象67
3.1.6 Scala异常处理70
3.1.7 Trait(特征)72
3.1.8 Scala文件I/O73
3.1.9 Scala练习题74
3.2 Spark创建项目80
3.3 Spark程序编写与运行方法90
3.4 本章小结92
第4章 RDD深度解读93
4.1 RDD的概念及特点93
4.1.1 RDD的特点94
4.1.2 RDD的算子分类95
4.1.3 RDD创建方法95
4.2 RDD的血缘和依赖97
4.2.1 血缘与依赖的概念98
4.2.2 Dependency依赖关系98
4.3 RDD的Transformation算子103
4.4 RDD的Action算子122
4.5 RDD的特殊算子129
4.5.1 cache和persist129
4.5.2 checkpoint131
4.6 RDD转换算子的惰性133
4.6.1 Scala迭代器Iterator接口133
4.6.2 Scala迭代器Lazy特性及原理134
4.7 模拟Spark自定义RDD135
4.8 Spark任务执行原理图解分析138
4.8.1 WordCount程序元素分解138
4.8.2 WordCount程序图解139
4.8.3 Stage和Task的类型142
4.9 案例:多种算子实现WordCount143
4.9.1 map + reduceByKey144
4.9.2 countByValue145
4.9.3 aggregateByKey或foldByKey146
4.9.4 groupByKey+map147
4.9.5 Scala原生实现wordCount148
4.9.6 combineByKey149
4.10 本章小结150
第5章 RDD的Shuffle详解151
5.1 Shuffle的概念及历史151
5.1.1 Shuffle的概念151
5.1.2 Shuffle演进的历史152
5.2 Shuffle的验证及复用性153
5.2.1 案例:reduceByKey一定会Shuffle吗153
5.2.2 案例:join操作一定会触发Shuffle吗155
5.2.3 Shuffle数据的复用实验156
5.3 HashShuffleManager160
5.3.1 HashShuffleManager优化前160
5.3.2 HashShuffleManager优化后161
5.4 SortShuffleManager162
5.4.1 普通运行机制163
5.4.2 Bypass运行机制164
5.5 本章小结164
第6章 Spark共享变量166
6.1 广播变量166
6.1.1 广播变量的使用场景166
6.1.2 广播变量的实现原理168
6.1.3 案例:两个集合进行结合168
6.2 累加器170
6.2.1 累加器使用场景170
6.2.2 累加器实现原理171
6.2.3 案例:自定义累加器173
6.2.4 案例:不使用累加器的方案174
6.2.5 案例:使用累加器的方法175
6.3 本章小结176
第7章 Spark序列化和线程安全177
7.1 Spark序列化177
7.1.1 序列化问题的场景177
7.1.2 数据Bean未实现序列化接口178
7.1.3 函数闭包及其示例179
7.2 Task线程安全191
7.2.1 线程不安全及其解决方案191
7.2.2 避免线程不安全的示例192
7.3 本章小结195
第8章 Spark内存管理机制196
8.1 内存管理概述196
8.2 堆内内存和堆外内存的区别197
8.3 堆内内存198
8.4 堆外内存201
8.5 本章小结204
第9章 Spark SQL简介205
9.1 Spark SQL的定义和特性205
9.2 Spark SQL编程抽象206
9.3 Spark SQL快速体验207
9.3.1 程序使用示例208
9.3.2 命令行使用示例209
9.3.3 新的编程入口SparkSession211
9.4 本章小结212
第10章 Spark SQL抽象编程详解213
10.1 DataFrame创建213
10.1.1 使用RDD创建DataFrame214
10.1.2 从结构化文件创建DataFrame220
10.1.3 外部存储服务创建DataFrame224
10.2 DataFrame运算230
10.2.1 SQL风格操作230
10.2.2 DSL风格API(TableApi)语法230
10.3 DataFrame输出236
10.3.1 输出控制台236
10.3.2 输出文件236
10.3.3 输出到RDBMS237
10.3.4 输出到Hive237
10.3.5 DataFrame输出时的分区操作238
10.4 RDD代码和SQL代码混合编程240
10.4.1 Dataset和DataFrame的区别及取数241
10.4.2 由RDD创建DataFrame246
10.4.3 由RDD创建Dataset256
10.5 RDD、Dataset与DataFrame的互相转换261
10.6 本章小结262
第11章 Spark SQL自定义函数263
11.1 用户自定义函数UDF263
11.1.1 UDF函数的概念及其特点263
11.1.2 UDF案例1:字符串处理264
11.1.3 UDF案例2:GEOHASH算法265
11.1.4 UDF案例3:余弦相似度算法269
11.1.5 UDF注意事项271
11.2 用户自定义聚合函数UDAF272
11.2.1 UDAF的编程模板272
11.2.2 UDAF原理讲解273
11.2.3 弱类型用户自定义聚合函数274
11.2.4 强类型用户自定义聚合函数276
11.2.5 UDAF注意事项279
11.3 本章小结279
第12章 Spark SQL源码解读280
12.1 Spark SQL的执行过程280
12.2 元数据管理器SessionCatalog281
12.3 SQL解析成逻辑执行计划281
12.4 Analyzer绑定逻辑计划284
12.5 Optimizer优化逻辑计划286
12.5.1 谓词下推290
12.5.2 列裁剪290
12.5.3 常量替换291
12.5.4 常量累加292
12.6 使用SparkPlanner生成物理计划293
12.7 从物理执行计划获取inputRdd执行296
12.8 本章小结296
第13章 Spark性能调优297
13.1 Spark常规性能调优297
13.1.1 常规性能调优一:最优资源配置297
13.1.2 常规性能调优二:RDD优化298
13.1.3 常规性能调优三:并行度调节299
13.1.4 常规性能调优四:广播大变量299
13.1.5 常规性能调优五:Kryo序列化300
13.1.6 常规性能调优六:调节本地化等待时长300
13.1.7 常规性能调优七:ShuGle调优301
13.1.8 常规性能调优八:JVM调优302
13.2 Spark开发原则优化304
13.2.1 开发原则一:避免创建重复的RDD304
13.2.2 开发原则二:避免创建重复的DataFrame305
13.2.3 开发原则三:尽可能复用同一个RDD305
13.2.4 开发原则四:避免重复性的SQL查询,对DataFrame复用306
13.2.5 开发原则五:注意数据类型的使用307
13.2.6 开发原则六:写出高质量的SQL308
13.3 Spark调优方法310
13.3.1 优化数据结构310
13.3.2 使用缓存(Cache)310
13.3.3 对配置属性进行调优312
13.3.4 合理使用广播314
13.3.5 尽量避免使用Shuffle算子315
13.3.6 使用map-side预聚合的Shuffle操作316
13.3.7 使用高性能算子317
13.3.8 尽量在一次调用中处理一个分区的数据318
13.3.9 对数据进行序列化318
13.4 Spark数据倾斜调优319
13.4.1 调整分区数目319
13.4.2 去除多余的数据320
13.4.3 使用广播将Reduce Join转换为Map Join320
13.4.4 将key进行拆分,大数据转换为小数据321
13.4.5 数据倾斜定位和解决322
13.5 本章小结327
第14章 Spark实战案例328
14.1 Spark Core电影数据分析328
14.1.1 表格及数据样例329
14.1.2 连续登录超过3天的用户DSL风格329
14.1.3 连续登录超过3天的用户SQL风格330
14.1.4 电影统计DSL风格332
14.1.5 电影统计SQL风格333
14.1.6 电影统计运行结果336
14.2 Spark Core日志数据分析337
14.2.1 前期准备338
14.2.2 统计PV和可视化339
14.2.3 统计UV和可视化342
14.2.4 统计TopN和可视化346
14.3 Spark SQL电商数据分析350
14.3.1 数据和表格说明350
14.3.2 加载数据351
14.3.3 计算每年的销售单数和销售总额354
14.3.4 查询每年最大金额的订单及其金额355
14.3.5 计算每年最畅销的货品356
14.4 Spark SQL金融数据分析358
14.4.1 数据准备359
14.4.2 最大值和最小值360
14.4.3 平均值361
14.4.4 样本标准差和总体标准差361
14.4.5 中位数362
14.4.6 四分位数364
14.5 本章小结365
第15章 Spark面试题366
15.1 Spark核心概念面试题366
15.1.1 简述Spark是什么366
15.1.2 简述Spark 3.0的特性367
15.1.3 简述Spark生态系统有哪些组件367
15.1.4 简述Spark的运行流程368
15.1.5 简述Spark的主要功能与特性368
15.1.6 简述Spark中RDD的Partitioner是如何决定的369
15.1.7 简述SparkContext与SparkSession之间的区别是什么369
15.1.8 简述Spark的几种运行模式370
15.1.9 简述DAG为什么适合Spark371
15.1.10 简述DAG如何划分Stage371
15.2 Spark架构原理面试题372
15.2.1 简述Spark SQL的执行原理372
15.2.2 简述Spark SQL执行的流程372
15.2.3 简述Spark相较于MapReduce的优势373
15.2.4 简述RDD的宽依赖和窄依赖产生的原理373
15.2.5 简述Stage的内部逻辑374
15.2.6 简述为什么要根据宽依赖划分Stage374
15.2.7 简述Spark on YARN运行过程374
15.2.8 简述YARN Client与YARN Cluster的区别375
15.2.9 简述Spark的YARN Cluster涉及的参数有哪些376
15.2.10 简述Spark广播变量的实现和原理376
15.3 Spark编程实践面试题377
15.3.1 简述RDD是什么377
15.3.2 简述对RDD机制的理解377
15.3.3 简述RDD的宽依赖和窄依赖378
15.3.4 简述RDD持久化原理是什么378
15.3.5 简述RDD的容错机制378
15.3.6 简述RDD的缓存级别378
15.3.7 简述DAG中为什么要划分Stage380
15.3.8 简述Spark SQL的数据倾斜解决方案380
15.3.9 简述Spark SQL如何将数据写入Hive表381
15.3.10 简述Spark SQL如何使用UDF381
15.4 Spark性能调优面试题382
15.4.1 简述Spark Checkpoint382
15.4.2 简述Spark中Checkpoint和持久化机制的区别383
15.4.3 简述Spark中的OOM问题384
15.4.4 简述Spark程序执行时,如何修改默认Task执行个数384
15.4.5 简述Spark Join操作的优化经验385
15.4.6 简述Map Join的实现原理386
15.4.7 简述Spark Shuffle在什么情况下会产生387
15.4.8 简述Spark Shuffle会在哪些算子中出现387
15.4.9 简述Spark中的Transform和Action387
15.4.10 Spark的Job、Stage、Task如何划分389
15.5 Spark实战应用面试题389
15.5.1 简述Map和flatMap的区别389
15.5.2 简述Map和mapPartition的区别390
15.5.3 简述reduceByKey和groupByKey的区别391
15.5.4 简述DataFrame的Cache和Persist的区别391
15.5.5 简述reduceByKey和reduce的区别392
15.5.6 简述Spark运行时并行度的设置393
15.5.7 简述Spark解决了Hadoop的哪些问题394
15.5.8 简述RDD、DataFrame、Dataset和DataStream的区别395
15.5.9 简述Spark和MapReduce Shuffle的区别395
15.5.10 简述RDD中reduceBykey与groupByKey哪个性能好396
15.6 本章小结396
编辑推荐
(1)清华大学黄永峰教授、江铭虎教授郑重推荐。
(2)本书系统讲解Spark 3.5框架,全部内容都在培训机构长达8年的培训实践中,一遍一遍讲解过,一遍一遍实验过。
(3)本书以通俗易懂的方式详解Spark原生态组件的基础与用法,每一章都结合大量的实战案例,讲解过程中注重知识的系统性和内容的实用性。
(4)本书最后一章还给出Spark在大厂面试中经常问到的问题,精准覆盖工作中常见使用场景及互联网企业面试要点,可以作为面试指南。
(5)作者提供微信群答疑服务,读者在学习过程中碰到问题可以随时请教作者。
(6)配套示例源码、PPT课件、集群环境、教学视频、配图PDF文件、作者微信群答疑服务。
本书特色

本文摘自《Spark大数据开发与应用案例:视频教学版》,获出版社和作者授权发布。
下一篇:没有了