首页>参考读物>计算机科学与技术>软件与程序设计

Storm实时数据处理
作者 : (澳)Quinton Anderson 著
译者 : 卢誉声 译
丛书名 : 大数据技术丛书
出版日期 : 2014-06-09
ISBN : 978-7-111-46663-5
定价 : 49.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 202
开本 : 16
原书名 : Storm Real-Time Processing Cookbook
原出版社: Packt Publishing Ltd.
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

图书特色

本书涵盖搭建基于Storm的开发环境和测试实时系统的许多实用方法与实战用例,以及如何应用交付最佳实践来将系统部署至云端。
通过阅读本书,你将学到如何构建包含统计面板和可视化的实时日志处理系统。通过集成Storm、Cassandra、Cascading和Hadoop,你将了解如何构建一个用于文字挖掘的完整实时大数据解决方案。你还会了解到如何在Storm集群中利用不同编程语言实现特定的功能,并最终将所有解决方案交付至云端。本书中的每一个步骤都应用了成熟的开发和操作实践,确保你能够可靠地交付产品。

通过阅读本书,你将能够:
搭建你的开发环境并测试Strom集群
处理数据流,包括基于规则的处理流程
构建分布式远程过程调用
交付基于多语言实现的Storm Topology,包括Java、Clojure、Ruby和C++
将Storm与Cassandra、Hadoop集成
使用Cascading实现基于批处理的单词重要度算法
创建并部署预测评分模型和分类模型
掌握持续集成和将Storm部署至云端的方法

作者简介
Quinton Anderson 软件工程师,专注实时计算系统开发。他在构建防御系统的实时通信系统,以及财务与银行服务中的企业级应用程序方面有丰富的经验。他热衷于开源,是Storm社区的活跃分子,乐于交付各种基于Storm的解决方案。

译者简介
卢誉声 资深软件开发工程师,现就职于思科系统(中国)研发中心云产品研发部。他曾参与多个项目协议级别定义、SDK及服务器后端和前端的设计与研发,在下一代实时云计算协作平台的研发过程中积累了丰富的敏捷实践与开发经验。此外,他还从事C/C++开发工作,对Clojure、JavaScript、Lua,以及移动开发平台等也有一定研究。

在大数据领域,Hadoop无疑是最炙手可热的技术。作为分布式系统架构,Hadoop具有高可靠性、高扩展性、高效性、高容错性和低成本的优点。然而随着数据体积越来越大,实时处理能力成为了许多机构需要面对的首要挑战。Hadoop是一个批处理系统,在实时计算处理方面显得十分乏力。Storm是一个类似于Hadoop的实时数据处理框架,也是一个非常有效的开源实时计算工具,通常被比作“实时的Hadoop”。
本书通过丰富的实例,系统讲解Storm的基础知识和实时数据处理的最佳实践方法,内容涵盖Storm本地开发环境搭建、日志流数据处理、Trident、分布式远程过程调用、Topology在不同编程语言中的实现方法、Storm与Hadoop的集成方法、实时机器学习、持续交付和如何在AWS上部署Storm。此外,本书旨在围绕Storm技术促进DevOps实践,使读者能够开发Storm解决方案,同时可靠地交付有价值的产品。
本书适合想学习实时处理技术或者想通过Storm实现实时处理方法的开发者阅读。

图书前言

