编辑推荐
考虑大数据技术背景,本书结合实际用例介绍了应用Apache Storm和Apache Spark进行实时大数据分析的实现过程,为读者提供了快速设计、应用和部署实时分析所需的技术。
内容简介
本书详细阐述了实时大数据分析的实现过程,主要包括大数据技术前景及分析平台;熟悉Storm平台;用Storm处理数据;Trident介绍和Storm性能优化;熟悉Kinesis;熟悉Spark;RDD编程;Spark的SQL查询引擎;Spark Streaming分析流数据以及Lambda架构等内容。此外,本书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。
本书适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学教材和参考手册。
目录
目 录
第1章 大数据技术前景及分析平台 1
1.1 大数据的概念 1
1.2 大数据的维度范式 2
1.3 大数据生态系统 3
1.4 大数据基础设施 4
1.5 大数据生态系统组件 5
1.5.1 构建业务解决方案 8
1.5.2 数据集处理 8
1.5.3 解决方案实施 8
1.5.4 呈现 9
1.6 分布式批处理 9
1.7 分布式数据库(NoSQL) 13
1.7.1 NoSQL数据库的优势 15
1.7.2 选择NoSQL数据库 16
1.8 实时处理 16
1.8.1 电信或移动通信场景 17
1.8.2 运输和物流 17
1.8.3 互联的车辆 18
1.8.4 金融部门 18
1.9 本章小结 18
第2章 熟悉Storm 19
2.1 Storm概述 19
2.2 Storm的发展 20
2.3 Storm的抽象概念 22
2.3.1 流 22
2.3.2 拓扑 22
2.3.3 Spout 23
2.3.4 Bolt 23
2.3.5 任务 24
2.3.6 工作者 25
2.4 Storm的架构及其组件 25
2.4.1 Zookeeper集群 25
2.4.2 Storm集群 25
2.5 如何以及何时使用Storm 27
2.6 Storm的内部特性 32
2.6.1 Storm的并行性 32
2.6.2 Storm的内部消息处理 34
2.7 本章小结 36
第3章 用Storm处理数据 37
3.1 Storm输入数据源 37
3.2 认识Kafka 38
3.2.1 关于Kafka的更多知识 39
3.2.2 Storm的其他输入数据源 43
3.2.3 Kafka作为输入数据源 46
3.3 数据处理的可靠性 47
3.3.1 锚定的概念和可靠性 49
3.3.2 Storm的acking框架 51
3.4 Storm的简单模式 52
3.4.1 联结 52
3.4.2 批处理 53
3.5 Storm的持久性 53
3.6 本章小结 58
第4章 Trident概述和Storm性能优化 59
4.1 使用Trident 59
4.1.1 事务 60
4.1.2 Trident 拓扑 60
4.1.3 Trident操作 61
4.2 理解LMAX 65
4.2.1 内存和缓存 66
4.2.2 环形缓冲区—粉碎器的心脏 69
4.3 Storm的节点间通信 72
4.3.1 ZeroMQ 73
4.3.2 Storm的ZeroMQ配置 74
4.3.3 Netty 74
4.4 理解Storm UI 75
4.4.1 Storm UI登录页面 75
4.4.2 拓扑首页 78
4.5 优化Storm性能 80
4.6 本章小结 83
第5章 熟悉Kinesis 84
5.1 Kinesis架构概述 84
5.1.1 Amazon Kinesis的优势和用例 84
5.1.2 高级体系结构 86
5.1.3 Kinesis的组件 87
5.2 创建Kinesis流服务 90
5.2.1 访问AWS 90
5.2.2 配置开发环境 91
5.2.3 创建Kinesis流 93
5.2.4 创建Kinesis流生产者 97
5.2.5 创建Kinesis流消费者 102
5.2.6 产生和消耗犯罪警报 102
5.3 本章小结 105
第6章 熟悉Spark 106
6.1 Spark概述 107
6.1.1 批量数据处理 107
6.1.2 实时数据处理 108
6.1.3 一站式解决方案Apache Spark 110
6.1.4 何时应用Spark—实际用例 112
6.2 Spark的架构 114
6.2.1 高级架构 114
6.2.2 Spark扩展/库 116
6.2.3 Spark的封装结构和API 117
6.2.4 Spark的执行模型—主管-工作者视图 119
6.3 弹性分布式数据集(RDD) 122
6.4 编写执行第一个Spark程序 124
6.4.1 硬件需求 125
6.4.2 基本软件安装 125
6.4.3 配置Spark集群 127
6.4.4 用Scala编写Spark作业 129
6.4.5 用Java编写Spark作业 132
6.5 故障排除提示和技巧 133
6.5.1 Spark所用的端口数目 134
6.5.2 类路径问题—类未找到异常 134
6.5.3 其他常见异常 134
6.6 本章小结 135
第7章 使用RDD编程 136
7.1 理解Spark转换及操作 136
7.1.1 RDD API 137
7.1.2 RDD转换操作 139
7.1.3 RDD功能操作 141
7.2 编程Spark转换及操作 142
7.3 Spark中的持久性 157
7.4 本章小结 159
第8章 Spark的SQL查询引擎——Spark SQL 160
8.1 Spark SQL的体系结构 161
8.1.1 Spark SQL的出现 161
8.1.2 Spark SQL的组件 162
8.1.3 Catalyst Optimizer 164
8.1.4 SQL/Hive context 165
8.2 编写第一个Spark SQL作业 166
8.2.1 用Scala编写Spark SQL作业 166
8.2.2 用Java编写Spark SQL作业 170
8.3 将RDD转换为DataFrame 173
8.3.1 自动化过程 174
8.3.2 手动过程 176
8.4 使用Parquet 179
8.4.1 在HDFS中持久化Parquet数据 182
8.4.2 数据分区和模式演化/合并 185
8.5 Hive表的集成 186
8.6 性能调优和最佳实践 190
8.6.1 分区和并行性 191
8.6.2 序列化 191
8.6.3 缓存 192
8.6.4 内存调优 192
8.7 本章小结 194
第9章 用Spark Streaming分析流数据 195
9.1 高级架构 195
9.1.1 Spark Streaming的组件 196
9.1.2 Spark Streaming的封装结构 198
9.2 编写第一个Spark Streaming作业 200
9.2.1 创建流生成器 201
9.2.2 用Scala编写Spark Streaming作业 202
9.2.3 用Java编写Spark Streaming作业 205
9.2.4 执行Spark Streaming作业 207
9.3 实时查询流数据 209
9.3.1 作业的高级架构 209
9.3.2 编写Crime生产者 210
9.3.3 编写Stream消费者和转换器 212
9.3.4 执行SQL Streaming Crime分析器 214
9.4 部署和监测 216
9.4.1 用于Spark Streaming的集群管理器 216
9.4.2 监测Spark Streaming应用程序 218
9.5 本章小结 219
第10章 介绍Lambda架构 220
10.1 什么是Lambda架构 220
10.1.1 Lambda架构的需求 220
10.1.2 Lambda架构的层/组件 222
10.2 Lambda架构的技术矩阵 226
10.3 Lambda架构的实现 228
10.3.1 高级架构 229
10.3.2 配置Apache Cassandra和Spark 230
10.3.3 编写自定义生产者程序 233
10.3.4 编写实时层代码 235
10.3.5 编写批处理层代码 238
10.3.6 编写服务层代码 239
10.3.7 执行所有层代码 241
10.4 本章小结 243
前言/序言
前 言
对于现代企业而言,处理过去10~20年的历史数据并进行分析以获得提升业务的洞见是当今最为热门的用例。
企业过去曾执迷于数据仓库的开发。通过这些数据仓库,企业努力从每个可能的数据源获取数据并存储下来,再利用各种商业智能工具对数据仓库中存储的数据进行分析。但是开发数据仓库是一个复杂、耗时和大开销的过程,需要相当程度的资金和时间投入。
Hadoop及其生态系统的涌现无疑为海量大数据问题的处理提供了一种新的方法或架构,通过这种低成本、可伸缩的解决方案,过去需要数天时间处理的成TB数据将在几小时内被处理完毕。尽管有着这样的优势,在其他一些需要实时或准实时(如亚秒级服务等级协议SLA)执行分析及获得业务洞见的应用场景中,Hadoop还是面临着批处理性能方面的挑战。这类应用需求可称为实时分析(RTA)或准实时分析(NRTA),有时又被称为“快数据”,后者意味着做出准实时决策的能力,即要在有限的商务决策时间内提供卓有成效的数据支持。
为应对这些企业实时数据分析的应用场景,出现了一些高性能、易于使用的开源平台。Apache Storm和Apache Spark是其中最为引人注目的代表性平台,能够为广大相关用户提供实时数据处理和分析功能。这两个项目都归属于Apache软件基金会。尽管有部分功能重叠,这两个工具平台仍保持着各自的特色和不同功能。
考虑到以上的大数据技术背景,本书结合实际用例介绍了应用Apache Storm和Apache Spark进行实时大数据分析的实现过程,为读者提供了快速设计、应用和部署实时分析所需的技术。
本书内容
第1章“大数据技术前景及分析平台”奠定了全书的知识背景,主要包括大数据前景的综述、大数据平台上采用的各种数据处理方法、进行数据分析所用的各种平台。本章也介绍了实时或准实时批量分布式处理海量数据的范式。此外,还涉及处理高速/高频数据读写任务的分布式数据库。
第2章“熟悉Storm”介绍了实时/准实时数据处理框架Apache Storm的概念、架构及编程方法。这里涉及多种Storm的基本概念,诸如数据源(spouts)、数据流处理组件(bolts)、并行度(parallelism)等。本章还以丰富的应用场景及范例说明如何利用Storm进行实时大数据分析。
第3章“用Storm处理数据”着重于介绍Apache Storm中用于处理实时或准实时数据流的内部操作,如过滤(filters)、连接(joins)、聚合(aggregators)等。这里展示了Storm对Apache Kafka、网络通信接口、文件系统等多种输入数据源的集成,最后利用Storm JDBC框架将处理过的数据保存起来。本章还提到Storm中多种企业关注的数据流处理环节,诸如可靠性、消息获取等。
第4章“Trident概述和Storm性能优化”验证了实时或准实时事务数据的处理。这里介绍了实时处理框架Trident,它主要用于处理事务数据。在此提到使用Trident处理事务应用场景的几种架构。这一章还提到多种概念和可用参数,进而探讨了它们对Storm框架与其任务的监测、优化以及性能调整诸方面的可用性。本章还涉及LMAX、环形缓冲区、ZeroMQ等Storm内部技术。
第5章“熟悉Kinesis”提到了在云上可用的实时数据处理技术Kinesis,此技术是亚马逊云计算平台AWS中的实时数据处理服务。这里先说明了Kinesis的架构和组成部分,接着用一个端到端的实时报警发生范例阐明了Kinesis的用法,其中使用到KCL、KPL等客户端库。
第6章“熟悉Spark”介绍了Apache Spark的基础知识,其中包括Spark程序的高级架构和构建模块。这里先从Spark的纵览开始,接着提到了Spark在各种批处理和实时用户场景中的应用情况。这一章还深入讲到Spark的高级架构和各种组件。在本章的最后部分讨论了Spark集群的安装、配置以及第一个Spark任务的执行实现。
第7章“使用RDD编程”对Spark RDD进行了代码级的预排。这里说明了RDD API提供的各种编程操作支持,以便于使用者轻松实现数据转换和保存操作。在此还阐明了Spark对如Apache Cassandra这样的NoSQL数据库的集成。
第8章“Spark的SQL查询引擎——Spark SQL”介绍了Spark SQL,这是一个和Spark协同工作的SQL风格的编程接口,可以帮助读者将Parquet或Hive这样的数据集快速应用到工作中,并支持通过DataFrame或原始SQL语句构建查询。本章同时推荐了一些Spark数据库的最佳实践案例。
第9章“用Spark Streaming分析流数据”介绍了Spark的又一个扩展工具Spark Streaming,用于抓取和处理实时或准实时的流数据。这里顺承着Spark架构简明扼要地描述了Spark Streaming中用于数据加载、转换、持久化等操作的各种应用编程接口。为达成实时查询数据,本章将Spark SQL和Spark Streaming进行了深入集成。本章最后讨论了Spark Streaming任务部署和监测等方面的内容。
第10章“介绍Lambda架构”引领读者认识了新兴的Lambda架构,这个架构可以将实时和预计算的批量数据结合起来组成一个混合型的大数据处理平台,从其中获得对数据的准实时理解。本章采用了Apache Spark并讨论了Lambda架构在实际应用场景中的实现。
本书阅读基础
本书的读者最好拥有Java或Scala语言的编程经验,对Apache Hadoop等代表性分布式计算平台的基础知识亦有一定了解。
本书适用读者
本书主要面向应用开源技术进行实时分析应用和框架开发的大数据架构师、开发者及程序员群体。这些有实力的开发者阅读本书时可以运用Java或Scala语言的功底来进行高效的核心要素和应用编程实现。
本书会帮助读者直面不少大数据方面的难点及挑战。书里不但包括应用于实时/准实时流数据及高频采集数据处理分析的大量工具和技术,而且涵盖了Apache Storm、Apache Spark、Kinesis等各种工具和技术的内存分布式计算范式。
本书约定
本书应用了一些文本格式以区分不同类型的信息。以下是这些文本格式范例和含义说明。
文中的代码、数据库表名称、文件目录名称、文件名、文件扩展名、路径名、伪URL、用户输入以及推特用户定位采用如下方式表示:
“The PATH variable should have the path to Python installation on your machine.”
代码块则通过下列方式设置:
public class Count implements CombinerAggregator {
@Override
public Long init(TridentTuple tuple) {
return 1L;
}
命令行输入和输出的显示方式如下所示:
> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
图标表示警告提醒或重要的概念。
图标表示提示或相关操作技巧。
读者反馈
欢迎读者对本书反馈意见或建议,以便于我们进一步了解读者的阅读喜好。反馈意见对于我们十分重要,便于我方日后工作的改进。
读者可将这些反馈内容发送邮件到feedback@packtpub.com,建议以书名作为邮件标题。
若读者针对某项技术具有专家级的见解,抑或计划撰写书籍或完善某部著作的出版工作,则可阅读www.packtpub.com/authors中的author guide一栏。
客户支持
感谢您购买本社出版图书,我们将竭诚对每一名读者提供周到的客户服务支持。
示例源码下载
读者可访问http://www.packtpub.com登录您的账户下载本书中的示例代码文件。无论以何种方式购买本书,都可以访问http://www. packtpub.com/support,注册后相关文件会以电子邮件方式直接发送给您。
读者还可经由以下步骤下载源码文件:
(1)通过电子邮件加密码方式注册登录我们的网站。
(2)用鼠标切换上方的Support(支持)标签页面。
(3)单击Code Downloads & Errata(源码下载和勘误表)。
(4)在搜索框输入书名。
(5)在搜索结果列表中选择希望下载源码的图书项。
(6)在所购图书的下拉菜单中进行选择。
(7)单击Code Download(源码下载)菜单。
文件下载到本地计算机之后,请使用下列软件的最新版本将文件内容解压到文件夹:
? Windows操作系统下的WinRAR或7-Zip软件
? Mac操作系统下的Zipge或iZip或UnRarX软件
? Linux操作系统下的7-Zip或Peazip软件
勘误表
尽管我们努力争取做到尽善尽美,书中错误依然在所难免。如果读者发现谬误之处,无论是文字错误抑或是代码错误,都欢迎您不吝赐教。对于其他读者以及本书的再版工作,这将具有十分重要的意义。对此,读者可访问http://www.packtpub.com/submit-errata,选取对应书籍,单击Errata Submission Form链接,并输入相关问题的详细内容。经确认后,输入内容将被提交至网站,或添加至现有勘误表中(位于该书籍的E
实时大数据分析:基于Storm、Spark技术的实时应用 下载 mobi epub pdf txt 电子书 格式