FW:分布式实时计算storm 原理简介及单机版安装指南(3)
下面是以本地模式运行ExclamationTopology的代码:
1 | Config conf =newConfig(); |
2 | conf.setDebug( true ); |
3 | conf.setNumWorkers( 2 ); |
4 | |
5 | LocalCluster cluster =newLocalCluster(); |
6 | cluster.submitTopology( "test" , conf, builder.createTopology()); |
7 | Utils.sleep( 10000 ); |
8 | cluster.killTopology( "test" ); |
9 | cluster.shutdown(); |
首先, 这个代码定义通过定义一个LocalCluster对象来定义一个进程内的集群。提交topology给这个虚拟的集群和提交topology给分布式集群是一样的。通过调用submitTopology方法来提交topology, 它接受三个参数:要运行的topology的名字,一个配置对象以及要运行的topology本身。
topology的名字是用来唯一区别一个topology的,这样你然后可以用这个名字来杀死这个topology的。前面已经说过了, 你必须显式的杀掉一个topology, 否则它会一直运行。
Conf对象可以配置很多东西, 下面两个是最常见的:
- TOPOLOGY_WORKERS(setNumWorkers)
定义你希望集群分配多少个工作进程给你来执行这个topology. topology里面的每个组件会被需要线程来执行。每个组件到底用多少个线程是通过setBolt和setSpout来指定的。这些线程都运行在工作进程里面. 每一个工作进程包含一些节点的一些工作线程。比如, 如果你指定300个线程,60个进程, 那么每个工作进程里面要执行6个线程, 而这6个线程可能属于不同的组件(Spout, Bolt)。你可以通过调整每个组件的并行度以及这些线程所在的进程数量来调整topology的性能。 - TOPOLOGY_DEBUG(setDebug), 当它被设置成true的话, storm会记录下每个组件所发射的每条消息。这在本地环境调试topology很有用, 但是在线上这么做的话会影响性能的。
感兴趣的话可以去看看Conf对象的Javadoc去看看topology的所有配置。
可以看看创建一个新storm项目去看看怎么配置开发环境以使你能够以本地模式运行topology.
运行中的Topology主要由以下三个组件组成的:
Worker processes(进程)
Executors (threads)(线程)
Tasks
Spout或者Bolt的Task个数一旦指定之后就不能改变了,而Executor的数量可以根据情况来进行动态的调整。默认情况下# executor = #tasks即一个Executor中运行着一个Task