开源已经在许多方面从根本上改变了软件的原有面貌。在很多应用环境中,人们都会争论使用开源带来的好处和坏处,主要体现在支持、风险以及总体拥有成本等方面。开源在某些领域比其他领域流行,比如在研究机构中就比在大型金融服务提供商中应用得多。在某些新兴领域,比如Web服务供应商、内容供应商以及社交网络等,开源软件占据主导地位。其原因是多方面的,其中成本是一个非常大的因素。怎么说呢?如果方案要上升到网络规模,那么一般会应用“大数据”解决方案,以期获得更好的效果。凭借极佳的可用性,这些解决方案每秒处理数百万条请求,同时通过各式各样的服务为客户提供定制体验。
这种规模的系统设计需要我们用不同的方式思考问题,采用不同的架构解决方案,而且要了解什么时候应该接受系统的复杂性以及什么时候应该避免这种复杂性。作为行业中人,我们应该掌握这种大规模批处理系统的设计方法。由MapReduce、Bulk Synchronous Parallel以及其他计算范式衍生而来的大规模计算集群已经广泛实施,并且得到了很好的理解。开源掀起了创新浪潮,并推动其发展,而即使是顶级软件开发商也只能努力将Hadoop集成到自家的技术架构中,更别提试图与开源竞争了。
然而,客户是永不满足的,他们想要更多的数据、更多的服务、更多的价值、更多的便利,而且现在就要,并希望成本更低。随着数据量的增加,对实时响应时间的需求也在提高。专注于实时性、规模化的计算平台新时代已经来临。这带来了许多新的挑战,不管是理论上还是实践上都具有挑战性。
本书将帮助你掌握一个平台:Storm处理系统。Storm处理系统是一个开源的、实时的计算平台,最初由社交分析公司Backtype的Nathan Marz编写,后来被Twitter收购,并作为开源软件发布。从那时起,该平台茁壮成长,目前已经成长为一个日益扩大的开源社区:拥有众多用户、贡献者以及产品页面上的成功案例。写这篇前言的时候,该项目在GitHub上拥有超过6000个星、3000多个Twitter粉丝,每个节点每秒可以完成超过100万次交易,而且有近80名相关用户在使用Storm产品实例。这些数字极其可观。此外,在本书的结尾你会发现,无论你用哪种语言(与你的思维方式以及解决方案交付方式相一致的语言)研发系统,以Storm平台为基础都会非常愉快。
本书通过一系列实例指导你学习Storm。书中的例子源于实战用例,并随着内容的展开介绍各种概念。此外,本书旨在围绕Storm技术促进DevOps实践,使读者能够开发Storm解决方案,同时可靠地交付具有价值的产品。
Storm处理系统简介
开源项目普遍存在缺乏文档的问题,但Storm并不存在这个问题,其项目有着高质量且编写良好的文档,由活跃的用户社区提供支持。本书并不想照本宣科,而是通过丰富的例子对现有资料进行补充,在必要的时候辅以概念和理论的探讨。强烈建议读者在阅读第1章之前,花些时间阅读Storm的入门文档,具体有以下几个网页:
https://github.com/nathanmarz/storm/wiki/Rationale;
https://github.com/nathanmarz/storm/wiki/Concepts;
https://github.com/nathanmarz/storm/wiki/Understanding-the-parallelism-of-a-Storm-topology。
章节介绍
第1章 介绍搭建Storm本地开发环境的方法,包括所需工具和推荐的开发流程。
第2章 教你创建一个日志流处理解决方案、基本的统计面板和日志搜索功能。
第3章 介绍Trident,Trident是基于Storm元语进行实时计算的一类更高级的处理数据流的抽象元语,支持高效的企业数据管道。
第4章 介绍实现分布式远程过程调用的方法。
第5章 介绍在不同的编程语言中实现Topology的方法,并在现有技术基础上增加一些新的技术。
第6章 介绍Storm与Hadoop的集成方法,创建一个完整的Lambda架构。
第7章 简要介绍机器学习,讨论多种基于Storm实时处理项目的实现方法。
第8章 介绍搭建持续交付流水线和可靠部署Storm集群到产品环境的方法。
第9章 介绍多种在Amazon云计算平台中自动化配置Storm集群的方法。
阅读前提
本书采用Ubuntu或Debian操作系统作为基本的开发环境。第1章会介绍如何配置其余必备的工具。如果你不能使用Ubuntu作为开发用的操作系统,任何基于*Nix的操作系统都是可以的,因为书中所有示例都以bash命令行界面为基础构建。
读者对象
如果你想学习实时处理技术,或想了解通过Storm实现实时处理的方法,那么本书非常适合你。本书假定你是一名Java开发者,要是你还具备Clojure、C++和Ruby的开发经验,那将是锦上添花的事情,不过那并不是必需的。如果你还了解一些Hadoop或类似的技术就更好了。
本书版式约定
在本书中,读者会发现针对不同信息类型的文本样式。下面是这些样式的示例和解释。
代码段版式如下所示:

所有命令行输入和输出如下所示:

下载本书的示例代码
访问http://www.packtpub.com/,可以下载本书及你所购买的所有Packt图书的示例代码。如果你是从其他地方购买的本书英文版,可以访问http://www.packtpub.com/support并注册,以便通过电子邮件取得示例文件。
作者通过Bitbucket账户来维护开源版本的代码:https://bitbucket.org/qanderson。
致谢
感谢Storm社区,正是他们的努力构建出了开源社区中如此出色的平台,当然,还要特别感谢Storm的核心作者—Nathan Marz。
我要感谢我的妻子和孩子对我长时间写作本书和其他相关项目的宽容,感谢这段时间他们给予我的帮助,我爱他们。此外,我还要感谢所有参与本书审校工作的朋友。

