Spark大数据分析——源码解析与实例详解
  • 推荐0
  • 收藏1
  • 浏览144

Spark大数据分析——源码解析与实例详解

刘景泽 (作者) 

  • 书  号:978-7-121-37051-9
  • 出版日期:2019-07-29
  • 页  数:436
  • 开  本:16(185*235)
  • 出版状态:上市销售
  • 维护人:吴宏伟
纸质版 ¥89.00
讲解了网络大数据时代应运而生的、能高效迅捷地分析处理数据的工具——Spark,它带领读者快速掌握用 Spark 收集、计算、简化和保存海量数据的方法,学会交互、迭代和增量式分析,解决分区、数据本地化和自定义序列化等问题。
过程完整:从基础配置过程一直到真正的商业项目开发
例子丰富:90个“实例”,1 个完整项目
原理清晰:重点概念、操作、思路都有图示,避免抽象理解
代码详尽:所有实例都有详细的代码,所有代码都有详尽的解读
知识点新:包含Structured Streaming详解
阅读感好:采用短段、短句,可以流畅阅读
辐射面广:讲解了Spark与周边框架的交互
服务完善:读者可加入本书QQ学习群在线交流
Kotlin是JetBrains公司在2010年推出的一门基于JVM平台的编程语言。Kotlin代码在被编译为字节码文件后,可以在任何支持JVM的平台(包括Windows、Mac、Linux和各种嵌入式系统)上运行。目前,Kotlin语言除支持被编译为字节码文件外,还支持被编译为JavaScript文件,可以运行在浏览器端,是一门真正意义上的跨平台语言。
2014年,由于项目需要,我要找到一门与Java具有良好兼容性、能够直接调用Java类库来编写Android应用程序的JVM语言。在尝试了Groovy、Scala和Clojure等语言后,我发现,这些语言要么编译速度较慢,要么基础类库过大,并不适合用于移动端开发。最后我接触了当时还没有什么名气的Kotlin语言。那时我的感受是:这门语言拥有Scala语言的大部分常用功能,但是核心库却小了很多,可以更好地避免出现“方法数超限”等问题。但由于当时的版本还比较低,API变化非常频繁,最终我只是用Kotlin编写一些工具库及公司内部的应用程序,并没有将Kotlin语言运用到对外的完整项目中。在2017年5月的Google I/O大会上,Google宣布Kotlin将和Java一样作为Android的官方开发语言,我意识到时机已到,开始全面在项目中应用Kotlin。现在,我希望将这门出色的语言分享给更多的人。
本书综合了我的多年开发经验,写作上力求由浅入深,以“简洁的语言+大量实例”进行讲解,希望带给各个层次的读者一个较为轻松的学习体验。
本书特色
1. 读者无须有Java基础
考虑到部分读者没有太多的编程经验,因此书中对于很多编程基础知识都进行了相应的介绍。即使读者没有任何Java基础,也能顺利读懂本书。
2. 知识点全
本书针对Kotlin于2018年年底推出的1.3.0版本,不但讲解了大量官方文档中所没有的知识点,而且还讲解了Kotlin中部分直接由Java实现的功能的底层细节。
3. 合理的章节安排
本书结合了我多年学习各种编程语言的经验,采用由浅入深、层层递进的结构,可以帮助读者按照合理的顺序学习一个个知识点。读者在学完本书后,甚至可以按照这个结构自行学习其他任何编程语言。
4. 大量典型实例
本书除讲解基础语法外,也注重项目实战。每个知识点后面都至少有一个实例,以便帮助读者更好地理解和掌握。建议读者在学习知识点时,可以根据实例举一反三进行自主练习。
5. 每章都配有总结,便于复习
本书大部分章后都附带一个简短的小结。建议读者在学完一章后按照小结内容进行回顾,如果有遗忘的知识点立即进行复习。
本书读者对象
? 没有太多的编程经验,但是对Kotlin语言感兴趣的人;
? Java后台开发人员;
? 移动应用程序开发人员;
? 立志于“大前端”的前端开发人员;
? 有其他JVM编程语言经验的开发人员;
? 相关授课老师;
? 大中专院校的相关专业的学生。
本书需要的软/硬件支持
以下软件适用于本书的所有章节:
? Windows/macOS/Linux;
? Java 1.8;
? Kotlin 1.3.0以上;
? IntellJ IDEA 2018.3社区版以上。
在阅读到本书第5篇时,建议安装以下两个软件:
? Android Studio 3.2以上;
? Visual Studio Code 1.31.0以上。
本书对硬件没有特定要求,但由于Android Studio和IDEA都比较耗费内存,所以建议读者所使用的计算机物理内存最好大于4GB,这样在编写实例时可以有更好的编程体验。

