Storm drpc学习
示例代码:
package com.lky.test; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Test; import backtype.storm.Config;
import backtype.storm.LocalCluster;
import backtype.storm.LocalDRPC;
import backtype.storm.drpc.DRPCSpout;
import backtype.storm.drpc.ReturnResults;
import backtype.storm.topology.BasicOutputCollector;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.topology.TopologyBuilder;
import backtype.storm.topology.base.BaseBasicBolt;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Tuple;
import backtype.storm.tuple.Values;
import backtype.storm.utils.Utils; /**
* @ClassName: manualDRPC
* @Description: storm 分布式RPC学习
* @author Administrator
* @date 2015年10月23日
* @version 1.0
*/
public class manualDRPC { private static Log log = LogFactory.getLog(manualDRPC.class); @SuppressWarnings("serial")
public static class ExclamationBolt extends BaseBasicBolt {
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("result", "return-info"));
} @Override
public void execute(Tuple tuple, BasicOutputCollector collector) {
String arg = tuple.getString(0);
Object retInfo = tuple.getValue(1);
log.info("execute----------->"+arg+"--------"+retInfo);
collector.emit(new Values(arg + "!!!", retInfo));
}
} @Test
public void test(){
TopologyBuilder builder=new TopologyBuilder();
LocalDRPC drpc=new LocalDRPC();//本地RPC //构建topology
DRPCSpout drpcSpout=new DRPCSpout("exclation",drpc);
builder.setSpout("drpc", drpcSpout,2);
builder.setBolt("exam", new ExclamationBolt(),4).shuffleGrouping("drpc");
builder.setBolt("return", new ReturnResults(),4).shuffleGrouping("exam"); //配置topology
Config config=new Config();
config.setDebug(true);
config.setMaxSpoutPending(1000);
config.setNumWorkers(2); //本地集群
LocalCluster localCluster=new LocalCluster();
localCluster.submitTopology("test", config, builder.createTopology()); //本地和storm交互
System.out.println("-------------"+drpc.execute("exclation", "luo")+"-------------");
System.out.println("-------------"+drpc.execute("exclation", "lky")+"-------------"); Utils.sleep(1000*10);
drpc.shutdown();
localCluster.killTopology("test");
localCluster.shutdown();
} }
package com.lky.test; import java.util.Map; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Test; import backtype.storm.Config;
import backtype.storm.LocalCluster;
import backtype.storm.LocalDRPC;
import backtype.storm.drpc.LinearDRPCTopologyBuilder;
import backtype.storm.task.OutputCollector;
import backtype.storm.task.TopologyContext;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.topology.base.BaseRichBolt;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Tuple;
import backtype.storm.tuple.Values;
import backtype.storm.utils.Utils; /**
* @ClassName: drpcTopology
* @Description:线性drpc学习
* @author Administrator
* @date 2015年10月23日
*
*/
public class drpcTopology { @SuppressWarnings("serial")
public static class Exclation extends BaseRichBolt {
private static Log log = LogFactory.getLog(Exclation.class);
private OutputCollector _outputCollector; @Override
public void execute(Tuple tuple) {
String res = null;
try {
res = tuple.getString(1);
if (null != res) {
_outputCollector.emit(new Values(tuple.getValue(0), res + "!!!!"));
log.info("execute 发射消息-------->" + res);
} } catch (Exception e) {
log.error("execute处理异常!!!");
}
} @Override
public void prepare(@SuppressWarnings("rawtypes") Map conf, TopologyContext context, OutputCollector outputCollector) {
this._outputCollector = outputCollector;
} @Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("id", "result"));
}
} @SuppressWarnings("deprecation")
@Test
public void testDRPC() {
// LinearDRPCTopologyBuilder帮助我们自动集成了DRPCSpout和returnResults(bolt)
LinearDRPCTopologyBuilder builder = new LinearDRPCTopologyBuilder("text");
builder.addBolt(new Exclation(), 3); Config config = new Config();
LocalDRPC drpc = new LocalDRPC(); LocalCluster cluster = new LocalCluster();
cluster.submitTopology("drpc-test", config, builder.createLocalTopology(drpc)); for (String word : new String[] { "hello", "word" }) {
System.out.println("result \"" + word + "\": " + drpc.execute("text", word));
} Utils.sleep(1000 * 5);
drpc.shutdown();
cluster.killTopology("drpc-test");
cluster.shutdown();
} }
Storm drpc学习的更多相关文章
- storm drpc分布式本地和远程调用模式讲解
一.drpc 的介绍 1.rpc RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. 2.drpc drp ...
- Storm DRPC实现机制分析
DRPC是建立在Storm基本概念(Topology.Spout.Bolt.Stream等)之上的高层抽象,个人理解它的目标是在Storm 集群之上提供一种分布式的RPC框架,以便能够利用Storm快 ...
- Storm入门学习随记
推荐慕课网视频:http://www.imooc.com/video/10055 ====Storm的起源. Storm是开源的.分布式.流式计算系统 什么是分布式呢?就是将一个任务拆解给多个计算机去 ...
- Storm入门(十二)Twitter Storm: DRPC简介
作者: xumingming | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://xumingming.sinaapp.com/756/twitter-stor ...
- Flume-ng+Kafka+storm的学习笔记
Flume-ng Flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统. Flume的文档可以看http://flume.apache.org/FlumeUserGuide.html ...
- 【Storm】学习笔记
Storm 1 基本概念 1.1 分布式.可扩展.高容错.实时流处理.跨语言 1.2 应用场景 1.2.1 实时分析 1.2.2 在线机器学习 1.2.3 分布式RPC 1.2.4 ETL数据抽取 1 ...
- Storm个人学习总结
https://www.jianshu.com/p/c7fba7d6a24d https://www.cnblogs.com/peak-c/p/6297794.html https://blog.cs ...
- storm学习路线指南
关于对storm的介绍已经有很多了,我这里不做过多的介绍,我介绍一下我自己的学习路线,希望能帮助一些造轮子的同学走一些捷径,毕竟我也是站在前人总结整理的基础上学习了,如果有不足之处,还请大家不要喷我. ...
- dotNET使用DRPC远程调用运行在Storm上的Topology
Distributed RPC(DRPC)是Storm构建在Thrift协议上的RPC的实现,DRPC使得你可以通过多种语言远程的使用Storm集群的计算能力.DRPC并非Storm的基础特性,但它确 ...
随机推荐
- SQLServer 工具技巧
SQLServerProfiler 的使用 http://www.jikexueyuan.com/course/1712.html
- LINUX更改时区和时间
因为公司运营海外游戏,服务器也多数放在国外,有时候要求服务器时区和时间要与所服务的地区一致,这里就涉及到更改服务器时区和时间的问题: 下面以一台在美国的服务器为例,我们的IDC提供商是一家德国公司,服 ...
- bzoj 3831 Little Bird (单调队列优化dp)
/*先贴个n*n的*/ #include<iostream> #include<cstdio> #include<cstring> #define maxn 100 ...
- ASP.NET-FineUI开发实践-6(三)
自动补全也算是好东西吧,我也不清楚下拉列表可以过滤为啥还有自动补全,其实自动补全用到还是通过jq获取服务端的动态数据补全.我没做动态的例子,其实好写,就不写了. 1.用到了两个js包 <scri ...
- 自己动手写easyui的checkbox
最近项目中用到了easyui这个框架,找了一圈也没有找到checkbox list控件,被迫只能自己实现了,为了便于复用,自己封装了下,有需要的,直接拿去用吧.有意见或建议的,欢迎指教啊. 调用示例 ...
- Android Studio 将工程作为第三方类库的步骤
一.将工程的module名称修改为自己要添加的类库名称 1.选中module文件夹右键到Rename项 2.选中Rename module项 3.修改为自己的名称,如VolleyLibary 二.修改 ...
- 开启mysql慢查询日志并使用mysqldumpslow命令查看
mysql服务器有一项功能,可以检测到哪条sql语句查询得比较慢,就是慢查询slowlog,现在介绍如何开启. 在[mysqld]下面增加如下代码: long_query_time = 1 log-s ...
- 【sql】经典SQL语句大全
原文链接:http://www.cnblogs.com/yubinfeng/archive/2010/11/02/1867386.html —————————————————————————————— ...
- 系统管理中 bash shell 脚本常用方法总结
在日常系统管理工作中,需要编写脚本来完成特定的功能,编写shell脚本是一个基本功了!在编写的过程中,掌握一些常用的技巧和语法就可以完成大部分功能了,也就是2/8原则 1. 单引号和双引号的区别 单引 ...
- C/C++默认浮点型
代码: #include <iostream> #include <cstdio> using namespace std; void test(int a){ cout< ...