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的基础特性,但它确 ...
随机推荐
- VS2010 使用TeeChart画图控件 - 之二 - 绘制图形(折线图,柱状图)
1.前期准备 详细可见VS2010 使用TeeChart画图控件 - 之中的一个 控件和类的导入 1. 1 加入TeeChart控件,给控件加入变量m_TeeChart 加入TeeChart控件,右击 ...
- TinyXml快速入门(一)
对于xml文件,目前的工作只是集中在配置文件和作为简单的信息文件来用,因此我不太喜欢使用msxml这种重量级的xml解析器,特别是使用msxml解析xml涉及到复杂的com类型转换,更是令人感觉繁琐. ...
- apk文件伪装zip64格式案例
软件样本:http://files.cnblogs.com/files/mmmmar/FMRMemoryCleaner.apk 在论坛看在网友求助把一个小的app去广告,下载一看是清理内存的,刚开始让 ...
- 在MacOs上配置Hadoop和Spark环境
在MacOs上配置hadoop和spark环境 Setting up Hadoop with Spark on MacOs Instructions 准备环境 如果没有brew,先google怎样安装 ...
- 兼容IE与firefox火狐的回车事件(js与jquery)
javascript 兼容IE与firefox火狐的回车事件 复制代码代码如下: <script language="javascript"> function key ...
- egrep和grep有什么区别
grep默认不支持正则表达式,egrep默认支持正则表达式,egrep 等于 grep -E 命令.
- MYSQL预处理传参不区分大小写解决办法
问题:预处理语句为:SELECT * FROM WHERE name=? 如果传送的参数为“admin” “ADmin” “ADMIN” “ADimn”等,结果处理后的语句为SELECT * FROM ...
- CSS样式鼠标点击与经过的效果一样
a:link /* 未访问的链接 */ a:visited /* 已访问的链接 */ a:hover /* 当有鼠标悬停在链接上 */ a:active /* 被选择的链接 */ a,a:visite ...
- 关于 Delphi 中的Sender和易混淆的概念(转)
/////////////////////////////////////////////////////// Delphi 中Sender对象的定义///////////////////////// ...
- sersync做实时同步(第二步)
配置文件一般都在sersync2的根目录下.为.xml文件 下面做逐行的进行解释说明: <host hostip="localhost" port="8008&qu ...