上架指导

计算机

封底文字

本书涵盖搭建基于Storm的开发环境和测试实时系统的许多实用方法与实战用例,以及如何交付最佳实践来将系统部署至云端。
通过阅读本书,你将学到如何构建包含统计面板和可视化的实时日志处理系统。通过集成Storm、Cassandra、Cascading和Hadoop,你将了解如何构建一个用于文字挖掘的完整实时大数据解决方案。你还会了解到如何在Storm集群中利用不同编程语言实现特定的功能,并最终将所有解决方案交付至云端。本书中的每一个步骤都应用了成熟的开发和操作实践,确保你能够可靠地交付产品。

通过阅读本书,你将能够:
•搭建你的开发环境并测试Strom集群
•处理数据流,包括基于规则的处理流程
•构建分布式远程过程调用
•交付基于多语言实现的Storm Topology,包括Java、Clojure、Ruby和C++
•将Storm与Cassandra、Hadoop集成
•使用Cascading实现基于批处理的单词重要度算法
•创建并部署预测评分模型和分类模型
•掌握持续集成和将Storm部署至云端的方法

作者简介

(澳)Quinton Anderson 著:Quinton Anderson 软件工程师,专注实时计算系统开发。他在构建防御系统的实时通信系统,以及财务与银行服务中的企业应用程序方面有丰富的经验。他热衷于开源,是Storm社区的活跃分子,乐于交付各种基于Storm的解决方案。

译者简介

卢誉声 译:暂无简介

译者序

随着互联网业务数据规模的急剧增加,人们处理和使用数据的模式已然发生了天翻地覆的变化,传统的技术架构越来越无法适应当今海量数据处理的需求。MapReduce、Hadoop以及一些相关技术的出现使得我们能处理的数据量比以前要多得多,这类技术解决了我们面对海量数据时的措手不及,也在一定程度上缓解了传统技术架构过时的问题。
但是,随着业务数据规模的爆炸式增长和对数据实时处理能力的需求越来越高,原本承载着海量数据处理任务的Hadoop在实时计算处理方面越发显得乏力。原因很简单,像Hadoop使用的MapReduce这样的数据处理技术,其设计初衷并不是为了满足实时计算的需求。那么就目前来说,有没有什么行之有效的办法能简单地将Hadoop转换成实时计算系统呢?
这个问题的答案可能令人略感失望:没有。Hadoop作为批处理系统,与实时处理系统在需求上存在着本质的区别。要做到实时性,不仅需要及时地推送数据以便处理,还要将数据划分成尽可能小的单位,而HDFS存储推送数据的能力已经远不能满足实时性的需求。另外,Hadoop还存在配置、一致性和可伸缩性方面的问题。
那么问题来了,怎么才能构建出一个可靠的实时处理系统呢?
答案是Storm。
从整体架构上看,Storm和Hadoop非常类似。Storm从架构基础本身就实现了实时计算和数据处理保序的功能,而且从概念上看,Storm秉承了许多Hadoop的概念、术语和操作方法,因此如果你对Hadoop非常熟悉,那么将Storm与Hadoop集成也不是什么难事。通过Storm Trident提供的高级抽象元语,你可以像Hadoop Cascading简化并行批处理那样简化并行实时数据处理。
我本人在实时计算服务器开发方面具有一定的经验,对大数据处理解决方案十分感兴趣,也对相关技术有一些了解,并且有幸承担了本书的翻译工作。本书从多个角度解析了有关Storm的最佳实践,无论是从最基本的应用、多语言特性、完整业务系统的实现,还是最终交付至产品环境,本书都给出了翔实的最佳实践方法。不仅如此,本书还从产品持续交付的角度,分析并实践了集成、测试和交付的所有步骤,让人受益匪浅。相信你会和我一样,通过阅读本书,能对Storm本身及构建成熟实时计算系统的方法有更进一步的了解。
翻译本书对我来说其实也是一个渐进学习的过程,书中提及了大量方法和工具的应用,让我从零散的概念分支逐渐有了清晰的知识主干,形成了系统的知识点。通过对本书的翻译,我对这个领域的内容有了更加深刻的理解。这也是我翻译此书最大的收获之一。在翻译过程中,我不仅查阅了大量国内外的相关资料,还与原书作者进行了深入的沟通,力求做到专业词汇准确权威,书中内容正确。
在翻译过程中我得到了很多人的帮助,特在此一一感谢。首先是我的家人,你们是我学习和前进的动力。感谢鲁昌华教授,在我的成长道路上给予了很大的支持和鼓励。感谢我在思科系统(中国)研发的同事们,在我的学习工作中给予了很大帮助。感谢我的好友金柳颀,感谢你在翻译过程中的通力合作以及在技术问题上的共同探讨。还要感谢机械工业出版社华章分社对我的信任与支持。
现在我怀着期盼和忐忑的心情将这本译著呈献给大家,我渴望得到您的认可,更渴望和您成为朋友。如果您有任何问题和建议,请与我联系(samblg@me.com)。让我们一起探讨,共同进步。