目录

=第1篇 准备
-
第1章 认识大数据和Spark 2
1.1 大数据的介绍 2
1.2 Apache Spark能做什么 3
1.3 其他分布式数据处理框架 4
1.4 如何使用本书 4
∣1.4.1 需要提前具备的基础 4
∣1.4.2 准备相关开发环境 4
∣1.4.3 如何学习本书 5
-
第2章 安装与配置Spark集群 6
2.1 下载Spark安装包 6
2.2 检查与准备集群环境 7
2.3 了解目前集群中已经部署的框架服务 11
2.4 部署Spark集群 12
∣2.4.1 实例1:基于Standalone模式部署Spark集群 12
∣2.4.2 实例2:部署Spark的历史服务——Spark History Server 16
∣2.4.3 实例3:基于Standalone模式部署高可用的Master服务 18
∣2.4.4 实例4:基于YARN模式部署Spark集群 20
∣2.4.5 Standalone模式与YARN模式的特点 22
2.5 本章小结 23
-
第3章 第1个Spark程序 24
3.1 运行第1个Spark程序 24
∣3.1.1 实例5:基于Standalone模式运行第1个Spark程序 24
∣3.1.2 实例6:基于YARN模式运行第1个Spark程序 27
∣3.1.3 提交Spark程序时的参数规范 30
3.2 使用spark-shell编写并运行WordCount程序 30
∣3.2.1 实例7:启动spark-shell 31
∣3.2.2 实例8:在spark-shell中编写WordCount程序 32
3.3 使用IDEA编写并运行WordCount程序 34
∣3.3.1 实例9:准备开发环境,并构建代码工程 34
∣3.3.2 实例10:使用IDEA编写WordCount程序 41
∣3.3.3 实例11:在IDEA中本地运行WordCount程序 44
∣3.3.4 实例12:在IDEA中远程运行WordCount程序 46
∣3.3.5 实例13:打包程序,并提交至集群运行 48
3.4 本章小结 49
=
第2篇 入门
-
第4章 读写分布式数据——基于Spark Core 52
4.1 RDD的诞生 52
4.2 进一步理解RDD 53
∣4.2.1 数据存储 53
∣4.2.2 数据分析 55
∣4.2.3 程序调度 56
4.3 读取数据并生成RDD 57
∣4.3.1 实例14:读取普通文本数据 58
∣4.3.2 实例15:读取JSON格式的数据 59
∣4.3.3 实例16:读取CSV、TSV格式的数据 61
∣4.3.4 实例17:读取SequenceFile格式的数据 62
∣4.3.5 实例18:读取Object格式的数据 64
∣4.3.6 实例19:读取HDFS中的数据——显式调用Hadoop API 66
∣4.3.7 实例20:读取MySQL数据库中的数据 68
4.4 保存RDD中的数据到外部存储 70
∣4.4.1 实例21:保存成普通文本文件 70
∣4.4.2 实例22:保存成JSON文件 71
∣4.4.3 实例23:保存成CSV、TSV文件 73
∣4.4.4 实例24:保存成SequenceFile文件 74
∣4.4.5 实例25:保存成Object文件 75
∣4.4.6 实例26:保存成HDFS文件——显式调用Hadoop API的方式 76
∣4.4.7 实例27:写入MySQL数据库 78
4.5 本章小结 80
-
第5章 处理分布式数据——基于Spark Core 81
5.1 RDD的转换(transformations)操作——转换数据形态 81
∣5.1.1 实例28:基础转换操作 81
∣5.1.2 实例29:键值对转换操作 103
5.2 RDD的行动(actions)操作——触发执行任务计划 115
∣5.2.1 实例30:基础行动操作 116
∣5.2.2 实例31:键值对行动操作 125
∣5.2.3 实例32:数值行动操作 127
5.3 本章小结 128
=
第3篇 进阶
-
第6章 RDD的高级操作 130
6.1 缓存RDD 130
∣6.1.1 缓存RDD的基础知识 130
∣6.1.2 实例33:缓存与释放RDD 133
6.2 RDD的检查点(Checkpoint)机制 139
∣6.2.1 了解Checkpoint机制 139
∣6.2.2 实例34:使用Checkpoint机制 141
∣6.2.3 Checkpoint机制的工作流程 144
6.3 RDD的依赖关系 145
∣6.3.1 窄依赖(narrow dependencies) 145
∣6.3.2 宽依赖(wide/shuffle dependencies) 148
∣6.3.3 实例35:让子RDD混合依赖依赖多个父RDD 151
∣6.3.4 实例36:词频统计——总结运算过程涉及的概念 153
6.4 累加器(Accumulator) 155
∣6.4.1 认识累加器 155
∣6.4.2 实例37:使用系统累加器1——长整数、双精度浮点数累加器 156
∣6.4.3 实例38:使用系统累加器2——集合累加器 159
∣6.4.4 实例39:自定义累加器 160
6.5 广播(Broadcast)——将数据块缓存到所有节点 164
∣6.5.1 认识广播 165
∣6.5.2 实例40:使用广播补全数据 165
6.6 本章小结 168
-
第7章 用SQL语法分析结构化数据——基于Spark SQL 169
7.1 为什么会产生Spark SQL 169
7.2 认识DataFrame与Dataset数据类型 170
∣7.2.1 认识DataFrame 170
∣7.2.2 认识Dataset 171
7.3 实例41:通过Dataset、DataFrame分析用户数据 172
∣7.3.1 用spark-shell编写程序 172
∣7.3.2 用IDEA编写程序 175
7.4 不同Spark版本的操作差异 177
∣7.4.1 认识SQLContext与HiveContext 178
∣7.4.2 认识SparkSession 178
7.5 DataFrame、Dataset的基本操作 179
∣7.5.1 DSL与SQL的语法风格 179
∣7.5.2 使用临时视图的注意事项 181
∣7.5.3 实例42:读取JSON、CSV格式的数据 183
∣7.5.4 实例43:读取Parquet格式的数据 185
∣7.5.5 实例44:读取代码中动态生成的数据 185
∣7.5.6 实例45:读取关系型数据库中的数据 188
∣7.5.7 实例46:输出Dataset、DataFrame中的数据 189
∣7.5.8 实例47:RDD、DataFrame、Dataset之间的相互转换 192
7.6 用户自定义函数 195
∣7.6.1 实例48:实现“一进一出”的UDF 195
∣7.6.2 实例49:实现“多进一出”的UDAF 198
∣7.6.3 实例50:实现“一进多出”的UDTF 208
7.7 集成Spark SQL与Hive 211
∣7.7.1 已经部署Hive框架 211
∣7.7.2 尚未部署Hive框架 215
7.8 本章小结 215
-
第8章 实时处理流式数据——基于Spark Streaming 216
8.1 为什么会产生Spark Streaming 216
8.2 第1个Spark Streaming程序 216
∣8.2.1 实例51:用spark-shell编写程序 216
∣8.2.2 实例52:用IDEA编写程序 221
8.3 什么是DStream 222
∣8.3.1 认识DStream 222
∣8.3.2 认识DStreamGraph 223
8.4 读取数据到DStream中 227
∣8.4.1 实例53:读取HDFS文件夹中的数据 227
∣8.4.2 实例54:读取RDD组成的数据队列 229
∣8.4.3 实例55:实时读取Flume中的数据 230
∣8.4.4 实例56:用高阶API实时读取Kafka中的数据 235
∣8.4.5 实例57:用低阶API实时读取Kafka中的数据 242
8.5 Spark Streaming中的几个时间概念 251
∣8.5.1 批处理间隔 251
∣8.5.2 窗口时间宽度与滑动时间宽度 252
∣8.5.3 实例58:使用窗口操作,每两秒钟统计10秒内的平均温度 254
8.6 DStream的操作总结 259
∣8.6.1 DStream的操作说明 259
∣8.6.2 实例59:直接面向DStream中的RDD进行数据分析 261
∣8.6.3 实例60:将DStream中的数据实时输出至外部存储系统 263
∣8.6.4 实例61:对Dstream进行join操作 267
8.7 DStream中的转换分类 269
∣8.7.1 无状态转换 269
∣8.7.2 有状态转换 270
∣8.7.3 实例:用有状态转换做全局词频统计 270
8.8 在Spark Streaming中的缓存与Checkpoint 272
∣8.8.1 认识Spark Streaming中的Checkpoint 273
∣8.8.2 实例62:使用Spark Streaming中的Checkpoint 273
8.9 Spark Streaming中的累加器与广播变量 276
∣8.9.1 认识累加器与广播变量 276
∣8.9.2 实例63:自定义累加器,并结合无状态转换,实现实时的全局词频统计 276
8.10 关闭Spark Streaming程序 280
∣8.10.1 关闭程序的方案 281
∣8.10.2 实例64:合理关闭一个运行中的Spark Streaming程序 281
8.11 本章小结 284
=
第4篇 高阶
-
第9章 实时处理流式数据——基于Structured Streaming 286
9.1 为什么会产生Structured Streaming 286
9.2 第1个Structured Streaming程序 287
∣9.2.1 实例65:用spark-shell编写程序 287
∣9.2.2 实例66:用IDEA编写程序 289
9.3 Structured Streaming的编程模型 291
9.4 输入数据——生成Streaming Dataset、 Streaming DataFrame 292
∣9.4.1 实例67:根据文件生成工作流 292
∣9.4.2 实例68:根据文件、文件夹生成自动分区的工作流 295
∣9.4.3 实例69:根据Kafka以Streaming模式生成工作流 297
∣9.4.4 实例70:以Kafka为数据源,通过Batch方式生成工作流 300
∣9.4.5 实例71:根据指定速率生成工作流 304
9.5 基于事件时间的窗口操作 305
∣9.5.1 事件时间窗口的工作方式 305
∣9.5.2 实例72:事件时间窗口的生成规则 307
∣9.5.3 实例73:基于事件时间窗口实现词频统计 311
9.6 基于Watermark处理延迟数据 314
∣9.6.1 Watermark的作用 314
∣9.6.2 实例74:基于Update模式实现词频统计,并结合Watermark处理延迟数据 314
∣9.6.3 实例75:基于Append模式实现词频统计,并结合Watermark处理延迟数据 320
∣9.6.4 Watermark的底层工作原理 322
∣9.6.5 总结:Watermark机制与输出模式 329
9.7 实例76:在处理流式数据时去除重复数据 330
9.8 Structured Streaming中的join操作 332
∣9.8.1 实例77:在Stream-Static模式下的inner join操作 333
∣9.8.2 实例78:在Stream-Stream模式下的inner join操作 335
∣9.8.3 总结:已经支持的join操作 340
9.9 在Structured Streaming中实现数据分组, 并手动维护分组状态 341
∣9.9.1 实例79:通过mapGroupsWithState实现数据分组,并手动维护分组状态 341
∣9.9.2 实例80:通过flatMapGroupsWithState实现数据分组,并手动维护分组状态 347
∣9.9.3 总结:手动维护状态与Watermark的使用技巧 352
9.10 输出分析结果 353
∣9.10.1 输出模式(Output Mode)的使用场景 353
∣9.10.2 实例81:基于File Sink输出数据 354
∣9.10.3 实例82:基于Kafka Sink,以Streaming方式输出数据 356
∣9.10.4 实例83:基于Kafka Sink,以Batch方式输出数据 358
∣9.10.5 实例84:基于Console Sink输出数据 360
∣9.10.6 实例85:基于Memory Sink输出数据 360
∣9.10.7 实例86:基于Foreach Sink输出数据 362
∣9.10.8 实例87:基于ForeachBatch Sink输出数据 367
∣9.10.9 总结:不同Sink所适用的输出模式 369
9.11 Trigger触发器的分类 370
9.12 管理与监控工作流 370
∣9.12.1 管理工作流 370
∣9.12.2 监控工作流 372
9.13 Structured Streaming中的Checkpoint机制 372
9.14 连续处理模式——Continuous Processing 373
9.15 本章小结 374
-
第10章 Spark的相关优化 375
10.1 优化Spark程序 375
∣10.1.1 实例88:尽可能减少或避免出现Shuffle过程 375
∣10.1.2 实例89:使用Kryo作为序列化方案 377
∣10.1.3 尽可能批量操作数据 381
∣10.1.4 合理设置分区数 381
∣10.1.5 合理设置批处理间隔 381
10.2 优化数据 382
∣10.2.1 关于数据倾斜 382
∣10.2.2 实例90:使用自定义Partitioner缓解数据倾斜 383
∣10.2.3 关于数据补全 387
10.3 调优资源 388
10.4 本章小结 390
=
第5篇 商业项目实战
-
第11章 实战:学生学习情况分析系统 392
11.1 项目概述 392
∣11.1.1 业务背景 392
∣11.1.2 划分业务模块 392
11.2 开发环境说明 393
11.3 项目实现 394
∣11.3.1 构建工程 394
∣11.3.2 模拟数据 395
∣11.3.3 实时发送数据到Kafka 399
∣11.3.4 实时分析平台答题数据 402
∣11.3.5 构建推荐模型 405
∣11.3.6 实时推荐题目 411
∣11.3.7 离线学情分析 415
11.4 本章小结 422



