首页>参考读物>计算机科学与技术>综合

实时分析:流数据的分析与可视化技术
作者 : [美] 拜伦·埃利斯(Byron Ellis) 著
译者 : 王晓伟 译
出版日期 : 2016-04-18
ISBN : 978-7-111-53216-3
定价 : 79.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 312
开本 : 16
原书名 : Real-Time Analytics: Techniques to Analyze and Visualize Streaming Data
原出版社: John Wiley & Sons(USA)
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

图书特色

实时分析是当前数据分析领域最热门的话题。在本书中,知名数据科学家Byron Ellis将向数据分析师讲解如何构建有效的实时分析平台。这个平台可以用来处理和分析不断变化的数据。对于这类数据,传统基于批处理的分析平台已经有点力不从心。
作者是流数据架构领域少数几位知名专家之一,在研究、开发、分析、实时可视化和大数据流方面享有盛誉,是帮助你探索这个革命性领域的不二人选。本书从描述实时分析的整个分析架构一直讲到使用特定工具来获取目标结果,并探讨利用开源和现代商用工具来构建健壮且高效的系统,使其以经济有效的方式提供实时分析能力。

本书内容包括:
流数据系统和架构的深入探讨
流数据的分析、存储和交付
数据聚集计算以及处理集合的技巧
数据仓库的选择和技术
针对网站分析、大数据、流数据和移动数据的可视化,以及业务数据流的挖掘和可视化,本书给出了深入的案例分析。本书的“菜谱”式设计使你能够快速学习和实现不同的技术。


首席数据科学家十余年经验结晶,深入浅出阐释流数据分析与可视化技术的原理、架构、算法与最佳实践。本书不仅详细讨论流数据的采集、传输、处理、交付等过程中涉及的各个主流系统,而且深度剖析略图、Bloom Filter、抽样等重要数据结构和算法的基本原理,以及在流分析中的应用。

全书共11章,其内容主要分为两部分。第1章介绍常见的流数据的来源、应用,以及持续交付、结构松散和高基数三个重要特性,并阐释对流数据使用基础架构和算法的重要性。第一部分(第2~6章)聚焦流数据系统本身的架构,以及系统的运营问题,内容涵盖流框架底层的概念、特性、各组件及其具体配置,并且讨论流数据的管理、处理、存储等的相关技术和工具。第二部分(第7~11章)主要讲解如何用流基础架构解决各种问题,涉及从流环境向最终用户的数据交付、流环境下的聚集计算、统计学和概率论的基础知识、略图,以及流数据模型、异常检测、优化和A/B测试等高级主题。

作者简介






Spongecell公司CTO,曾任LivePerson公司的首席数据科学家和AdBrite公司的CTO。他拥有哈佛大学统计学博士学位,在Strata等重要学术会议上发表过实时分析的演讲。


译者简介






毕业于国防科技大学,获计算机科学与技术博士学位,研究方向涉及流数据、非确定性数据的管理和分析,近年来专注于基于高性能计算平台的生物、医药大数据分析技术。除本书外,他还译有《命令行中的数据科学》。

图书前言

