Storm入门之附录C
本文翻译自《Getting Started With Storm》译者:吴京润 编辑:郭蕾 方腾飞
安装实际的例子
译者注:有些软件的最新版本已有变化,译文不会完全按照原文翻译,而是列出当前最新版本的软件。
首先,从下述GitHub的URL克隆这个例子:
本文翻译自《Getting Started With Storm》译者:吴京润 编辑:郭蕾 方腾飞
译者注:有些软件的最新版本已有变化,译文不会完全按照原文翻译,而是列出当前最新版本的软件。
首先,从下述GitHub的URL克隆这个例子:
本文翻译自《Getting Started With Storm》译者:吴京润 编辑:郭蕾 方腾飞
正如书中之前所提到的,使用Storm编程,可以通过调用ack和fail方法来确保一条消息的处理成功或失败。不过当元组被重发时,会发生什么呢?你又该如何砍不会重复计算?
Storm0.7.0实现了一个新特性——事务性拓扑,这一特性使消息在语义上确保你可以安全的方式重发消息,并保证它们只会被处理一次。在不支持事务性拓扑的情况下,你无法在准确性,可扩展性,以空错性上得到保证的前提下完成计算。
本文翻译自《Getting Started With Storm》译者:吴京润 编辑:郭蕾 方腾飞
有时候你可能想使用不是基于JVM的语言开发一个Storm工程,你可能更喜欢使用别的语言或者想使用用某种语言编写的库。
Storm是用Java实现的,你看到的所有这本书中的spout和bolt都是用java编写的。那么有可能使用像Python、Ruby、或者JavaScript这样的语言编写spout和bolt吗?答案是当然
可以!可以使用多语言协议达到这一目的。
多语言协议是Storm实现的一种特殊的协议,它使用标准输入输出作为spout和bolt进程间的通讯通道。消息以JSON格式或纯文本格式在通道中传递。
我们看一个用非JVM语言开发spout和bolt的简单例子。在这个例子中有一个spout产生从1到10,000的数字,一个bolt过滤素数,二者都用PHP实现。
本文翻译自《Getting Started With Storm》译者:吴京润 编辑:郭蕾 方腾飞
本章要阐述一个典型的网络分析解决方案,而这类问题通常利用Hadoop批处理作为解决方案。与Hadoop不同的是,基于Storm的方案会实时输出结果。
我们的这个例子有三个主要组件(见图6-1)
本文翻译自《Getting Started With Storm》 译者:吴京润 编辑:方腾飞
正如你已经看到的,bolts是一个Storm集群中的关键组件。你将在这一章学到bolt生命周期,一些bolt设计策略,以及几个有关这些内容的例子。
Bolt是这样一种组件,它把元组作为输入,然后产生新的元组作为输出。实现一个bolt时,通常需要实现IRichBolt接口。Bolts对象由客户端机器创建,序列化为拓扑,并提交给集群中的主机。然后集群启动工人进程反序列化bolt,调用prepare,最后开始处理元组。
阅读全文
本文翻译自《Getting Started With Storm》 译者:吴京润 编辑:方腾飞
你将在本章了解到spout作为拓扑入口和它的容错机制相关的最常见的设计策略。
在设计拓扑结构时,始终在头脑中记着的一件重要事情就是消息的可靠性。当有无法处理的消息时,你就要决定该怎么办,以及作为一个整体的拓扑结构该做些什么。举个例子,在处理银行存款时,不要丢失任何事务报文就是很重要的事情。但是如果你要统计分析数以百万的tweeter消息,即使有一条丢失了,仍然可以认为你的结果是准确的。
对于Storm来说,根据每个拓扑的需要担保消息的可靠性是开发者的责任。这就涉及到消息可靠性和资源消耗之间的权衡。高可靠性的拓扑必须管理丢失的消息,必然消耗更多资源;可靠性较低的拓扑可能会丢失一些消息,占用的资源也相应更少。不论选择什么样的可靠性策略,Storm都提供了不同的工具来实现它。
要在spout中管理可靠性,你可以在分发时包含一个元组的消息ID(collector.emit(new Values(…),tupleId))。在一个元组被正确的处理时调用ack方法,而在失败时调用fail方法。当一个元组被所有的靶bolt和锚bolt处理过,即可判定元组处理成功(你将在第5章学到更多锚bolt知识)。
阅读全文
本文翻译自《Getting Started With Storm》 译者:吴京润 编辑:方腾飞
在这一章,你将学到如何在同一个Storm拓扑结构内的不同组件之间传递元组,以及如何向一个运行中的Storm集群发布一个拓扑。
设计一个拓扑时,你要做的最重要的事情之一就是定义如何在各组件之间交换数据(数据流是如何被bolts消费的)。一个数据流组指定了每个bolt会消费哪些数据流,以及如何消费它们。
NOTE:一个节点能够发布一个以上的数据流,一个数据流组允许我们选择接收哪个。
数据流组在定义拓扑时设置,就像我们在第二章看到的:
··· builder.setBolt("word-normalizer", new WordNormalizer()) .shuffleGrouping("word-reader"); ···
在前面的代码块里,一个bolt由TopologyBuilder对象设定, 然后使用随机数据流组指定数据源。数据流组通常将数据源组件的ID作为参数,取决于数据流组的类型不同还有其它可选参数。
NOTE:每个InputDeclarer可以有一个以上的数据源,而且每个数据源可以分到不同的组。
阅读全文
本文翻译自《Getting Started With Storm》 译者:吴京润 编辑:方腾飞
准备开始
在本章,我们要创建一个Storm工程和我们的第一个Storm拓扑结构。
NOTE: 下面假设你的JRE版本在1.6以上。我们推荐Oracle提供的JRE。你可以到http://www.java .com/downloads/下载。
操作模式
开始之前,有必要了解一下Storm的操作模式。有下面两种方式。
本地模式
在本地模式下,Storm拓扑结构运行在本地计算机的单一JVM进程上。这个模式用于开发、测试以及调试,因为这是观察所有组件如何协同工作的最简单方法。在这种模式下,我们可以调整参数,观察我们的拓扑结构如何在不同的Storm配置环境下运行。要在本地模式下运行,我们要下载Storm开发依赖,以便用来开发并测试我们的拓扑结构。我们创建了第一个Storm工程以后,很快就会明白如何使用本地模式了。
译者注:本文翻译自《Getting Started With Storm》,本书中所有Storm相关术语都用斜体英文表示。 这些术语的字面意义翻译如下,由于这个工具的名字叫Storm,这些术语一律按照气象名词解释
下面的术语跟气象就没有关系了
本文是该书的第一章。
基础知识
Storm是一个分布式的,可靠的,容错的数据流处理系统。它会把工作任务委托给不同类型的组件,每个组件负责处理一项简单特定的任务。Storm集群的输入流由一个被称作spout的组件管理,spout把数据传递给bolt, bolt要么把数据保存到某种存储器,要么把数据传递给其它的bolt。你可以想象一下,一个Storm集群就是在一连串的bolt之间转换spout传过来的数据。 阅读全文