Storm的分布式的远程方法调用(DRPC)
来源:互联网 发布:淘宝旺旺聊天刷单禁词 编辑:程序博客网 时间:2024/05/23 01:00
一、DRPC就是分布式的远程方法调用。
在Storm里面引入DRPC主要是利用storm的实时计算能力来并行化CPU密集型的计算任务,DRPC的storm topology以函数的参数流作为数据,而把这些函数调用的返回值作为topology的输出流
DRPC其实不能算是storm本身的特性,他是通过组合storm的stream、spout、bolt、topology而成的一种模式,本来应该把DRPC单独打成一个包,但是DRPC实在是太有用了,所以我们把他和storm捆绑在一起
DRPC是通过一个‘DRPC Server’来实现
DRPC Server的整体工作过程如下:
1、接收一个RPC请求
2、发送请求到storm topology
3、从storm topology 接收结果
4、把结果返回给等待的客户端
下面例子我只用到了2个类:
由于我们使用DRPC的输入流作为参数,也就是不需要编写spout类,这里直接把bolts作为静态内部类写到BasicDRPCTopology里面
package hello.drpc1;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 {@Override public void execute(Tuple tuple, BasicOutputCollector collector) { String input = tuple.getString(1); //System.out.println("==========" + tuple.getValue(0)); 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 { //创建drpc实例 LinearDRPCTopologyBuilder builder = new LinearDRPCTopologyBuilder("exclamation"); //添加bolt 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()); } }}
再写一个远程调用方法:
package hello.drpc1;import backtype.storm.utils.DRPCClient;public class DrpcExclam {public static void main(String[] args) throws Exception {DRPCClient client = new DRPCClient("192.168.100.240", 3772); for (String word : new String[]{ "test1", "test2" }) { System.out.println(client.execute("exclamation", word)); }}}
这样我的代码就写完了。现在我们需要对环境做一些修改。
实现DRPC步骤(
1、需要修改配置文件内容为(分别修改每台机器配置):
vim /user/local/apache-storm-0.9.2/conf/storm.yaml drpc.servers: -'192.168.100.240'
2、需要启动storm的drpc服务(192.168.100.240启动):
storm drpc &
3、把相应的topology上传到storm服务器上去
如下图所示
用命令启动集群模式
storm jar storm04.jar hello.drpc1.BasicDRPCTopology exc
4、在本地调用远程topology(这里我们可以想象test1、test2是一个非常庞大的数据流,我们可以使用这种DPRC的方式直接调用,这样就非常方便了)
阅读全文
0 0
- Storm的分布式的远程方法调用(DRPC)
- storm drpc远程调用
- Storm Distributed RPC(DRPC)分布式远程过程调用
- STORM的DRPC通讯
- storm 的一个drpc例子
- Storm集群的DRPC模式
- 012-storm的drpc通信
- storm 的一个drpc例子(值得一看)
- Storm专题一、Storm DRPC 分布式计算
- Storm DRPC 使用及访问C++ Bolt问题的解决方法
- 一张图让你了解Storm的DRPC实现原理
- 用storm做drpc真的很赞
- storm drpc
- Storm DRPC
- Storm DRPC
- Storm DRPC
- storm drpc
- Storm DRPC
- android-O RescueParty 介绍
- Vue、angular的URL地址编写方式
- Intellij IDEA使用(二)—— 在Intellij IDEA中配置JDK(SDK)
- FZU Problem 1019 猫捉老鼠
- Dockerfile:redis镜像编写
- Storm的分布式的远程方法调用(DRPC)
- springbean的详细配置,装配对象,集合,map
- CSAPP Note chap4 & chap 5
- [Java] 浅拷贝与深拷贝
- RocketMQ 实战之快速入门
- 2017-12-10 targan求LCA
- Coin Change II
- 几种观察者模式
- java 集合 之 equals contain