概述及组织结构
流数据处理涉及软件开发和工程领域的许多不同问题。一方面,它需要一个灵活的基础架构,能够迅速便捷地移动数据;另一方面,处理速度要“跟得上”数据采集的速度,还要能扩展,以适应源源不断的数据流,由于这个限制,流数据处理很青睐从其他领域借鉴而来的数据结构。最后,一旦数据采集和处理完毕,应该利用数据做些什么?对于这一点,有一批可以直接在流数据上运行的应用,这些应用已经在大多数相关企业中发挥作用,还有更多的应用一直处于企业的考虑之中。本书将流数据的所有这些方面糅合在一起,既可以充当大众读者的入门书籍,又对更专业的技术人员有参考价值。我们希望,通过阅读本书,你能够建立足够的自信,在企业中从头到尾实施一个流数据的概念验证项目,并尝试将其应用到生产环境。为了实现以上目标,不仅需要建立基础架构,还需要实现相关算法,为此我们将本书划分为两个独立的部分。
第一部分介绍流数据系统本身的基础架构,以及系统的运营问题。如果数据是流式的,但是仍然以批量的方式处理,那就不再是流数据,这些只是碰巧连续采集得到的批量数据,这样的数据对许多用例完全够用。但是,本书的假设是,人们已经认识到,如果数据生成后不久就可以由最终用户使用,这样会大有裨益。鉴于此,本书涵盖了完成这种任务所需要的工具和技术。
我们首先介绍流框架底层的概念和特性,包括流处理系统的各种组件。并不是所有项目在起始阶段都会用到这些组件,但所有成熟的流基础架构最终都会用到它们。然后我们在流基础架构的关键特性,即可用性、可扩展性和延迟的背景下讨论这些组件。
第一部分剩下的内容聚焦于实现或配置每个组件的具体细节。由于组件框架的广泛应用,多半已经不需要编写多少代码来实现组件。取而代之的是安装、配置,或者定制工作。
第3章和第4章介绍构建和协调数据移动系统所需要的工具。根据所处环境的不同,可能需要开发软件来直接与该系统集成,或者修改已有软件使之适应该系统。我们将讨论这两种途径的利弊。
数据一旦被移动,就必须得到处理,并最终存储起来。这是第5章和第6章的内容。这两章介绍主流的流处理软件,以及对数据存储系统的选择。
第二部分用流基础架构解决各种问题。仪表板与预警系统是流数据采集最早的应用,也是第二部分介绍的第一个应用。
第7章讨论从流环境向最终用户的数据交付问题。这是构建仪表板以及其他监控应用所使用的核心机制。一旦交付,数据就必须呈现给用户,因此,该章还包括一节内容,专门讨论如何在基于Web的环境中建立仪表板可视化。
当然,所交付的数据经常要由处理系统进行聚集计算。第8章涵盖流环境下的数据聚集计算问题,特别是对多分辨率时间序列数据的聚集计算问题,该结果数据最终会被交付给第7章讨论的仪表板应用。
对数据进行聚集计算之后,数据中有什么样的模式这个问题就浮出了水面。是否有随时间变化的趋势?某个行为是否与先前观察到的行为有明显不同?要回答这些问题,需要一些统计学和随机过程方面的知识(一般来讲,这两方面的知识可以解答关于大规模数据采集的任何问题)。第9章对统计学和概率论的基础知识进行了简要介绍。其中还介绍了统计抽样的概念,它可以用来计算比简单的聚集更加复杂的度量。
抽样是对复杂度量进行近似的传统机制,但我们还可以通过其他机制更好地计算某些度量,略图(sketch)概率数据结构就是这样的一种机制。第10章将讨论略图,这需要大量使用第9章的概率论知识。略图通常具有更快的更新速度并占用更少的内存,因此特别适合流环境。
最后,第11章讨论聚集计算之外能够应用于流数据的一些更深入的话题。篇幅所限,这一章仅对所涉及的众多话题作简要介绍,实际上每个都可以单独成书。第一个话题是来自统计学和机器学习领域的流数据模型。这些模型是预测等许多应用的基础,用来估计未来的数据值。由于数据是流式的,可以将这些预测值与实际值相比较,据此再对模型进行修正。预测的应用很广泛,其中包括第11章中讨论的异常检测。
第11章还简要介绍优化和A/B测试。如果你可以预测用户对两个不同网站设计的反应,就可以利用这些信息,向用户展示具有较好预期反应的网站设计。当然,预测并不是完美的,也有可能对各个网站的设计效果给出糟糕的估计。要改进对特定网站设计的预测,唯一途径是收集更多的数据。这样,你就需要确定各网站设计要多久展示一次,从而保证在改进预测的同时,不会由于展示了非主流的设计,而牺牲展示效果。第11章给出一种常用于解决这类问题的简单机制,称为多臂赌博机(multi-armed bandit)。利用这种机制,你可以站在一个比较高的起点上对优化问题进行更深入探索。
本书面向的读者
我们曾在开篇提到过,本书意在吸引从事软件行业的广大读者,针对的是有兴趣开始涉足流数据及其管理的技术人员。正因如此,我们希望读者按顺序阅读,最终可以全面掌握流数据分析的基础知识。
即便如此,对于只熟悉这个领域的一部分内容,而对其他部分不甚了解的专家来说,本书也是值得一看的。例如,数据分析师或数据科学家可能在第9章和第11章的统计学方法方面有很强的专业背景,也可能对第7章的仪表板应用以及第8章的聚集计算技术有一定的经验,但对第10章的概率数据结构可能没有太多了解。如果不是要实际实现基础架构,而是想理解对设计的权衡是怎样影响所分析的数据的交付的,他们也可能会对前六章感兴趣。
与之类似,关注运营和基础架构方面的读者可能对第1~6章所讨论的话题颇有了解。他们可能没有接触过特定的软件,但肯定处理过许多类似的问题。本书第二部分,即第7~11章可能对他们更有吸引力。系统监控是流数据的首批应用之一。异常检测这样的工具可以在诸如健壮的错误检测机制这样的开发中派上用场。
需要的工具
不管你喜欢与否,数据基础架构领域大多以Java虚拟机为基础。这里的原因比较复杂,但不管怎样,它始终是本书所需要的工具。本书中使用的软件和示例是基于Java 7开发的,通常也可以支持Java 6或Java 8。读者应确保操作系统安装了合适的Java开发工具包。
由于要使用Java,有必要安装一个编辑器。本书中的软件是用Eclipse编写的,项目也是用Maven构建系统来组织的。安装这两个软件将帮助你构建本书包含的示例。
本书也使用了其他软件包,具体安装方法会在相应的章节中讲到。
书中使用了一些基础的数学术语和公式。如果你的数学知识有些生疏,觉得这些概念有点难,Sheldon Ross的《A First Course in Probability》会对你有所帮助。
配套网站
本书配套的网站中包含了每一章所有例子的代码包。每章的代码都划分成独立的模块。
有的代码在多章中共用。这种情况下,代码被复制到每个模块,以保证这些模块是自包含的。
网站还包含Samza源代码的拷贝。Samza是一个新兴的项目,其代码库更新很快,这导致在编写和编辑相关章节的时候,本书中的示例可能已经难以运行。为了避免对读者造成困扰,我们在网上放了一个能与本书中代码良好兼容的项目版本。请参考http://www.wiley.com/go/realtimeanalyticsstreamingdata。
扬帆起航
闲话少说,是时候踏上实际构建流数据系统的精彩旅程了。本书所讲的技术虽不是流数据处理的独门秘籍,但却都是我付出多年心血摸索出来的经验。我个人认为这些技术都非常好用,虽然在这个激动人心的时代,新事物始终会层出不穷。不管怎样,我希望,通过阅读这本书,你至少能少走弯路。
去找一些数据,让我们扬帆起航。

