getting start with storm 翻译 第三章 part-2

转载请注明出处:http://blog.csdn.net/lonelytrooper/article/details/9964425

LocalCluster versus StormSubmitter

到目前为止,你使用了叫做LocalCluster的设施来在你本地的电脑中运行topology。在你的电脑里运行storm的基础设施使你可以方便的运行和调试不同的topologies。但是当你想提交你的topology到一个正在运行的storm集群时怎么样呢?storm的一个有趣的特点是提交你的topology到一个实际的集群中运行是很容易的。你需要将LocalCluster修改为StormCommitter并且执行submitTopology方法,这个方法负责将topology提交到集群。

你可以看到下边代码的改变:

//LocalCluster cluster = new LocalCluster();

//cluster.submitTopology("Count-Word-Topology-With-Refresh-Cache",conf,

builder.createTopology());

StormSubmitter.submitTopology("Count-Word-Topology-With-Refresh-Cache",conf,

builder.createTopology());

//Thread.sleep(1000);

//cluster.shutdown();

当你使用StormSubmitter时,你不能像你使用LocalCluster那样通过代码控制集群。

 

接下来,把资源打包成一个jar,它将在你运行storm客户端命令提交topology时被发送。因为你使用maven,你唯一需要做的一件事是到源文件目录下,然后运行下边的命令:

         mvn package

一旦你有了创建好的jar,使用storm jar命令来提交topology(在附录A中你会知道怎样安装storm客户端)。语法是storm jar allmycode.jar org.me.MyTopology arg1arg2 arg3。

这个示例中,在topologies的源工程文件夹运行:

         storm jartarget/Topologies-0.0.1-SNAPSHOT.jar countword.TopologyMain src/main/

resources/words.txt

用这些命令,你可以提交topology到集群。

要停止/杀掉它,运行:

         storm killCount-Word-Topology-With-Refresh-Cache

topology的名字必须是唯一的。

要安装storm客户端,见附录A。

DPRC Topologies

有一种特殊类型的topology被称为是分布式远程过程调用(DRPC),它通过storm分布式的能力来执行远程过程调用(RPC)(见图3-1)。Storm提供了一些工具来激活DRPC的使用。第一个是一个在客户端和storm topology之间作为连接器运行的DRPC服务器,作为topology spouts的源。它接收一个函数和它的参数来执行。然后对于函数操作的每个数据片,该服务器指定一个在topology中使用的请求ID来识别RPC请求。当topology执行最后一个bolt时,它必须发射RPC的请求ID和结果,这使得DRPC服务器可以返回结果至正确的客户端。

一个单独的DRPC服务器可以执行很多函数。每个函数可以由一个唯一的标识符识别。

 

Storm提供的第二个工具是LinearDRPCTopologyBuilder(在示例中使用的),一个来帮助构建DRPCtopologies的抽象。构建的topology创建DRPCSpouts---它连接DRPC服务器并且发送数据到topology的剩余部分---topology还包装bolts,这使得结果可以从最后一个bolt返回。所有添加到LinearDRPCTopologyBuilder上的bolts被顺序执行。

作为这种类型topology的一个示例,你可以创建一个累加数的处理过程。这只是一个简单的示例,但是可以继承这个概念来执行复杂的分布式数学操作。


图3-1 DRPC topology模式

Bolt有如下的输出声明:

public voiddeclareOutputFields(OutputFieldsDeclarerdeclarer) {

declarer.declare(newFields("id","result"));

}

因为这是topology中唯一的bolt,它必须发射RPC ID和结果。

execute方法负责执行增加的操作:

public voidexecute(Tuple input) {

String[]numbers= input.getString(1).split("\\+");

Integer added =0;

if(numbers.length<2){

throw new InvalidParameterException("Shouldbe at least 2 numbers");

}

for(String num:numbers){

added +=Integer.parseInt(num);

}

collector.emit(newValues(input.getValue(0),added));

}

包含做累加的bolt的topology的定义如下:

public static voidmain(String[]args) {

LocalDRPC drpc =newLocalDRPC();

LinearDRPCTopologyBuilder builder = new LinearDRPCTopologyBuilder("add");

builder.addBolt(newAdderBolt(),2);

Config conf =newConfig();

conf.setDebug(true);

LocalCluster cluster =newLocalCluster();

cluster.submitTopology("drpc-adder-topology",conf,

builder.createLocalTopology(drpc));

String result =drpc.execute("add","1+-1");

checkResult(result,0);

result =drpc.execute("add","1+1+5+10");

checkResult(result,17);

cluster.shutdown();

drpc.shutdown();

}

创建LocalDRPC对象来在本地运行DRPC。接着,创建topology builder来添加bolt到topology。为了测试topology,在你的DRPC对象上使用execute方法。

为连接一个远程的DRPC服务器,需要使用DRPCClient类。DRPC服务器暴露一个可以被多种语言使用的Thrift API,并且在本地或远程运行DRPC服务器的API是一样的。为了提交topology到storm集群,使用builder对象的createRemoteTopology方法来代替createLocalTopology方法,该方法使用storm配置中的DRPC配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值