首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 Twitter Storm 处理实时的大数据(2)

使用 Twitter Storm 处理实时的大数据(2)

Storm 示例演示现在让我们通过实现一个简单的 MapReduce 拓扑结构的代码(参见 ),看一下 Storm 示例。这个示例使用了来自 Nathan 的 Storm 入门工具包(可从 GitHub 获取)(参见  获取链接)的巧妙设计的字数示例。此示例演示了  中所示的拓扑结构,它实现了一个包含一个螺栓的 map 转换和包含一个螺栓的 reduce 转换。
清单 1. 为图 2 中的 Storm 构建一个拓扑结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
01  TopologyBuilder builder = new TopologyBuilder();
02         
03  builder.setSpout("spout", new RandomSentenceSpout(), 5);
04         
05  builder.setBolt("map", new SplitSentence(), 4)
06           .shuffleGrouping("spout");
07  
08  builder.setBolt("reduce", new WordCount(), 8)
09           .fieldsGrouping("map", new Fields("word"));
10  
11  Config conf = new Config();
12  conf.setDebug(true);
13  
14  LocalCluster cluster = new LocalCluster();
15  cluster.submitTopology("word-count", conf, builder.createTopology());
16  
17  Thread.sleep(10000);
18  
19  cluster.shutdown();




(添加了行号以供引用)首先使用 TopologyBuilder 声明一个新拓扑结构。接下来在第 3 行,定义了一个喷嘴(名为 spout),该喷嘴包含一个 RandomSentenceSpout。RandomSentenceSpout 类(也就是 nextTuple 方法)发出 5 个随机句子的其中一个作为它的数据。setSpout 方法末尾的 5 参数是一个并行性提示(或要为此活动创建的任务数)。
在第 5 和 6 行。我定义了第一个螺栓(或算法转换实体),在本例中为 map(或 split)螺栓。这个螺栓使用 SplitSentence 令牌化输入流并将其作为输出的各个单词发出。请注意,第 6 行使用了 shuffleGrouping,它定义了对此螺栓(在本例中为 “spout”)的输入订阅,还将流分组定义为混排。这种混排分组意味着来自喷嘴的输入将混排 或随机分发给此螺栓中的任务(该螺栓已提示具有 4 任务并行性)。
在第 8 和 9 行,我定义了最后一个螺栓,这个螺栓实际上用于 reduce 元素,使用该元素的输入作为 map 螺栓。WordCount 方法实现了必要的字数统计行为(将相似的单词分组到一起,以维护总数),但不是混排的,所以它的输出是一致的。如果有多个任务在实现 reduce 行为,那么您最终会得到分段的计数,而不是总数。
第 11 和 12 行创建和定义了一个配置对象并启用了 Debug 模式。Config 类包含大量配置可能性(参见 ,获取有关 Storm 类树的更多信息的链接)。
第 14 和 15 行创建了本地集群(在本例中,用于定义本地模式的用途)。我定义了我的本地集群、配置对象和拓扑结构的名称(可通过 builder 类的 createTopology 元素获取)。
最后,在第 17 行,Storm 休眠一段时间,然后在第 19 行关闭集群。请记住,Storm 是一个持续运行的操作系统,所以任务可存在相当长时间,不断处理它们订阅的流上的新元组。
您可在 Storm 入门工具包中了解这个非常简单的实现的更多信息,包括喷嘴和螺栓的细节。
使用 StormNathan Marz 编写了一组简单易懂的文档,详细介绍了如何安装 Storm 来执行集群模式和本地模式的操作。本地模式无需一个庞大的节点集群,即可使用 Storm。如果需要在一个集群中使用 Storm 但缺乏节点,也可在 Amazon Elastic Compute Cloud (EC2) 中实现一个 Storm 集群。请参见  获取每个 Storm 模式(本地、集群和 Amazon EC2)的参考信息。
其他开源的大数据解决方案自 Google 在 2004 年推出 MapReduce 范式以来,已诞生了多个使用原始 MapReduce 范式(或拥有该范式的质量)的解决方案。Google 对 MapReduce 的最初应用是建立万维网的索引。尽管此应用程序仍然很流行,但这个简单模型解决的问题也正在增多。
提供了一个可用开源大数据解决方案的列表,包括传统的批处理和流式处理应用程序。在将 Storm 引入开源之前将近一年的时间里,Yahoo! 的 S4 分布式流计算平台已向 Apache 开源。S4 于 2010 年 10 月发布,它提供了一个高性能计算 (HPC) 平台,向应用程序开发人员隐藏了并行处理的复杂性。S4 实现了一个可扩展的、分散化的集群架构,并纳入了部分容错功能。
表 1. 开源大数据解决方案解决方案开发商类型描述StormTwitter流式处理Twitter 的新流式大数据分析解决方案S4Yahoo!流式处理来自 Yahoo! 的分布式流计算平台HadoopApache批处理MapReduce 范式的第一个开源实现SparkUC Berkeley AMPLab批处理支持内存中数据集和恢复能力的最新分析平台DiscoNokia批处理Nokia 的分布式 MapReduce 框架HPCCLexisNexis批处理HPC 大数据集群
更多信息尽管 Hadoop 仍然是宣传最多的大数据分析解决方案,但仍可能存在许多其他的解决方案,每种解决方案都具有不同的特征。我在过去的文章中探讨了 Spark,它纳入了数据集的内存中处理功能(能够重新构建丢失的数据)。但 Hadoop 和 Spark 都专注于大数据集的批处理。Storm 提供了一个新的大数据分析模型,而且因为它最近被开源,所以也引起广泛的关注。
与 Hadoop 不同,Storm 是一个计算系统,它没有包括任何存储概念。这就使得 Storm 能够用在各种各样的上下文中,无论数据是从一个非传统来源动态传入,还是存储在数据库等存储系统中(或者由一个控制器用于对其他一些设备(比如一个交易系统)进行实时操作)都是如此。
返回列表