网站web数据 使用storm 流读取数据

大数据中流storm流读取
Storm流处理数据使用eclipse实现流处理数据

在这里插入图片描述需要处理的数据源
在这里插入图片描述
处理后数据源会这样一直读取

1实现这样的效果我们的步骤是
打开eclipse 创建一个maven项目
在这里插入图片描述
创建maven项目的步骤前面的步骤已经说过了现在就不在上图了
创建好maven项目后还是打开pom。xml文件点最后一页
在这里插入图片描述
我们加入storm1.1.0的依赖包之后eclipse会自己下载的
有同学会问了这个文件内容哪里去找了
https://mvnrepository.com/
打开这个maven网站
搜索storm
在这里插入图片描述
选择第一个
在这里插入图片描述点进去后选择1.1.0的版本号当然也可以选择其他版本
在这里插入图片描述
复制这里的maven 到pom.xml中即可

现在到了写代码的时刻了
storm的流读取一般会写三个class
在这里插入图片描述
LogBolt
LogSpout
Main
这三个类
logSpout 是用来读取数据
LogBolt 是用来读取数据,处理数据
Main 设置集群环节最后的运行

首先是 LogSpout`

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Map;

import org.apache.storm.spout.SpoutOutputCollector;
import org.apache.storm.task.TopologyContext;
import org.apache.storm.topology.IRichSpout;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.tuple.Fields;
import org.apache.storm.tuple.Values;

/**
 * @author LYQ
 *
 */
public class LogSpout implements IRichSpout {
 SpoutOutputCollector collector;
BufferedReader bufferedReader;
String string;
/**
 * 重点是open方法和NextTuple;
 * */
@Override
public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
	// TODO Auto-generated method stub
/*提升数据范围*/	this.collector=collector;
			try {
				//使用IO缓冲流缓冲流加载数据
				//缓冲流可以使用readlie()
			File file = new File("E:\\安抚是\\Text\\src\\main\\java\\stu.txt");
			FileReader fileReader = new FileReader(file);
			 bufferedReader = new BufferedReader(fileReader);
			} catch (Exception e) {
				// TODO: handle exception
			}
}
	
@Override
	public void nextTuple() {
		// TODO Auto-generated method stub
//	bufferedReader.readLine();
	
	try {
		if(( string= bufferedReader.readLine())!=null) {
			//数据不为空就可以一直读取数据
//		String [] strings=	string.split("\t");
		//获取到一行数据后使用collector发送 
			collector.emit(new Values(string,1));
		}
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	}
@Override
public void declareOutputFields(OutputFieldsDeclarer decclarer) {
	// TODO Auto-generated method stub
	decclarer.declare(new Fields("subian","num"));
}

@Override
public void ack(Object arg0) {
	// TODO Auto-generated method stub
	
}

@Override
public void activate() {
	// TODO Auto-generated method stub
	
}

@Override
public void close() {
	// TODO Auto-generated method stub
	
}

@Override
public void deactivate() {
	// TODO Auto-generated method stub
	
}

@Override
public void fail(Object arg0) {
	// TODO Auto-generated method stub
	
}


@Override
public Map<String, Object> getComponentConfiguration() {
	// TODO Auto-generated method stub
	return null;
}



}
//这里首先实现IRichSpout 这个接口并实现它的一系列方法
其中需要写的分别是open 和nextTuple以及declareOutputFields方法
open用于读取数据流
。。。。

然后是
LogBolt

import java.util.Map;

import org.apache.storm.task.OutputCollector;
import org.apache.storm.task.TopologyContext;
import org.apache.storm.topology.IRichBolt;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.tuple.Tuple;

/**
 * @author LYQ
 *
 */
public class LogBolt implements IRichBolt {
	
	OutputCollector collector;
	/***
	 * 先在prepare中初始化collector;
	 * */
	@Override
	public void prepare(Map stormConf, TopologyContext  contexr, OutputCollector collector) {
		// TODO Auto-generated method stub
		this.collector=collector;
	}
	
	/**
	 * execute方法中就是接到Spout数据后,进行具体的数据处理
	 * */
	@Override
	public void execute(Tuple input ) {
		// TODO Auto-generated method stub
		//getString中传入的参数为INT;
	String string=input.getString(0);
	/*数据拆分*/String[] strings=string.split("\t");
	String province=strings[1];
	try {
//		System.out.println("线程"+Thread.getAllStackTraces());
		System.err.println("省份"+ ":"+province);
		Thread.sleep(1000);
	} catch (InterruptedException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
//	String string=	input.getString(0);
// String[] strings=  string.split("/t");
// String wb= strings[5];
// System.out.println("Web:"+wb);
	}

	
	
	
		
	@Override
	public void cleanup() {
		// TODO Auto-generated method stub
		
	}

	

	@Override
	public void declareOutputFields(OutputFieldsDeclarer arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public Map<String, Object> getComponentConfiguration() {
		// TODO Auto-generated method stub
		return null;
	}

}

然后是
Main

import org.apache.storm.Config;
import org.apache.storm.LocalCluster;
import org.apache.storm.shade.org.jboss.netty.channel.local.LocalChannel;
import org.apache.storm.topology.TopologyBuilder;

public class Main {
public static void main(String[] args) {
	//1.初始化配置信息,
	Config config=new Config();
	config.setNumWorkers(3);//三个工作的work
	//设置好谁是Spout,
	//首先初始化一个TopologyBuilder,然后设置Sout和Bolt
	TopologyBuilder budiler=new TopologyBuilder();
	//绑定Spout
	//第一个参数是id,LSpout命名
	//第二个new 写自己写的Spout.class
	budiler.setSpout("suibian-spout", new LogSpout(),3);
//	budiler.setSpout("suibian-spout1", new LogSpout());
//
	//绑定Bolt
	//为了让Bolt接收指定的spout传过来的数据
	budiler.setBolt("sublie-bolt", new LogBolt()).shuffleGrouping("suibian-spout");
	//提交 模式有本地  集群
	LocalCluster localChannel=new LocalCluster();
	//三个参数
	localChannel.submitTopology("subian-topylogy", config, budiler.createTopology());
}
}



完成
悦分享,越成长
~~删除线格式~~ 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值