卢誉声

图书目录

译者序
前言
第1章 搭建开发环境 / 1
1.1 简介 / 1
1.2 搭建开发环境 / 1
1.3 分布式版本控制 / 3
1.4 创建“Hello World”Topology / 6
1.5 创建Storm集群——配置机器 / 12
1.6 创建Storm集群——配置Storm / 18
1.7 获取基本的点击率统计信息 / 23
1.8 对Bolt进行单元测试 / 31
1.9 实现集成测试 / 34
1.10 将产品部署到集群 / 37
第2章 日志流处理 / 38
2.1 简介 / 38
2.2 创建日志代理 / 38
2.3 创建日志Spout / 40
2.4 基于规则的日志流分析 / 45
2.5 索引与持久化日志数据 / 49
2.6 统计与持久化日志统计信息 / 53
2.7 为日志流集群创建集成测试 / 55
2.8 创建日志分析面板 / 59
第3章 使用Trident计算单词重要度 / 71
3.1 简介 / 71
3.2 使用Twitter过滤器创建URL流 / 71
3.3 从文件中获取整洁的词流 / 76
3.4 计算每个单词的相对重要度 / 81
第4章 分布式远程过程调用 / 85
4.1 简介 / 85
4.2 通过DPRC实现所需处理流程 / 85
4.3 对Trident Topology进行集成测试 / 90
4.4 实现滚动窗口Topology / 95
4.5 在集成测试中模拟时间 / 98
第5章 在不同语言中实现Topology / 100
5.1 简介 / 100
5.2 在Qt中实现多语言协议 / 100
5.3 在Qt中实现SplitSentence Bolt / 105
5.4 在Ruby中实现计数 Bolt / 108
5.5 在Clojure中实现单词计数Topology / 109
第6章 Storm与Hadoop集成 / 113
6.1 简介 / 113
6.2 在Hadoop中实现TF-IDF算法 / 115
6.3 持久化来自Storm的文件 / 121
6.4 集成批处理与实时视图 / 122
第7章 实时机器学习 / 127
7.1 简介 / 127
7.2 实现事务性Topology / 129
7.3 在R中创建随机森林分类模型 / 134
7.4 基于随机森林的事务流业务分类 / 143
7.5 在R中创建关联规则模型 / 149
7.6 创建推荐引擎 / 152
7.7 实时在线机器学习 / 157
第8章 持续交付 / 162
8.1 简介 / 162
8.2 搭建CI服务器 / 162
8.3 搭建系统环境 / 164
8.4 定义交付流水线 / 166
8.5 实现自动化验收测试 / 170
第9章 在AWS上部署Storm / 177
9.1 简介 / 177
9.2 使用Pallet在AWS上部署Storm / 177
9.3  搭建虚拟私有云 / 181
9.4 使用Vagrant在虚拟私有云上部署Storm / 189

教学资源推荐
作者: 辛运帏 饶一梅
作者: [美]埃里克 S. 罗伯茨(Eric S. Roberts) 著
作者: 郭志强 邱李华 曹青 等编著
作者: [英]理查德·伯德(Richard Bird) 著
参考读物推荐
作者: [西班牙]大卫·米兰·埃斯克里瓦(David Millán Escrivá)[西班牙]维尼休斯·G.门东萨(Vinícius G. Mendonça) [美]普拉蒂克·乔希(Prateek Joshi)著
作者: [印度] 科斯?拉曼(Kirthi Raman)著
作者: [美] 詹森·贝尔(Jason Bell)著