学习途径


作者:  xumingming | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明


 

Storm里面引入DRPC主要是利用storm的实时计算能力来并行化CPU intensive的计算。DRPC的storm topology以函数的参数流作为输入,而把这些函数调用的返回值作为topology的输出流。

DRPC其实不能算是storm本身的一个特性, 它是通过组合storm的原语spout,bolt, topology而成的一种模式(pattern)。本来应该把DRPC单独打成一个包的, 但是DRPC实在是太有用了,所以我们我们把它和storm捆绑在一起。

DRPC例子


新建一个Bolat作为数据处理


[java]  view plain copy


1. /**
2.  * ExclaimBolt.java
3.  * 版权所有(C) 2013 
4.  * 创建:cuiran 2013-01-15 17:26:42
5.  */  
6. package com.stormdemo.drpc;  
7.   
8. import java.util.Map;  
9.   
10. import org.apache.commons.logging.Log;  
11. import org.apache.commons.logging.LogFactory;  
12.   
13. import com.stormdemo.demo.DemoTopology;  
14.   
15. import junit.framework.TestCase;  
16.   
17. import backtype.storm.drpc.LinearDRPCTopologyBuilder;  
18. import backtype.storm.task.TopologyContext;  
19. import backtype.storm.topology.BasicOutputCollector;  
20. import backtype.storm.topology.IBasicBolt;  
21. import backtype.storm.topology.OutputFieldsDeclarer;  
22. import backtype.storm.tuple.Fields;  
23. import backtype.storm.tuple.Tuple;  
24. import backtype.storm.tuple.Values;  
25.   
26. /**
27.  * TODO
28.  * @author cuiran
29.  * @version TODO
30.  */  
31. public class ExclaimBolt   implements IBasicBolt {  
32. private static Log log = LogFactory.getLog(ExclaimBolt.class.getName());  
33.       
34. /* (non-Javadoc)
35.      * @see backtype.storm.topology.IBasicBolt#cleanup()
36.      */  
37. @Override  
38. public void cleanup() {  
39. // TODO Auto-generated method stub  
40.   
41.     }  
42.   
43. /* (non-Javadoc)
44.      * @see backtype.storm.topology.IBasicBolt#execute(backtype.storm.tuple.Tuple, backtype.storm.topology.BasicOutputCollector)
45.      */  
46. @Override  
47. public void execute(Tuple tuple, BasicOutputCollector collector) {  
48. // TODO Auto-generated method stub  
49. "处理数据");  
50. 1);        
51. "接收到的数据为:"+input);  
52. new Values(tuple.getValue(0), input + "!"));   
53.     }  
54.   
55. /* (non-Javadoc)
56.      * @see backtype.storm.topology.IBasicBolt#prepare(java.util.Map, backtype.storm.task.TopologyContext)
57.      */  
58. @Override  
59. public void prepare(Map stormConf, TopologyContext context) {  
60. // TODO Auto-generated method stub  
61.   
62.     }  
63.   
64. /* (non-Javadoc)
65.      * @see backtype.storm.topology.IComponent#declareOutputFields(backtype.storm.topology.OutputFieldsDeclarer)
66.      */  
67. @Override  
68. public void declareOutputFields(OutputFieldsDeclarer declarer) {  
69. // TODO Auto-generated method stub  
70. new Fields("id", "result"));   
71.     }  
72.   
73. /* (non-Javadoc)
74.      * @see backtype.storm.topology.IComponent#getComponentConfiguration()
75.      */  
76. @Override  
77. public Map<String, Object> getComponentConfiguration() {  
78. // TODO Auto-generated method stub  
79. return null;  
80.     }  
81.   
82.       
83.       
84.       
85. }


然后写一个测试类


[java]  view plain copy



    1. /**
    2.  * DRPCTest.java
    3.  * 版权所有(C) 2013 
    4.  * 创建:cuiran 2013-01-15 17:25:37
    5.  */  
    6. package com.stormdemo.drpc;  
    7.   
    8. import org.apache.commons.logging.Log;  
    9. import org.apache.commons.logging.LogFactory;  
    10.   
    11. import backtype.storm.Config;  
    12. import backtype.storm.LocalCluster;  
    13. import backtype.storm.LocalDRPC;  
    14. import backtype.storm.drpc.LinearDRPCTopologyBuilder;  
    15. import backtype.storm.topology.TopologyBuilder;  
    16. import junit.framework.TestCase;  
    17.   
    18. /**
    19.  * TODO
    20.  * @author cuiran
    21.  * @version TODO
    22.  */  
    23. public class DRPCTest extends TestCase {  
    24.       
    25. private static Log log = LogFactory.getLog(DRPCTest.class.getName());  
    26.       
    27.   
    28. public void testDrpc(){  
    29. "testDrpc开始");  
    30. new Config();  
    31. true);  
    32. 2);  
    33. 1);  
    34. new LocalDRPC();  
    35. new LocalCluster();  
    36. new LinearDRPCTopologyBuilder("exclamation");   
    37. new ExclaimBolt(), 3);   
    38.           
    39. "DRPCTest", conf, builder.createLocalTopology(drpc));  
    40.           
    41. "传入参数返回的结果:"+drpc.execute("exclamation", "hello"));  
    42.           
    43.           
    44.         cluster.shutdown();  
    45.         drpc.shutdown();  
    46.     }  
    47. }




    Twitter Storm: DRPC学习_java