TopologyBuilder

TopologyBuilder是构建拓扑的类,用于指定执行的拓扑。拓扑底层是Thrift结构,由于Thrift API非常冗长,使用TopologyBuilder可以极大地简化建立拓扑的过程。
 
TopologyBuilder的公有方法如图3.1所示。
创建和提交拓扑的过程如下:首先,使用new关键字创建一个TopologyBuilder对象,然后调用setSpout方法设置Spout,接着调用setBolt方法设置Bolt,最后调用createTopology方法返回StormTopology对象给submitTopology方法作为输入参数。
 
创建并提交Topology到Storm集群的完整代码如下:
// 创建TopologyBuilder对象
TopologyBuilder builder = new TopologyBuilder();
 
// 添加一个id为“1”,并行度为5的TestWordSpout对象
builder.setSpout("1", new TestWordSpout(true), 5);
// 添加一个id为“2”,并行度为3的TestWordSpout对象
builder.setSpout("2", new TestWordSpout(true), 3);
// 添加一个id为“3”,并行度为3的TestWordCounter对象
// 对id为“1”的 组件按“word”字段进行分组
// 对id为“2”的 组件按“word”字段进行分组
builder.setBolt("3", new TestWordCounter(), 3)
.fieldsGrouping("1", new Fields("word"))
.fieldsGrouping("2", new Fields("word")); 
// 添加一个id为“4”,并行度为1的TestGlobalCount对象
// 对id为“1”的组件按全局分组
builder.setBolt("4", new TestGlobalCount(),1)
.globalGrouping("1");
 
Map conf = new HashMap(); // 创建HashMap对象
conf.put(Config.TOPOLOGY_WORKERS, 4); // 设置Worker的数量为4
 
// 提交拓扑
StormSubmitter.submitTopology("mytopology", conf, builder.createTopology());
在本地模式(进程中)下运行完全相同的拓扑的代码如下:
TopologyBuilder builder = new TopologyBuilder(); // 创建TopologyBuilder对象
 
// 添加一个id为“1”,并行度为5的TestWordSpout对象
builder.setSpout("1", new TestWordSpout(true), 5);
// 添加一个id为“2”,并行度为3的TestWordSpout对象
builder.setSpout("2", new TestWordSpout(true), 3);
// 添加一个id为“3”,并行度为3的TestWordCounter对象
// 对id为“1”的组件按“word”字段进行分组
// 对id为“2”的组件按“word”字段进行分组
builder.setBolt("3", new TestWordCounter(), 3)
.fieldsGrouping("1", new Fields("word"))
.fieldsGrouping("2", new Fields("word")); 
// 添加一个id为“4”,并行度为1的TestGlobalCount对象
// 对id为“1”的组件按全局分组
builder.setBolt("4", new TestGlobalCount(),1)
.globalGrouping("1");
 
Map conf = new HashMap(); // 创建HashMap对象
conf.put(Config.TOPOLOGY_WORKERS, 4); // 设置Worker的数量为4
conf.put(Config.TOPOLOGY_DEBUG, true); // 设置调试模式为true
 
LocalCluster cluster = new LocalCluster(); // 创建LocalCluster对象
// 提交拓扑
cluster.submitTopology("mytopology", conf, builder.createTopology());
Utils.sleep(10000); // 线程睡眠10秒,即拓扑可以运行10秒
cluster.shutdown(); // 关闭拓扑
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值