上架指导

计算机\数据挖掘

封底文字

实时分析是当前数据分析领域最热门的话题。在本书中,知名数据科学家Byron Ellis将向数据分析师讲解如何构建有效的实时分析平台。这个平台可以用来处理和分析不断变化的数据。对于这类数据,传统基于批处理的分析平台已经有点力不从心。
作者是流数据架构领域少数几位知名专家之一,在研究、开发、分析、实时可视化和大数据流方面享有盛誉,是帮助你探索这个革命性领域的不二人选。本书从描述实时分析的整个分析架构一直讲到使用特定工具来获取目标结果,并探讨利用开源和现代商用工具来构建健壮且高效的系统,使其以经济有效的方式提供实时分析能力。本书的主要内容包括:
•流数据系统和架构的深入探讨
•流数据的分析、存储和交付
•数据聚集计算以及处理集合的技巧
•数据仓库的选择和技术
针对网站分析、大数据、流数据和移动数据的可视化,以及业务数据流的挖掘和可视化,本书给出了深入的案例分析。本书的“菜谱”式设计使你能够快速学习和实现不同的技术。

作者简介

[美] 拜伦·埃利斯(Byron Ellis) 著:暂无简介

译者简介

王晓伟 译:暂无简介

译者序

大概十年前,正是学术界对流数据的研究方兴未艾之时,我刚开始攻读博士学位。当时,数据库领域正致力于研究流数据管理系统(Data Stream Management System,DSMS),并发展出Stream、TelegraphCQ、Aurora等DSMS原型系统,数据挖掘领域则致力于开发各种经典数据挖掘算法的流数据版本。
然而,在工业界,Storm、Kafka、ZooKeeper等流分析基础架构的主要组件大多还处于内部开发的起步阶段,几乎不为人知。当时,除了Gigascope这个专用于网络监控的流数据管理系统,很少听说大规模实际应用流数据系统的案例。后来,在参与几个大规模网络安全监控项目的过程中,我也曾尝试应用学术界提出的几个DSMS来解决一些流分析问题,但效果均不理想。因此,从当时的情况来看,流数据的学术研究似乎离实际应用遥不可及,也正是由于这种悲观预期,我放弃了数据流这个研究方向,转而研究其他课题。
令人意想不到的是,近年来,随着Storm、Samza等流处理系统被贡献给开源社区,ZooKeeper、Kafka、Flume、Redis、MongoDB、Cassandra等相关系统也纷纷在流分析领域占据一席之地。短短几年间,一个完整的流分析基础架构似乎已经成型。在以Twitter、LinkedIn、Google为代表的大数据技术和应用的先行者中,这些系统已经各司其职,担负起艰巨的流分析任务。这样令人眼花缭乱的进步,怎能不让人感叹大数据浪潮的威力!
正是因为自己以前的研究经历,当看到本书目录时,我真的有眼前一亮的感觉。本书不仅详细讨论流数据的采集、传输、处理、交付等过程中涉及的各个主流系统,还介绍略图、Bloom Filter、抽样等重要数据结构和算法的基本原理,以及流分析中的应用。在流数据分析如火如荼的今天,这样一本具有很强实用性,同时又有一定理论深度的书实属不可多得。我相信,无论是对流分析感兴趣的入门级读者,还是在企业从事了多年流分析业务的研发人员和管理人员,都能从这本书中找到自己想要的东西。
最后,衷心感谢机械工业出版社对本书的翻译和出版所给予的大力支持,感谢编辑和审校老师付出的辛勤劳动。由于本人水平有限,翻译过程中难免有错误或疏漏。如果您发现翻译有误或者有其他疑问,欢迎您通过邮件批评指正。我的邮箱是gfkdwxw@aliyun.com.cn。

