在进群生产环境下运行Topology和在本地模式下运行非常相似。下面是步骤:

1、定义Topology(如果使用Java开发语言,则使用TopologyBuilder来创建)

2、使用StormSubmitter向集群提交Topology。StormSubmitter有三个参数,Topology的名字,Topology的配置,和Topology本身。下面是例子:

1
2
3
4
Config conf = new Config();
conf.setNumWorkers(20);
conf.setMaxSpoutPending(5000);
StormSubmitter.submitTopology("mytopology", conf, topology);

3、将你的代码和你代码所依赖的jar包打包成一个jar包(Storm的jar包除外,Storm的jar包会被添加到worker节点的classpath路径)

如果你使用maven,插件Maven Assembly Plugin会帮你打包,只需将下面的代码添加到你的pom.xml中:

1
2
3
4
5
6
7
8
9
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命令来获取有效的jar包。确认你的jar包中没包含Storm的jar包,因为的classpath中已经存在。

4、使用Storm客户端将Topology提交到集群,指定你jar包的路径、名称河所有的参数然后运行:

1
storm jar path/to/allmycode.jar org.me.MyTopology arg1 arg2 arg3

storm jar命令会提交jar包给集群并且使用StormSubmitter类和有效地集群对话。在上面的示例中,在提交jar包后storm jar会使用"arg1","arg2","arg3"三个参数调用org.me.MyTopology的主方法.

你可以阅读设置Storm开发环境一文来查看如何使用storm客户端来和Storm进群对话。

常用的设置

每个Topology都有很多不同的配置。点击此处查看Topology的所有设置。带“TOPOLOGY”前缀的设置(其他的是集群的设置,不能被覆盖)可以被特定的Topology配置覆盖。下面是一些常用的Topology设置:

1、Config.TOPOLOGY_WORKERS

这个参数设置设置了使用了多少个工作进程去执行Topology。例如,如果你将此参数设置为25,就会有25个Java进程在集群中执行所有任务。如果在Topology中有150个并行执行的组件,那么每个工作进程会以6个线程的方式执行个任务。

2、Config.TOPOLOGY_ACKER_EXECUTORS

这个参数设置当Spout元组被完全处理后,追踪和探测元组树的执行进程的数量。Acker是Storm的一部分,你可以阅读Guaranteeing message processing一文来获取更多关于Acker的信息。如果不设置此参数,或者将此参数设置为空,Storm会将此参数设置为Topology指定的运行工作节点的数量。如果将这个参数设置为0,Storm会在Spout发出元组后立刻返回成功信息,这将影响可靠性。

3、Config.TOPOLOGY_MAX_SPOUT_PENDING

此参数设置了在单一一个Spout任务中一次可以存留的最大元组的数量(没有返回成功或者失败消息的元组)。强烈建议设置此参数防止队列溢出。

4、Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS

这个参数设置了Spout元组被成功处理的最大超时时间。默认是30s,这对大多数的Topology来说已经足够了。阅读Guaranteeing message processing一文了解更多Storm可靠性的知识。

5、Config.TOPOLOGY_SERIALIZATIONS

你可以使用这个参数来注册更多的序列化器,以便在元组中使用自定义类型。

杀死一个Topology

要杀死一个Topology图谱,只需简单的运行:

1
storm kill {stormname}

将提交Topology时设置的名字传给  storm kill。

Storm不会立刻杀死Topology。它会使所有的Spout失效并且确认他们不会再发射任何元组。Storm会在摧毁所有的工作节点之前等待Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS参数所设置的秒数,这给Topology足够的时间来处理完所有的元组。

更新运行中的Topology

要更新运行中的Topology,唯一的操作是杀掉当前的Topology然后重新提交一个新的Topology。一个计划中的特性是实现storm swap命令来用一个新的Topology替换运行中的Topology,保证最小的故障时间同时使所有的旧Topology不再处理元组。

监控Topology

监控Topology的最好方法是使用Storm UI。Storm UI提供了运行任务中遇到的错误,细粒度的吞吐量情况以及每个Topology中的每个组件的表现。你也可以查看集群中工作节点的日志。

