前言:
昨天有朋友聊天说,我写的前面三篇太简单了,没有太多深入的东西。好吧,这说明我的目的达到了。我写这个系列的原因就是为了面向应用,进一步细化为两点:
1. 以例子说话,由简入深,一步步了解如何在Storm上开发应用,不会读起来吃力;
2. 对于一些原理性的东西,不去过于深究,只要记住Storm是这样实现的,开发的时候加以利用或规避。
在明白了这些基础的东西以后,如果对于原理性的东西Storm是如何实现的感兴趣,可以再去看源代码也不迟。毕竟这部分对开发应用的帮助并不直接。我认为,不必每个用Storm的人都必须了解Storm底层是如何实现的,当然,我会尝试在适当的位置插入相关原理性解释的链接,有兴趣可以直接去看看。就此原因,我把标题改成“Storm应用系列”。
注:转帖请注明,原帖地址:
http://blog.csdn.net/xeseo/article/details/17750379
Component
Spout
在前面基本例子中,我们实现了一个RandomSpout,来看看其类图
- Spout的最顶层抽象是ISpout接口。
open方法是初始化动作。允许你在该spout初始化时做一些动作,传入了上下文,方便取上下文的一些数据。
close方法在该spout关闭前执行,但是并不能得到保证其一定被执行。spout是作为task运行在worker内,在cluster模式下,supervisor会直接kill -9 woker的进程,这样它就无法执行了。而在本地模式下,只要不是kill -9, 如果是发送停止命令,是可以保证close的执行的。
activate和deactivate :一个spout可以被暂时激活和关闭,这两个方法分别在对应的时刻被调用。
nextTuple 用来发射数据。
ack(Object)
传入的Object其实是一个id,唯一表示一个tuple。该方法是这个id所对应的tuple被成功处理后执行。
fail(Object)
同ack,只不过是tuple处理失败时执行。
我们的RandomSpout 由于继承了BaseRichSpout,所以不用实现close、activate、deactivate、ack、fail和getComponentConfiguration方法,只关心最基本核心的部分。
结论:
通常情况下(Shell和事务型的除外),实现一个Spout,可以直接实现接口IRichSpout,如果不想写多余的代码,可以直接继承BaseRichSpout。
Bolt
- IBolt继承了java.io.Serializable,我们在nimbus上提交了topology以后,创建出来的bolt会序列化后发送到具体执行的worker上去。worker在执行该Bolt时,会先调用prepare方法传入当前执行的上下文
- execute接受一个tuple进行处理,并用prepare方法传入的OutputCollector的ack方法(表示成功)或fail(表示失败)来反馈处理结果
- cleanup 同ISpout的close方法,在关闭前调用。同样不保证其一定执行。
- public class ExclaimRichBolt extends BaseRichBolt {
- private OutputCollector collector;
- @Override
- public void prepare(Map stormConf, TopologyContext context,
- OutputCollector collector) {
- this.collector = collector;
- }
- @Override
- public void execute(Tuple tuple) {
- this.collector.emit(tuple, new Values(tuple.getString(0)+"!"));
- this.collector.ack(tuple);
- }
- @Override
- public void declareOutputFields(OutputFieldsDeclarer declarer) {
- declarer.declare(new Fields("after_excl"));
- }
- }
- //builder.setBolt("exclaim", new ExclaimBasicBolt(), 2).shuffleGrouping("spout");
- builder.setBolt("exclaim", new ExclaimRichBolt(), 2).shuffleGrouping("spout");
http://blog.csdn.net/xeseo/article/details/17750379
相关推荐
【storm demo】是一个基于Apache Storm的实践项目,旨在教授如何运用Storm的核心组件——Spout、Bolt和Topology来构建实时数据处理系统。Apache Storm是一个开源的分布式实时计算系统,能够处理大量的流数据,并保证...
标题中的"Storm定时匹配插入mysql,源数据录入hdfs"涉及到两个主要的分布式处理技术——Apache Storm和Hadoop HDFS,以及将处理结果存储到MySQL数据库的操作。以下是对这些技术及其应用的详细解释: Apache Storm是...
首先,书中会介绍Storm的基本概念,包括它的核心组件—— Nimbus、Supervisor、Worker、Spout和Bolt。Nimbus是集群的主控节点,负责任务调度和资源分配;Supervisor是工作节点,管理具体的worker进程;Worker则是...
这通常通过编写Java或Clojure代码来实现,使用Storm的API创建Spout和Bolt实例,并使用TopologyBuilder构建拓扑结构。 2. **配置topology**:配置项包括设置并行度(每个组件的worker进程和执行线程数量)、设置容错...
- 目前,Storm 已经在多个领域得到广泛应用,包括社交媒体分析、在线广告、物联网数据处理等。 - **1.5.2 发展趋势** - 随着实时数据分析需求的增长,Storm 的应用范围将继续扩大。同时,随着技术的进步,Storm 将...
《Storm流计算项目:1号店电商实时数据分析系统——storm-kafka详解与实战案例》 在大数据处理领域,实时计算已经成为不可或缺的一部分,特别是在电商行业中,实时数据分析能够帮助企业快速响应市场变化,提高运营...
### 大数据开发高级就业指导课程——Storm及Trident理论与实战 #### 一、Storm并发机制 在Storm中,为了提高数据处理的性能和效率,设计了一套完整的并发机制。这一机制涉及到Topology的组件配置、并发度设置等多...
在Apache软件基金会的支持下,有三个广受欢迎的框架——Storm、Spark和Samza,它们各自提供了不同的方法来处理持续的数据流。接下来,我们将深入探讨这三个框架的特点以及它们之间的差异。 Apache Storm是最先被...
而为了更好地管理和运行Storm应用程序,开发出了专门的启动器——StormFN-Launcher。本文将详细解析这一工具,以及其与C#语言的结合,帮助开发者更高效地部署和管理Storm任务。 首先,StormFN-Launcher是为StormFN...
学习者还将学习Storm的编程API,如Topology、Spout、Bolt,以及如何使用Storm处理事务,确保消息的可靠性和容错性。 这些知识点构成了大数据课程体系的主要组成部分,通过学习,可以为从事大数据分析、处理和应用的...
- **Storm常用组件和编程API**:介绍Topology、Spout、Bolt等核心组件的使用方法。 - **Storm分组策略(stream groupings)**:解释不同的数据分发策略,如shuffle grouping、fields grouping等。 - **使用Storm开发...
spout/bolt代码)进程。这些容器是基于集群中的节点的资源可用性来实现分配和调度。对于topology元数据,例如物理计划和执行细节,都是 保管在Zookeeper中。Heron的功能: Off the shelf scheduler:通过抽象出...
Apache Storm则专为实时处理而设计,它的核心概念是拓扑结构,由多个处理组件(spout和bolt)组成,可以处理高吞吐量的数据流。Storm的强大之处在于它能够保证消息至少被处理一次,确保了数据处理的可靠性。 Apache...