学习途径
作者: 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. }