Storm集群的DRPC模式

Storm集群的DRPC模式

     storm的DRPC模式的作用是实现从远程调用storm集群的计算资源,而不需要连接到集群的某一个节点。OK。那么storm实现DRPC主要是使用LinearDRPCTopologyBuilder这个类。下面就先来看看一个简单的例子,它的源码的github上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import  backtype.storm.Config;
import  backtype.storm.LocalCluster;
import  backtype.storm.LocalDRPC;
import  backtype.storm.StormSubmitter;
import  backtype.storm.drpc.LinearDRPCTopologyBuilder;
import  backtype.storm.topology.BasicOutputCollector;
import  backtype.storm.topology.OutputFieldsDeclarer;
import  backtype.storm.topology.base.BaseBasicBolt;
import  backtype.storm.tuple.Fields;
import  backtype.storm.tuple.Tuple;
import  backtype.storm.tuple.Values;
 
 
public  class  BasicDRPCTopology {
   public  static  class  ExclaimBolt  extends  BaseBasicBolt {      //主要需要覆写execute方法和declareoutputfields方法
     @Override
     public  void  execute(Tuple tuple, BasicOutputCollector collector) {
       String input = tuple.getString( 1 );
       collector.emit( new  Values(tuple.getValue( 0 ), input +  "!" ));
     }
 
     @Override
     public  void  declareOutputFields(OutputFieldsDeclarer declarer) {
       declarer.declare( new  Fields( "id" "result" ));
     }
 
   }
 
   public  static  void  main(String[] args)  throws  Exception {
     LinearDRPCTopologyBuilder builder =  new  LinearDRPCTopologyBuilder( "exclamation" ); //实现DRPC模式
     builder.addBolt( new  ExclaimBolt(),  3 );
 
     Config conf =  new  Config();
 
     if  (args ==  null  || args.length ==  0 ) {
       LocalDRPC drpc =  new  LocalDRPC();
       LocalCluster cluster =  new  LocalCluster();
 
       cluster.submitTopology( "drpc-demo" , conf, builder.createLocalTopology(drpc));
 
       for  (String word :  new  String[]{  "hello" "goodbye"  }) {
         System.out.println( "Result for \""  + word +  "\": "  + drpc.execute( "exclamation" , word));
       }
 
       cluster.shutdown();
       drpc.shutdown();
     }
     else  {
       conf.setNumWorkers( 3 );
       StormSubmitter.submitTopology(args[ 0 ], conf, builder.createRemoteTopology());
     }
   }
}

    这段代码主要实现的功能是给接收到的每一个输入后面添加一个感叹号。ok,这样就可以编译提交了。

       不过在这之前需要先配置storm集群的drpc server的ip。如图。主要是下面的server的ip需要配置好。并且集群的每一个节点的配置文件都需要配置这项参数!

       

       然后即可使用storm drpc &命令启动drpc模式。(这里的分工是172.17.150.6为客户端,其余的172.17.150.7(.8,.11)为集群的三个节点,.11是nimbus节点。)

       OK,那接下来就使用客户端向集群提交Topology。如图。使用客户端向集群提交名为exclaim的Topology。里面设置的worker数为3。

       

       从下图可以看到两个supervisor分别有一个是运行两个worker,有一个是运行一个worker。

        

        

       ok,下面是客户端调用远程资源进行计算的程序。主要是声明DRPCClient的ip以及端口,以及指定执行的方法名和传入的参数(client.execute("exclamation",word))。

       

       运行结果如下。

       

       OK,整个DRPC的过程就是这样。

       谢谢大家!本人水平有限,请不吝指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值