读者评论

图书类别

相关图书

狼书(卷2):Node.js Web应用开发

桑世龙 (作者)

目前市面的nodejs书籍基于0.10的为多,而基于最新4.X的非常少,本书是唯一一本基于node.js 4.0以上版本的书。而Koa是下一代node web的...

¥99.00

Spring Boot实战派

龙中华 (作者)

本书针对Spring Boot 2.0以上版本,采用“知识点+实例”的形式编写。通过“58个基于知识的实例 + 2个综合性的项目”,深入地讲解Spring Bo...

¥109.00

写给大众的Java编程书

汪泳 (作者)

这是一本非常有趣的计算机编程普及书。<br>全书通过浅显易懂的生活实例、娓娓道来的谈话式文字和生动活泼的漫画风插图,把枯燥乏味的计算机编程学习,变成了一场轻松愉...

¥59.00

人工智能之从零开始搭建一个对话机器人系统

周德标 (作者)

对话系统是人工智能应用的一个重要领域。<br>本书将讲解如何自己搭建一个对话机器人系统。首先讲解对话机器人系统的入门知识、基础理论,然后讲解怎么搭建一个通用的对...

¥69.00

Flutter:从0到1构建大前端应用

何瑞君 (作者)

本书是Flutter从基础入门到进阶实战的教程书,也是一本面向大前端的新技术书。Flutter是谷歌新推出的一个跨平台的、开源的UI框架,同时支持iOS系统和A...

 

狼书(卷1):更了不起的Node.js

狼叔 桑世龙 (作者)

Node.js开发简单,性能极好,一经发布便成了明星级项目。随着大前端领域的蓬勃发展,跨平台开发、API构建、Web应用开发等场景愈加常见,Node.js也成为...