Storm部分:代码模板【Java版纯代码】

总结:构成部分:

Spout部分:继承BaseRichSpout类,实现里边的三个方法:nextTuple,open,declareOutPutFields.主要的方法在nexttuple中写,打包成集合的形式,在这个方法中用emit发送,同时在declareOutPutFields也有发送

Bolt方法:继承BaseRichBolt类,实现内部的三个方法:execute,open,declareOutputDeclare。主要是在execute中写,包括切分集合等。如果还有一个步骤的话,那还需要再发送给下一步。

Main方法:创建:TopologyBuilder tb=new TopologyBuilder();

用tb分别去调动其他的线程和进程,里边设置Grouping的方法和形式

LocalCluster lc=new LocalCluster();

调用。

1.Test测试代码

package com.bjsxt.storm.test;

import com.bjsxt.storm.bolt.WsBolt;
import com.bjsxt.storm.spout.WsSpout;

import backtype.storm.Config;
import backtype.storm.LocalCluster;
import backtype.storm.topology.TopologyBuilder;

/**
 * 
 * 构建拓扑结构 Topology ----- 》job
 * 
 * @author Administrator
 *
 */
public class Test {

	public static void main(String[] args) {
		
		TopologyBuilder tb = new TopologyBuilder();
		
		tb.setSpout("wsspout", new WsSpout());
		tb.setBolt("wsbolt", new WsBolt()).shuffleGrouping("wsspout");
		

		//创建本地服务集群
		LocalCluster lc = new LocalCluster();
		lc.submitTopology("ws", new Config(), tb.createTopology());
		
		
	}

}

2.Spout:发送端

package com.bjsxt.storm.spout;

import java.util.List;
import java.util.Map;

import backtype.storm.spout.SpoutOutputCollector;
import backtype.storm.task.TopologyContext;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.topology.base.BaseRichSpout;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Values;

/**
 * 
 * 数据累加: 1+2+3+4......
 * 
 * @author Administrator
 *
 */
public class WsSpout extends BaseRichSpout {

	Map map;
	TopologyContext context;
	SpoutOutputCollector collector;// 发送器
	int i = 0;

	/**
	 * 发送数据,不断被线程调用
	 */
	@Override
	public void nextTuple() {

		i++;
		List tuple = new Values(i);
		this.collector.emit(tuple);
		System.err.println("spout -----------------------" + i);

		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {

			e.printStackTrace();
		}

	}

	@Override
	public void open(Map map, TopologyContext context, SpoutOutputCollector collector) {
		this.map = map;
		this.context = context;
		this.collector = collector;

	}

	/**
	 * 声明发送数据的信息
	 */
	@Override
	public void declareOutputFields(OutputFieldsDeclarer declarer) {

		declarer.declare(new Fields("num"));

	}

}

3.Bolt:计算与分析

package com.bjsxt.storm.bolt;

import java.util.Map;

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.Tuple;

public class WsBolt extends BaseRichBolt {

	Map stormConf;
	TopologyContext context;
	OutputCollector collector;
	int sum = 0;

	@Override
	public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {

		this.stormConf = stormConf;
		this.context = context;
		this.collector = collector;
	}

	@Override
	public void execute(Tuple input) {

		// 1.接收tuple内的数据
		int i = input.getIntegerByField("num");

		// 2.累加
		sum += i;
		
		//3.输出效果
		System.out.println("sum-------------------------------"+sum);
		

	}

	@Override
	public void declareOutputFields(OutputFieldsDeclarer declarer) {

	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值