基本信息
- 原书名:Storm Real-Time Processing Cookbook
- 原出版社: Packt Publishing

【插图】

编辑推荐
从多个角度全面讲解Storm实时数据处理技术和最佳实践,为快速掌握并灵活应用Storm提供实用指南
从实际问题出发,系统介绍Storm的基本应用、多语言特性、完整业务系统实现和产品交付的最佳实践方法;从产品持续交付角度,分析并实践集成、测试和交付的所有步骤
内容简介
计算机书籍
在大数据领域,Hadoop无疑是最炙手可热的技术。作为分布式系统架构,Hadoop具有高可靠性、高扩展性、高效性、高容错性和低成本的优点。然而随着数据体积越来越大,实时处理能力成为了许多机构需要面对的首要挑战。Hadoop是一个批处理系统,在实时计算处理方面显得十分乏力。Storm是一个类似于Hadoop的实时数据处理框架,也是一个非常有效的开源实时计算工具,通常被比作“实时的Hadoop”。
《Storm实时数据处理》通过丰富的实例,系统讲解storm的基础知识和实时数据处理的最佳实践方法,内容涵盖Storm本地开发环境搭建、日志流数据处理、Trident、分布式远程过程调用、Topology在不同编程语言中的实现方法、Storm与Hadoop的集成方法、实时机器学习、持续交付和如何在AWS上部署Storm。此外,本书旨在围绕Storm技术促进DevOps实践,使读者能够开发Storre解决方案,同时可靠地交付有价值的产品。
《Storm实时数据处理》适合想学习实时处理技术或者想通过Storm实现实时处理方法的开发者阅读
作译者
软件工程师,专注实时计算系统开发。他在构建防御系统的实时通信系统,以及财务与银行服务中的企业级应用程序方面有丰富的经验。他热衷于开源,是Storm社区的活跃分子,乐于交付各种基于Storm的解决方案。
卢誉声
资深软件开发工程师,现就职于思科系统(中国)研发中心云产品研发部。他曾参与多个项目协议级别定义、sDK及服务器后端和前端的设计与研发,在下一代实时云计算协作平台的研发过程中积累了丰富的敏捷实践与开发经验。此外,他还从事C/C++开发工作,对Clojure、JavaScript、Lua,以及移动开发平台等也有一定研究。
目录
译者序
前言
第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
译者序
但是,随着业务数据规模的爆炸式增长和对数据实时处理能力的需求越来越高,原本承载着海量数据处理任务的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)。让我们一起探讨,共同进步。
卢誉声
前言
这种规模的系统设计需要我们用不同的方式思考问题,采用不同的架构解决方案,而且要了解什么时候应该接受系统的复杂性以及什么时候应该避免这种复杂性。作为行业中人,我们应该掌握这种大规模批处理系统的设计方法。由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集群的方法。
书摘
1.1简介
本章将简要介绍Storm处理系统。这将涵盖所有你想知道的内容,从搭建你的开发环境到部署Topology时需要注意的操作关注事项,再到基本的质量实践,比如对Storm Topology进行单元测试和集成测试。在阅读完本章后,你将能够构建、测试和交付基本的Storm Topology。
本书并不准备对Storm处理系统及其元语和架构进行理论介绍。我们假定你在阅读本书之前已经通过浏览如Storm wiki这样的在线资源了解了Storm的基本概念。
当系统在产品环境中能持续可靠地产生商业价值时,才能交付系统。为了实现这个目的,在开发Storm Topology时,必须始终考虑质量问题和操作注意事项。
1.2搭建开发环境
开发环境涵盖了构建Storm Topology所需的各种工具和系统。虽说本书重点关注的是每个有技术侧重点的Storm交付,但需要指出的是,对于一个软件开发团队来说,无论使用集中式开发环境还是分布式开发环境,都需要更多的工具和流程来保证高效工作,而且不能仅仅局限于本书所讨论的内容。
无论是为了将来的开发工作,还是为了实现书中的例子,以下几类工具和流程都是快速搭建开发环境必不可少的:
SDK
版本控制
构建环境
系统配置工具
集群配置工具
书中描述的配置和安装方法都基于Ubuntu。不管怎么说,适用于Ubuntu的这些方法还是比较容易移植到其他Linux发行版中的。如果将这些方法应用于其他发行版时出现任何问题,你可以通过Storm邮件列表寻求支持:https://groups.google.com/forum/#!forum/storm-user。
环境变量是导致系统可操作性和可用性下降的“罪魁祸首”,如果部署环境与开发环境不同,那么环境变量很可能在这时引起大问题。所以尽可能让开发环境和部署环境保持一致。
1.2.1实战
Step01从Oracle网站(http://www.oracle.com/technetwork/java/javase/downloads/index.html)下载最新版本的J2SE 6 SDK,并通过以下命令进行安装:
Step02然后安装版本控制系统Git:
Step03接下来,安装构建系统Maven:
Step04安装Puppet、Vagrant和VirtualBox,以便于对应用程序和环境进行配置: