在生产集群上运行topology跟本地模式差不多。下面是步骤:
1)定义topology(如果是java的话, 用TopologyBuilder)
2) 使用StormSubmitter来把topology提交到集群。StormSubmitter的参数有:topology的名字,topology的配置对象,以及topology本身。
比如:
1
2
3
4
5
|
Config conf = new Config();
conf.setNumWorkers( 20 );
conf.setMaxSpoutPending( 5000 );
StormSubmitter.submitTopology( "name" ,
conf, topology);
|
3) 创建一个包含你的程序代码以及你代码所依赖的依赖包的jar包(有关storm的jar包不用包括, 这些jar包会在工作节点上自动被添加到classpath里面去)。如果你使用maven, 那么插件:Maven Assembly Plugin可以帮你打包,只要把下面的配置加入你的pom.xml。
01
02
03
04
05
06
07
08
09
10
11
12
13
|
< plugin >
< artifactId >maven-assembly-plugin</ artifactId >
< configuration >
< descriptorRefs >
< descriptorRef >jar-with-dependencies</ descriptorRef >
</ descriptorRefs >
< archive >
< manifest >
< mainClass >com.path.to.main.Class</ mainClass >
</ manifest >
</ archive >
</ configuration >
</ plugin >
|
然后运行mvn assembly:assembly就可以打包了. 再说一下,不用包括storm相关的jar包,它们会自动加到classpath里面。
4)用storm客户端去提交jar包:
1
|
storm jar allmycode.jar org.me.MyTopology arg1 arg2 arg3 |
storm jar 会把代码提交到集群并且配置StormSubmitter类以让它和正确的集群进行通信。在这个例子里面,上传jar包之后storm jar命令会调用org.me.MyTopology的main函数,参数是 arg1, arg2, arg3。关于如何配置你的storm客户端去和storm集群进行通信可以看下配置storm开发环境。
常见配置
有很多topology级的配置可以设。这里有关于所有配置的清单, 以”TOPOLOGY”打头的配置是topology级别的配置,可以覆盖全局级别的配置。下面是一些比较常见的:
1)Config.TOPOLOGY_WORKERS: 这个设置用多少个工作进程来执行这个topology。比如,如果你把它设置成25, 那么集群里面一共会有25个java进程来执行这个topology的所有task。如果你的这个topology里面所有组件加起来一共有150的并行度,那么每个进程里面会有6个线程(150 / 25 = 6)。
2)Config.TOPOLOGY_ACKERS: 这个配置设置acker线程的数目。Ackers是Storm的可靠性API的一部分,关于storm的可靠性API可以看下:Twitter Storm如何保证消息不丢失。
3)Config.TOPOLOGY_MAX_SPOUT_PENDING: 这个设置一个spout task上面最多有多少个没有处理的tuple(没有ack/failed)回复, 我们推荐你设置这个配置,以防止tuple队列爆掉。
4)Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS: 这个配置storm的tuple的超时时间 – 超过这个时间的tuple被认为处理失败了。这个设置的默认设置是30秒,对于大多数的topology都已经足够了。关于storm的可靠性API可以看看Twitter Storm如何保证消息不丢失。
5)Config.TOPOLOGY_SERIALIZATIONS: 为了在你的tuple里面使用自定义类型,你可以用这个配置注册自定义serializer。
终止一个topology
要终止一个topology, 执行:
1
|
storm kill {stormname}
|
其中{stormname}是提交topology给storm集群的时候指定的名字。
storm不会马上终止topology。相反,它会先终止所有的spout,让它们不再发射任何新的tuple, storm会等Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS秒之后才杀掉所有的工作进程。这会给topology足够的时间来完成所有我们执行storm kill命令的时候还没完成的tuple。
更新一个运行中的topology
为了更新一个正在运行的topology, 唯一的选择是杀掉正在运行的topology然后重新提交一个新的。一个计划中的命令是实现一个storm swap命令来运行时更新topology, 并且保证前后两个topology不会同时在运行,同时保证替换所造成的“停机”时间最少。
监控topology
监控topology的最好的方法是使用Storm UI。Storm UI提供有关task里面发生的错误以及topology里面每个组件的吞吐量和性能方面的统计信息。同时你可以看看集群里面工作机器上面的日志。
相关推荐
Nimbus负责任务调度和资源分配,而Supervisors则在工作节点上运行topologies。 在压缩包"storm-traffic-master"中,可能包含了以下内容: 1. **源码**:这通常包括定制的Storm spouts和bolts,以及与Kafka和...
5. **本地运行与集群部署**:Storm提供了本地模式,可以在单机上测试Topology,验证其正确性。一旦调试完毕,可以将其部署到Storm集群上,实现分布式运行。 6. **容错机制**:Storm通过检查点和状态持久化来确保...
5. 集群部署:虽然示例在本地运行,但也可以了解到如何将Topology部署到生产环境的Storm集群中。 总结起来,"Storm-EPL-Example-2.0.19.zip"不仅是一个示例项目,更是一个学习Storm和EPL的实践平台。通过深入研究和...
6. **提交拓扑(Submit Topology)**:当拓扑在本地验证无误后,可以将其提交到集群运行。Storm提供了命令行工具nimbus来提交和管理拓扑。 7. **Zookeeper**:在生产环境中,Storm使用Zookeeper进行集群协调,管理...
标题“storm1.2.1-hello...通过这个项目,学习者可以了解如何编写Storm Topology,如何在本地模式下运行测试,以及如何将其部署到生产环境。对于希望深入理解实时数据处理和Apache Storm的人来说,这是一个很好的起点。
在IT行业中,构建可扩展和高可用性的系统是至关重要的,这通常涉及到将服务或应用分布在多个计算节点上,形成一个集群。对于Elixir开发者来说,利用Erlang虚拟机(VM)的分布式特性,可以轻松地实现这一点。标题和...
5. **部署拓扑**:一旦集群运行起来,你可以使用`bin/storm jar`命令提交你的拓扑到集群。这个命令需要指定包含拓扑的JAR文件路径以及拓扑类名。 6. **监控和管理**:通过Storm UI(默认在本地8080端口运行)可以...
在Twitter,Heron作为主要的流媒体系统,运行数以百万计的开发和生产topologies。由于Heron可高效使用资源,在迁移Twitter所有的topologies后,整体硬件减少了3倍,导致Twitter的基础设置效率有了显著的提升。了解...
无论是在小规模的测试还是在大规模的生产环境中,Storm都显示出其强大的实时数据处理能力。随着数据时代的到来,Storm技术的掌握对于从事大数据实时处理的开发者来说,是非常有价值的技能之一。
因为它们都会运行在不同的Jvm或物理机器上,这个模式就是正式的生产模式。 二、写一个HelloWord Storm 我们现在创建这么一个应用,统计文本文件中的单词个数,详细学习过Hadoop的朋友都应该写过。 那么我们需要...
- **远程模式**:适用于生产环境,组件分布在多台机器上。 **HelloWorldStorm 示例**: 1. **验证 Java 安装**:确保 Java 环境已正确安装。 2. **创建工程**:使用 Eclipse 或 IntelliJ IDEA 创建一个新的 Maven ...
1. 分布式:它可以在多台机器上分布式执行。 2. 可靠性:能够保证每个消息至少被处理一次。 3. 容错性:当工作节点失败时,任务可以自动重新分配。 4. 实时性:可以对流式数据进行实时处理。 5. 易于扩展:可以灵活...
5. **Supervisor配置**:Supervisors是运行在各个工作节点上的进程,它们管理着worker进程。`supervisor.slots.ports`定义了每个supervisor节点可以运行的worker数量。 6. **Nimbus配置**:Nimbus是Storm的协调者,...
- **故障注入测试** (Fault Injection Testing): 在非生产环境中模拟故障,以验证集群的响应和恢复能力。 #### 2. HACMP群集的设计 ##### 2.1 高可用性设计要点 在设计HACMP集群时,需要考虑以下几个关键因素: ...
- **Cluster 模式**: Storm 可以部署在本地模式进行开发测试,也可以在多机器集群上进行生产部署。 6. **监控与日志** - **UI界面**: Storm 提供了一个 Web UI,展示拓扑状态、性能指标以及错误信息,方便监控和...
6. **运行 Storm Topology**:提交 topology 到本地或集群运行,开始实时处理数据。 7. **监控和调试**:通过 Storm UI 监控 topology 的运行状态,进行必要的性能调优和错误排查。 总之,"kafka-storm-starter-...
用户需要配置 Nimbus、Supervisor 及相关服务,并在集群上启动,可以通过修改 conf/storm.yaml 文件来完成。 10. **监控与管理**: Storm 提供了一个基于 Web 的 UI,可以查看 Topologies 的运行状态、节点统计...
在生产环境中,你需要提交拓扑到Storm集群,由Nimbus分配任务给Supervisors,然后在Worker进程中运行。 6. **容错机制**: Storm的分布式特性提供了容错能力。如果某个Worker进程失败,Supervisor会重新启动它,确保...