Storm官方文档翻译之在生产环境集群中运行Topology的更多相关文章

  1. Storm官方文档翻译之设置开发环境

    本文将介绍如何设置Storm的开发环境.下面是大纲: 1.下载Storm发布包,解压,将解压的 bin目录放到你电脑的PATH中. 2.为了能够在远程集群中启动或者停止Topology,请将集群信息放 ...

  2. 【转】Twitter Storm: 在生产集群上运行topology

    Twitter Storm: 在生产集群上运行topology 发表于 2011 年 10 月 07 日 由 xumingming 作者: xumingming | 可以转载, 但必须以超链接形式标明 ...

  3. Neo4j 2.0 生产环境集群搭建

    一.在windows上搭建Neo4j ha cluster的配置方法: 例如:建立集群的三台机器的ip分别为:10.230.9.91,10.230.9.92,10.230.9.93. 10.230.9 ...

  4. 【K8S学习笔记】Part2:获取K8S集群中运行的所有容器镜像

    本文将介绍如何使用kubectl列举K8S集群中运行的Pod内的容器镜像. 注意:本文针对K8S的版本号为v1.9,其他版本可能会有少许不同. 0x00 准备工作 需要有一个K8S集群,并且配置好了k ...

  5. 企业生产环境集群稳定性-HA就行吗?

    在企业生产中,集群一旦运行,是要尽可能的将损失降到最低,现在所有的大数据技术都有HA,spark的.Hadoop的.HBase的等等, HA分冷备和热备,热备是集群自带的,冷备就是硬件的. 这样一种情 ...

  6. hadoop问题锦集(一):mapreduce不能在集群中运行

    问题详细: 搭建类hadoop的集群集群环境,查看hadoop dfsadmin -report 也有datanode节点.在master:50070上也有. 然而在eclipse环境上运行mapre ...

  7. win10下将spark的程序提交给远程集群中运行

    一,开发环境: 操作系统:win19 64位 IDE:IntelliJ IDEA JDK:1.8 scala:scala-2.10.6 集群:linux上cdh集群,其中spark为1.5.2,had ...

  8. Eclipse中将hadoop项目放在集群中运行

    1.加入配置文件到项目源码目录下(src) <configuration> <property> <name>mapreduce.framework.name< ...

  9. Storm集群中执行的各种组件及其并行

    一.Storm中执行的组件      我们知道,Storm的强大之处就是能够非常easy地在集群中横向拓展它的计算能力,它会把整个运算过程切割成多个独立的tasks在集群中进行并行计算.在Storm中 ...

随机推荐

  1. hibernate异常:org.hibernate.exception.GenericJDBCException

    异常:org.hibernate.exception.GenericJDBCException 提示:Cannot open connection 提示:不能打开链接 一般这个异常是由 java.sq ...

  2. Socket.io 延伸

    项目正好用到了即时通讯功能,于是研究到了webSocket技术,后来发现了可以在web.[Android].[iOS]上同时使用的解决方案,那就是SocketIO.其实现原理啥的不做介绍了,直接贴上I ...

  3. 代码块(Block)回调一般阐述

    本章教程主要对代码块回调模式进行讲解,已经分析其他回调的各种优缺点和适合的使用场景. 代码块机制 Block变量类型 Block代码封装及调用 Block变量对普通变量作用域的影响 Block回调接口 ...

  4. chrom扩展学习

    详细教程-- http://www.ituring.com.cn/minibook/950

  5. 第一百零八节,JavaScript,内置对象,Global对象字符串编码解码,Math对象数学公式

    JavaScript,内置对象,Global对象字符串编码解码,Math对象数学公式 学习要点: 1.Global对象 2.Math对象 ECMA-262对内置对象的定义是:"由ECMASc ...

  6. 通过this获取当前点击选项相关数据

    很多时候jquery只能或者应该回去一个集合.然后通过this获取触发时间的对象及相关属性 this.jq('#needsType').on("click", ".sel ...

  7. Python 逻辑行/物理行

    物理行是你在编写程序时所看见的. 逻辑行是Python看见的单个语句.Python假定每个物理行对应一个逻辑行 . 默认地,Python希望每行都只使用一个语句,这样使得代码更加易读. 如果你想要在一 ...

  8. Java JVM 请别拿“String s=new String("z");创建了多少实例”来面试 [ 转载 ]

    Java 请别再拿“String s = new String("xyz");创建了多少个String实例”来面试了吧 [ 转载 ] @author RednaxelaFX 原文链 ...

  9. Storm 集群安装配置

    本文详细介绍了 Storm 集群的安装配置方法.如果需要在 AWS 上安装 Storm,你应该看一下 storm-deploy 项目.storm-deploy 可以自动完成 E2 上 Storm 集群 ...

  10. MVC3+EF4.1学习系列(六)-----导航属性数据更新的处理

    通过上一篇的学习 我们已经知道怎么查询关系 这篇就来说说怎么导航属性数据更新时的处理 以及EF又会为我们生成哪些SQL~ 老规矩 先看下今天的图 添加和修改页面基本就是这样 这节的内容相对简单~~ 主 ...