王晓伟

图书目录

译者序
前言
致谢
作者简介
技术编辑简介
第1章 流数据简介1
1.1流数据的来源2
1.1.1运行监控2
1.1.2Web分析2
1.1.3在线广告3
1.1.4社交媒体3
1.1.5移动数据和物联网4
1.2流数据的特别之处5
1.2.1始终在线,持续流动5
1.2.2松散结构5
1.2.3高基数的存储6
1.3基础架构和算法6
1.4总结7
第一部分 流分析架构
第2章 实时流架构设计10
2.1实时架构的组件10
2.1.1数据采集11
2.1.2数据流程11
2.1.3数据处理13
2.1.4数据存储13
2.1.5数据交付14
2.2实时架构的特性16
2.2.1高可用性16
2.2.2低延迟17
2.2.3水平可扩展性17
2.3实时编程语言18
2.3.1Java18
2.3.2Scala和Clojure19
2.3.3JavaScript19
2.3.4Go语言20
2.4实时架构概览20
2.4.1数据采集20
2.4.2数据流程21
2.4.3数据处理21
2.4.4数据存储21
2.4.5数据交付22
2.5总结22
第3章 服务配置和协调24
3.1 配置和协调系统的研发动机24
3.2 维护分布式状态25
3.2.1不可靠的网络连接25
3.2.2时钟同步25
3.2.3不可靠环境下的一致性25
3.3Apache ZooKeeper26
3.3.1znode27
3.3.2监视和通知28
3.3.3保持一致性28
3.3.4创建ZooKeeper集群28
3.3.5ZooKeeper本地Java客户端33
3.3.6Curator客户端39
3.3.7Curator Recipes组件45
3.4总结50
第4章 流分析中的数据流程管理52
4.1分布式数据流程52
4.1.1至少交付一次52
4.1.2“n+1”问题53
4.2Apache Kafka:高吞吐量分布式消息机制54
4.2.1设计与实现54
4.2.2配置Kafka环境57
4.2.3与Kafka代理交互65
4.3Apache Flume:分布式日志采集系统 66
4.3.1Flume agent67
4.3.2配置agent68
4.3.3Flume数据模型68
4.3.4channel选择器69
4.3.5Flume source71
4.3.6Flume sink78
4.3.7sink processor80
4.3.8Flume channel80
4.3.9Flume Interceptor81
4.3.10集成定制Flume组件83
4.3.11运行Flume agent83
4.4总结83
第5章 流数据的处理85
5.1分布式流数据处理85
5.1.1协调86
5.1.2分区和融合86
5.1.3事务86
5.2用Storm处理数据86
5.2.1Storm集群的组件87
5.2.2配置Storm集群88
5.2.3分布式集群89
5.2.4本地集群92
5.2.5Storm拓扑92
5.2.6实现bolt95
5.2.7实现并使用spout99
5.2.8分布式远程过程调用104
5.2.9Trident:Storm的DSL105
5.3用Samza处理数据111
5.3.1Apache YARN111
5.3.2从YARN和Samza开始112
5.3.3将Samza集成进数据流程115
5.3.4Samza作业116
5.4总结122
第6章 流数据的存储123
6.1一致性哈希123
6.2“NoSQL”存储系统124
6.2.1Redis125
6.2.2MongoDB132
6.2.3Cassandra150
6.3其他存储技术159
6.3.1关系数据库160
6.3.2分布式内存数据网格160
6.4存储技术的选择160
6.4.1键-值存储160
6.4.2文档存储160
6.4.3分布式哈希表存储161
6.4.4内存网格161
6.4.5关系数据库161
6.5数据仓库161
6.5.1将Hadoop作为ETL和数据仓库162
6.5.2Lambda架构166
6.6总结166
第二部分 流分析与可视化
第7章 流度量的交付168
7.1流Web应用168
7.1.1使用Node169
7.1.2用NPM管理Node项目171
7.1.3基于Node开发Web应用174
7.1.4 基本的流仪表板176
7.1.5 向Web应用加入流180
7.2 数据可视化190
7.2.1 HTML5 Canvas和内联SVG190
7.2.2 数据驱动文档:D3.js196
7.2.3 高层工具204
7.3 移动流应用208
7.4 总结209
第8章 精确的聚集计算和交付211
8.1 定时计数与求和214
8.1.1 基于Bolt的计数214
8.1.2 基于Trident的计数216
8.1.3 基于Samza的计数217
8.2 多分辨率时间序列的聚集计算218
8.3 随机优化222
8.4 时间序列数据的交付223
8.4.1 用D3.js绘制带状图224
8.4.2 高速Canvas图225
8.4.3 地平线图226
8.5 总结227
第9章 流数据的统计近似229
9.1 数值计算库229
9.2 概率和分布230
9.2.1 期望和方差231
9.2.2 统计分布232
9.2.3 离散分布232
9.2.4 连续分布233
9.2.5 联合分布235
9.3 参数估计236
9.3.1 参数推断236
9.3.2 Delta方法237
9.3.3 分布不等式238
9.4 随机数产生器238
9.5 抽样过程242
9.5.1 从固定数据集中抽样242
9.5.2 从流数据中抽样243
9.5.3 有偏流抽样244
9.6 总结245
第10章 使用略图近似流数据246
10.1 寄存器和哈希函数246
10.1.1 寄存器247
10.1.2 哈希函数247
10.2 集合249
10.3 Bloom Filter251
10.3.1 算法251
10.3.2 Bloom Filter大小的选择253
10.3.3 并集和交集253
10.3.4 基数估计254
10.3.5 有趣的变体255
10.4 Distinct Value略图258
10.4.1 Min-Count算法258
10.4.2 HyperLogLog算法260
10.5 Count-Min略图264
10.5.1 点查询265
10.5.2 Count-Min略图的实现265
10.5.3 Top-K和“Heavy Hitters”266
10.5.4 范围查询和分位数查询268
10.6 其他应用270
10.7 总结271
第11章 流数据的应用272
11.1 实时数据模型273
11.1.1 简单时间序列模型273
11.1.2 线性模型276
11.1.3 逻辑回归280
11.1.4 神经网络模型281
11.2 用模型预测289
11.2.1 指数平滑法289
11.2.2 回归法291
11.2.3 神经网络法293
11.3 监控294
11.3.1 离群点检测294
11.3.2 变化检测296
11.4 实时优化297
11.5 总结298

教学资源推荐
作者: 吴建平
作者: 吕云翔等编著
作者: [澳]杰夫瑞·艾文(Jeffrey Aven) 著
作者: 蔡自兴
参考读物推荐
作者: (美)Michele Sliger; Stacia Broderick 著
作者: 杜军平 黄杰 主编
作者: 董晓初 编著
作者: (法)Mark Walker 著