天天看点

《Storm企业级应用:实战、运维和调优》——2.4 创建Topology并向集群提交任务

本节书摘来自华章计算机《storm企业级应用:实战、运维和调优》一书中的第2章,第2.4节,作者:马延辉 陈书美 雷葆华著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

topology是storm的核心概念之一,是将spout与bolt融合在一起的纽带,在storm集群中运行,完成实时计算的任务。在storm集群中,topology的定义是一个thrift结构,并且nimbus就是一个thrift服务,可以提交由任何语言创建的topology。下面使用java语言讲解topology的使用。首先了解如何创建topology。

2.4.1 创建topology

在创建一个topology之前,设计一个topology来统计词频。在创建topology之前,要准备spout(数据源)和bolt来组成topology。这里简单介绍创建的spout和bolt,第3章会详细介绍这两个概念。

下面梳理topology的大致结构。

1.?spout

创建一个wordspout数据源,负责发送语句。wordspout的代码如下:

2.?bolt

两个bolt,一个负责将语句切分,即splitsentencebolt,另一个是对切分的单词进行词频累加的bolt,即wordcountbolt。下面是这两个bolt的具体代码。

3.?topology

要创建的topology的spout从句子队列中随机生成一个句子,spout用setspout方法插入一个独特的id到topology。必须给予topology中的每个节点一个id,id是由其他bolt用于订阅该节点的输出流,其中wordspout在topology中的id为1。

setbolt用于在topology中插入bolt,在topology中定义的第一个bolt是切分句子的splitsentencebolt,该bolt将句子流转成单词流,第二个bolt统计单词。topology的代码如下:

这样就创建了简单的topology结构,下面介绍如何使用topology。

2.4.2 向集群提交任务

向storm集群提交topology任务,类似提交mapreduce作业到hadoop集群中,只需要运行jar包中的topology即可。而使用kill命令可以杀掉任务,类似杀掉mapreduce作业。下面详细介绍这两部分内容。

1.?启动topology

在storm的安装主目录下,执行下面的命令提交任务:

其中,jar命令专门负责提交任务,testtopolgoy.jar是包含topology实现代码的jar包,org.me.mytopology的main方法是topology的入口,arg1、arg2和arg3为org.me.mytopology执行时需要传入的参数。

2.?停止topology

在storm主目录下,执行kill命令停止之前已经提交的topology:

其中,{toponame}为topology提交到storm集群时指定的topology任务名称,该名称可以在代码中指定,也可以作为参数传入topology中。