随着互联网业务数据规模的急剧增加,人们处理和使用数据的模式已然发生了天翻地覆的变化,传统的技术架构越来越无法适应当今海量数据处理的需求。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