storm部分:storm的架构介绍

storm是并行计算的框架

storm是一种有向无环的方式,并且是并行计算的方式,是一种实时的方式

 flume:消息采集器

kafka:消息队列

storm异步实时处理请求:

异步是指是有向无环的方式

同步的话:需要借助于分布式远程服务

 Storm的架构:

Spolt负责推送数据

Bolt负责处理数据

topology负责分发策略

local cluster负责创建集群

如果有多个流程的话,spolt依然是发送数据的,bolt端在处理之前还会切分

最终:相同的词要汇聚在一个bolt中,正如MapReduce中的源于:相同的key为一组,这一组key调用一次reduce方法。

storm是一个流式处理框架,有数据就处理,没有数据就等待中,是一个死循环,除非断掉。

Spolt端:

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"));
	}
}

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) {
	}
}

主方法:

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());
		
		
	}

}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值