内容介绍
作 者:刘景泽 著
定 价:89
出 版 社:电子工业出版社
出版日期:2019年07月01日
页 数:436
装 帧:简装
ISBN:9787121370519
"我看程序员都是在实践中学习,是先有一个什么需求,现用现学。
——万维纲
人们学习一个编程就是应该在“在解决问题中来学习”。
这本书正是践行这样的规律。
我们认为:具体的,总比抽象的更好理解
我们认为:动手做出的,总是听说的要真实
我们认为:人的认知就应该是从具体到抽象,再从抽象到具体。从抽象到抽象都是不负责的。
我们认为:读者是有感悟力的,只是缺少行动的抓手。
我们认为:买一本书终就是应该带你做出真实有用的,否则就是耍流氓。
希望您可以认真阅读本书的目录,给你一个不一等
●=篇 准备
-
章 认识大数据和Spark2
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 Server16
?2.4.3 实例3:基于Standalone模式部署高可用的Master服务18
?2.4.4 实例4:基于YARN模式部署Spark集群20
?2.4.5 Standalone模式与YARN模式的特点22
2.5 本章小结23
-
第3章 个Spark程序24
3.1 运行个Spark程序24
?3.1.1 实例5:基于Standalone模式运行个Spark程序24
?3.1.2 实例6:基于YARN模式运行个Spark程序27
?3.1.3 提交Spark程序时的参数规范30
3.2 使用spark-shell编写并运行WordCount程序30
?3.2.1 实例7:启动spark-shell31
?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 Core52
4.1 RDD的诞生52
4.2 进一步理解RDD53
?4.2.1 数据存储53
?4.2.2 数据分析55
?4.2.3 程序调度5.3 读取数据并生成RDD57
?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格式的数据
?4.3.6 实例19:读取HDFS中的数据――显式调用Hadoop API66
?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 Core81
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 缓存RDD130
?6.1.1 缓存RDD的基础知识130
?6.1.2 实例33:缓存与释放RDD133
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混合依赖依赖多个父RDD151
?6.3.4 实例36:词频统计――总结运算过程涉及的概念153
累加器(Acculator)155
?.1 认识累加器155
?.2 实例37:使用系统累加器1――长整数、双精度浮点数累加器156
?.3 实例38:使用系统累加器2――集合累加器159
?.4 实例39:自定义累加器160
6.5 广播(Broadcast)――将数据块缓存到所有节点1
?6.5.1 认识广播165
?6.5.2 实例40:使用广播补全数据165
6.6 本章小结168
-
第7章 用SQL语法分析结构化数据――基于Spark SQL169
7.1 为什么会产生Spark SQL169
7.2 认识DataFrame与Dataset数据类型170
?7.2.1 认识DataFrame170
?7.2.2 认识Dataset171
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与HiveContext178
?7.4.2 认识SparkSession178
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:实现“一进一出”的UDF195
?7.6.2 实例49:实现“多进一出”的UDAF198
?7.6.3 实例50:实现“一进多出”的UDTF208
7.7 集成Spark SQL与Hive211
?7.7.1 已经部署Hive框架211
?7.7.2 尚未部署Hive框架215
7.8 本章小结215
-
第8章 实时处理流式数据――基于Spark Streaming216
8.1 为什么会产生Spark Streaming216
8.2 个Spark Streaming程序216
?8.2.1 实例51:用spark-shell编写程序216
?8.2.2 实例52:用IDEA编写程序221
8.3 什么是DStream222
?8.3.1 认识DStream222
?8.3.2 认识DStreamGraph223
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. 实例61:对Dstream进行join操作267
8.7 DStream中的转换分类269
?8.7.1 无状态转换269
?8.7.2 有状态转换270
?8.7.3 实例:用有状态转换做全局词频统计270
8.8 在Spark Streaming中的缓存与Checkpoint272
?8.8.1 认识Spark Streaming中的Checkpoint273
?8.8.2 实例62:使用Spark Streaming中的Checkpoint273
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 实例:合理关闭一个运行中的Spark Streaming程序281
8.11 本章小结284
=
第4篇 高阶
-
第9章 实时处理流式数据――基于Structured Streaming286
9.1 为什么会产生Structured Streaming286
9.2 个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 DataFrame292
?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. 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 Processing373
9.15 本章小结374
-
0章 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篇 商业项目实战
-
1章 实战:学生学习情况分析系统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 实时发送数据到Kafka399
?11.3.4 实时分析平台答题数据402
?11.3.5 构建推荐模型405
?11.3.6 实时推荐题目411
?11.3.7 离线学情分析415
11.4 本章小结422
讲解了网络大数据时代应运而生的、能高效迅捷地分析处理数据的工具――Spark,它带领读者快速掌握用 Spark 收集、计算、简化和保存海量数据的方法,学会交互、迭代和增量式分析,解决分区、数据本地化和自定义序列化等问题。
刘景泽 著
"刘景泽
全栈工程师,长期从事大数据的研发工作,拥有丰富的大数据开发经验。
曾担任多家企的主力研发,并负责大数据云服务组件开发。
精通Java、Scala、Python等多种编程语言,擅长大数据生态圈的研发、算法、逆向工程等技术。
为多家企业提供技术支持,并长期面向企业一线开发人员分享实战经验。
"