《Spark Streaming实时流式大数据处理实战》
Spark Streaming实时流式
大数据处理实战
肖力涛 编著
前言
为什么要写这本书?
对于计算机从业人员和在校大学生而言,多少都会接触到数据处理,如简单的信息管理系统和利用关系型数据库设计的存储系统等,这类系统通常涉及的数据量比较小。而随着互联网的发展,企业内部的数据量也呈现爆炸式增长,随之而来的大数据处理就会是一件非常棘手的事情。所以近年来随着大数据概念的火爆,也涌现出了越来越多的大数据处理平台,如Hadoop、Hive、HBase、Flume、Kafka、Storm和Spark等,让人眼花缭乱。开发人员需要针对具体的场景和任务特点,选择合适的工具,将它们组合起来以完成任务。
本书围绕大数据处理领域应用最广泛的Spark平台展开讲解,并对时下比较热门的大数据平台都有所介绍,以此为基础重点切入流式大数据处理这个比较垂直和常用的领域,对Spark Streaming、Kafka和ZooKeeper等大数据处理工具进行介绍,并给出多个实战案例,让读者能够从零到一学习如何构建一个大数据处理任务,掌握如何选择合适的处理工具,以及学习编程中一些常见的技巧。
本书特色
1.内容丰富,讲解详细
本书对大数据的相关知识体系做了详细阐述,并对Spark平台和Spark Streaming及其涉及的大数据平台做了重点阐述,以方便读者掌握常用的大数据架构平台。
2.原理分析与应用实践并重
本书对涉及的知识点详细地阐述了其背后的基本原理,并给出了大量的应用实践,便于读者更加透彻地理解所学知识,从而在调优和排查问题等具体实践时更加得心应手。
3.详解大量的应用实例和实战案例
本书中的每个章节都安排了实例,以方便读者动手演练。另外,第8~10章还给出了3个实战案例,以帮助读者提高实际的项目开发水平。这些案例改写自笔者和同事在工作中的真实应用案例,有较高的实用价值,读者在实践中可以进行借鉴。
4.提供详细的源代码
笔者对书中涉及的所有源代码都进行了整理并开源,供读者下载使用。读者可以对这些代码稍加修改,即可用于自己的项目中。
本书内容
第1篇 Spark基础(第1~3章)
本篇重点围绕Spark平台进行讲解,并具体就如何搭建一个自己的Spark集群进行了详细介绍,为后面的实战演练打下基础。
第1章初识Spark,从Spark的历史发展出发,重点介绍了流式处理任务,对比了不同流式处理框架,并介绍了Spark Streaming的特点。
第2章Spark运行与开发环境,主要介绍了如何搭建Spark集群,以及如何从零到一开始开发Spark应用程序,最后对从文件中进行词频统计的Spark应用做了介绍。
第3章Spark编程模型,对Spark的核心编程模型做了详细讲解,这对于开发Spark应用及Spark Streaming应用优化来说都是必要的。另外,本章还对RDD的各种操作做了讲解。
第2篇 Spark Streaming详解(第4~7章)
本篇重点阐述了Spark Streaming的编程模型和特点,并将一些常用的大数据平台与Spark Streaming相结合进行讲解,最后对Spark Streaming应用中常见的调优实践进行了总结。
第4章Spark Streaming编程模型及原理,着重介绍了Spark Streaming的运行原理,并且讲解了Spark Streaming应用开发的必要知识,最后以Spark Streaming接收网络输入流并进行词频统计进行实例演练。
第5章Spark Streaming与Kafka,重点介绍了Spark Streaming与Kafka配合使用的相关知识点,并介绍了在部署时常见的ZooKeeper平台,最后利用Kafka作为Spark Streaming的输入源进行分析操作。
第6章Spark Streaming与外部存储介质,主要介绍了流式处理任务中如何将处理结果输出到外部存储介质等相关知识。本章就一些常用的数据库与Spark Streaming结合进行讲解,最后结合日志分析实例,将日志文件分析后输出到MySQL中,可以让读者了解整个流程。
第7章Spark Streaming调优实践,介绍了在实际生产中如何根据具体的数据量和任务情况对Spark Streaming进行优化修改,并且以一个具体的项目调优实例讲解调优的分析过程。
第3篇 Spark Streaming案例实战(第8~10章)
经过前两篇的学习,读者应该已经掌握了Spark和Spark Streaming的基本原理及开发技术。本篇在此基础上进行实战演练,带领读者完成3个大数据项目实战案例。
第8章实时词频统计处理系统实战,针对文本数据常见的流式处理任务,通过一个实战案例,对词频统计从设计、实现到部署的相关知识进行了详细讲解。
第9章用户行为统计实战,通过一个实战案例,介绍了在广告行为分析和推荐系统中如何对用户行为进行统计分析。
第10章监控报警系统实战,对监控报警系统提出了一种架构上的设计思路,即以Kafka为数据总线串联,利用爬虫技术爬取数据,再用Spark Streaming进行过滤处理和后续的归纳汇总报警。
附录A Scala语言基础,对本书在讲解时所采用的Spark源生语言Scala的基础知识做了简单讲解,用于帮助对Scala还不是很熟悉的读者。
本书读者对象
阅读本书需要读者有一定的编程经验,建议读者最好对Java和C++等面向对象编程语言有一定的了解。具体而言,本书主要适合以下读者阅读:
* 有一定编程基础的Spark初学者;
* 了解Spark,想进一步使用Spark Streaming的从业人员;
* 流式大数据处理程序员;
* 对Spark和Spark Streaming感兴趣的程序员;
* 高校相关专业的学生;
* 大数据技术培训机构的学员。
本书阅读建议
* 基础相对薄弱的读者,可以先从附录开始了解Scala语言的特性,然后从第1章顺次阅读本书。
* Java基础良好的读者可以直接顺次阅读本书,阅读中涉及的Scala语言特性可在附录中查阅。
* 对Spark有所了解的读者可以直接从本书第2篇开始阅读,即从本书第4章开始阅读。
* 对Spark及Spark Streaming比较熟悉的读者,可以直接动手演练本书第3篇中的3个实战案例。
* 学习时一定要亲自动手编写代码进行实践,再结合实际场景才能更好地掌握相关技术。
本书配套资源
本书涉及的所有源代码都已经开源并提供在了GitHub上,读者可以根据自己的需要进行下载,下载地址为https://github.com/xlturing/spark-streaming-action。另外,读者也可以登录华章公司的网站www.hzbook.com,在该网站上搜索到本书,然后单击“资料下载”按钮,再单击页面上的“配书资源”链接进行下载。
读者反馈
由于笔者水平所限,书中可能还存在一些疏漏,敬请读者指正,笔者会及时进行调整和修改。联系我们可通过电子邮箱litaoxiao@gmail.com或hzbook2017@163.com。笔者会将一些反馈信息整理在博客中(http://www.cnblogs.com/xlturing)。另外也欢迎读者关注笔者的微信公众号pang tao1027/互联网技术猿,笔者会定期分享一些技术文章。
致谢
感谢洪福兴在第9章内容上给予笔者的宝贵意见!
感谢在腾讯工作期间,辛愿、李铮、刘绩刚和方亮等人给予笔者的指导与帮助!
感谢本书编辑在本书出版过程中给予笔者的大力支持与帮助!
最后感谢我的家人在写书上给予我的理解与支持,在遇到挫折和困难时,我的家人都坚定地支持着我。爱你们!
肖力涛
目录
前言
3.4.1 窄依赖(Narrow Dependency) 42
3.4.2 Shuffle依赖(宽依赖Wide Dependency) 43
3.6 RDD持久化(Cachinng/Persistence) 46
3.7.2 广播变量(Broadcast Variables) 50
第2篇 Spark Streaming详解
第4章 Spark Streaming编程模型及原理 58
4.1 DStream数据结构 58
4.2 DStream操作 59
4.2.1 DStream Transformation操作 59
4.2.2 DStream输出操作 63
4.3 Spark Streaming初始化及输入源 63
4.3.1 初始化流式上下文(StreamingContext) 63
4.3.2 输入源及接收器(Receivers) 64
4.4 持久化、Checkpointing和共享变量 65
4.4.1 DStream持久化(Caching/Persistence) 65
4.4.2 Checkpointing操作 66
4.5 实例——Spark Streaming流式词频统计 69
4.6 本章小结 73
第5章 Spark Streaming与Kafka 75
5.1 ZooKeeper简介 75
5.1.1 相关概念 75
5.1.2 ZooKeeper部署 77
5.2 Kafka简介 79
5.2.1 相关术语 80
5.2.2 Kafka运行机制 81
5.2.3 Kafka部署 83
5.2.4 简单样例 85
5.3 Spark Streaming接收Kafka数据 86
5.3.1 基于Receiver的方式 87
5.3.2 直接读取的方式 88
5.4 Spark Streaming向Kafka中写入数据 90
5.5 实例——Spark Streaming分析Kafka数据 92
5.6 本章小结 101
第6章 Spark Streaming与外部存储介质 102
6.1 将DStream输出到文件中 102
6.2 使用foreachRDD设计模式 105
6.3 将DStream输出到MySQL中 106
6.3.1 MySQL概述 107
6.3.2 MySQL通用连接类 107
6.3.3 MySQL输出操作 108
6.4 将DStream输出到HBase中 109
6.4.1 HBase概述 109
6.4.2 HBase通用连接类 110
6.4.3 HBase输出操作 111
6.4.4 “填坑”记录 112
6.5 将DStream数据输出到Redis中 112
6.5.1 Redis安装 112
6.5.2 Redis概述 113
6.5.3 Redis通用连接类 113
6.5.4 输出Redis操作 115
6.6 实例——日志分析 115
6.7 本章小结 122
第7章 Spark Streaming调优实践 124
7.1 数据序列化 124
7.2 广播大变量 126
7.3 数据处理和接收时的并行度 127
7.4 设置合理的批处理间隔 128
7.5 内存优化 128
7.5.1 内存管理 129
7.5.2 优化策略 130
7.5.3 垃圾回收(GC)优化 131
7.5.4 Spark Streaming内存优化 132
7.6 实例——项目实战中的调优示例 133
7.6.1 合理的批处理时间(batchDuration) 133
7.6.2 合理的Kafka拉取量(maxRatePerPartition参数设置) 134
7.6.3 缓存反复使用的Dstream(RDD) 135
7.6.4 其他一些优化策略 135
7.6.5 结果 136
7.7 本章小结 138
第3篇 Spark Streaming案例实战
第8章 实时词频统计处理系统实战 140
8.1 背景与设计 140
8.2 代码实现 142
8.2.1 数据生成器 142
8.2.2 分词服务 146
8.2.3 流式词频统计 147
8.3 环境配置与运行 158
8.3.1 相关服务启动 158
8.3.2 查看结果 160
8.4 本章小结 163
第9章 用户行为统计实战 164
9.1 背景与设计 164
9.1.1 不同状态的保存方式 164
9.1.2 State设计 166
9.1.3 Redis存储 167
9.2 代码实现 167
9.2.1 数据生成器 167
9.2.2 用户行为统计 168
9.3 环境配置与运行 172
9.3.1 相关服务启动 172
9.3.2 查看结果 173
9.4 本章小结 175
第10章 监控报警系统实战 177
10.1 背景与设计 177
10.2 代码实现 179
10.2.1 简易爬虫子项目 179
10.2.2 流式处理子项目 184
10.2.3 归纳统计子项目 191
10.2.4 数据表情况 199
10.3 环境配置与查看 200
10.3.1 启动各个模块 200
10.3.2 查看结果 200
10.4 本章小结 203
附录A Scala语言基础 204
A.1 安装及环境配置 204
A.1.1 安装Scala 204
A.1.2 开发环境配置 205
A.2 Scala语法独特性 206
A.2.1 换行符 207
A.2.2 统一类型 207
A.2.3 Scala变量 208
A.2.4 条件和循环语句 209
A.2.5 函数和方法 210
A.2.6 特质、单例和样例类 213
A.3 Scala集合 215
A.3.1 集合框架 216
A.3.2 核心特质(Trait) 219
A.3.3 常用的不可变集合类 222
A.3.4 常用的可变集合类 225
A.3.5 字符串 227
A.3.6 数组 228
A.3.7 迭代器(Iterators) 230
A.4 其他常用特性 231
A.4.1 模式匹配 231
A.4.2 异常处理 232
A.4.3 文件I/O 233
- 点赞
- 收藏
- 关注作者
评论(0)