Storm集群上运行第一个“Hello World文件”

目录

1、打开Eclipse创建一个Maven项目

2、添加依赖

3、创建目录;

4、编写内容;

5、启动安装好集群的三台Storm节点;

6、三个节点都启动ZooKeeper;

7、在主节点启动nimbus和ui

8、在两个从节点启动supervisor

9、将我们在eclipse创建的maven项目打jar包

10、在三个节点的home下创建temp文件,存放storm处理结果;

11、在stormjars文件夹下上传我们刚刚打好jar包的maven项目;

12、在nimbus节点上,也就是01节点上启动storm

13、查看storm状态

14、在从节点键入jps查看workers分布状态

15、进入workers节点的logs中查看worker的工作状态

16、在web上查看storm的状态

18、暂停storm任务

19、恢复暂停的任务

20、结束storm任务


文章中的所有内容不明白的可以查看前后文或者call博主;

相关文章:

Storm集群安装部署1——准备版

Storm集群安装部署2——Centos6.5的默认python2.6.6版本升级到python2.7.15

Storm集群安装部署3——在节点服务器上安装 Storm并启动Storm

Storm集群安装部署4——在Storm节点服务器上安装 nimBus和supervisor

Eclipse配置、创建Maven项目

Storm集群上运行第一个“Hello World文件”

Eclipse实现Storm的WordCount词频统计

 

 

1、打开Eclipse创建一个Maven项目

2、添加依赖

3、创建目录;

4、编写内容;

PWspolt:注释在代码中很清楚了

package com.swun.storm.spolt;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

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;

public class PWSpolt extends BaseRichSpout{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private SpoutOutputCollector collector;
	
	private static Map<Integer, String> map = new HashMap<Integer, String>();
	
	static {      //初始化数据
		map.put(0, "java");
		map.put(1, "storm");
		map.put(2, "scala");
		map.put(3, "hadoop");
		map.put(4, "bigdata");
		
	}
	
	/**
	 * 初始化
	 */
	@Override
	public void open(Map map, TopologyContext contex, SpoutOutputCollector collector) {
		///对spolt初始化
		this.collector = collector;
	}

	/**
	 * 轮询
	 */
	@Override
	public void nextTuple() {             //随机从map中选取实时数据
		Random random = new Random();
		int num = random.nextInt(5);
		try {
			Thread.sleep(500);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//发送数据
		collector.emit(new Values(map.get(num)));     //向容器里体检实时数据
	}

	/**
	 * 定义发送数据的字段名
	 */
	@Override
	public void declareOutputFields(OutputFieldsDeclarer declarer) {
		declarer.declare(new Fields("print"));                    //发送数据的字段名
		
		
	}
	
	

}

 

PrintBolt:注释在代码中很清楚了

package com.swun.storm.bolt;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import backtype.storm.topology.BasicOutputCollector;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.topology.base.BaseBasicBolt;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Tuple;
import backtype.storm.tuple.Values;

public class PrintBolt extends BaseBasicBolt{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private static Log log = LogFactory.getLog(PrintBolt.class);
	

	/**
	 * 处理数据
	 * @param arg0
	 * @param arg1
	 */
	@Override
	public void execute(Tuple input, BasicOutputCollector collector) {
		//接收数据
		String print = input.getStringByField("print");          //接收初试数据
		
		//打印数据,写入日志
		log.info("[print]:" + print);
		
		//发送数据
		collector.emit(new Values(print));
		
		
	}

	@Override
	public void declareOutputFields(OutputFieldsDeclarer declarer) {
		declarer.declare(new Fields("write"));             //发送数据的字段名
		
		
	}

}

WriteBolt:注释在代码中很清楚了

package com.swun.storm.bolt;

import java.io.FileWriter;
import java.io.IOException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import backtype.storm.topology.BasicOutputCollector;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.topology.base.BaseBasicBolt;
import backtype.storm.tuple.Tuple;

public class WriteBolt extends BaseBasicBolt {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private static Log log = LogFactory.getLog(WriteBolt.class);

	private FileWriter fw;

	@Override
	public void execute(Tuple input, BasicOutputCollector collector) {
		// TODO Auto-generated method stub
		// 接收数据
		String write = input.getStringByField("write");
		try {
			if (fw == null) {    //如果读流中没有文件就读入
				if (System.getProperty("os.name").equalsIgnoreCase("Windows 10")) {
					fw = new FileWriter("E:\\stormtest\\" + this);
				}else if (System.getProperty("os.name").equalsIgnoreCase("Windows 8.1")) {
					fw = new FileWriter("E:\\stormtest\\" + this);
				} else if (System.getProperty("os.name").equalsIgnoreCase("Windows 7")) {
					fw = new FileWriter("E:\\stormtest\\" + this);
				} else if (System.getProperty("os.name").equalsIgnoreCase("Linux")) {
					fw = new FileWriter("/home/temp/" + this);
				}
			} 
			log.info("[write]+写入文件");   
			//
			fw.write(write);   //开始读入
			fw.write("\n");
			fw.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

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

	}

}

PWTopology:

package com.swun.storm.topoloy;

import com.swun.storm.bolt.PrintBolt;
import com.swun.storm.bolt.WriteBolt;
import com.swun.storm.spolt.PWSpolt;

import backtype.storm.Config;
import backtype.storm.LocalCluster;
import backtype.storm.StormSubmitter;
import backtype.storm.generated.AlreadyAliveException;
import backtype.storm.generated.InvalidTopologyException;
import backtype.storm.topology.TopologyBuilder;

public class PWTopology {
	public static void main(String[] args) {
		
		//创建拓扑的配置对象
		Config cgf = new Config();
		//启动两个进程
		cgf.setNumWorkers(2);
		cgf.setDebug(true);
		
		//创建Topology类;
		TopologyBuilder builder = new TopologyBuilder();
		
		//组织spolt和bolt      
		//spout--> print-bolt -->  write-bolt 
		builder.setSpout("spout", new PWSpolt());
		builder.setBolt("print-bolt", new PrintBolt()).shuffleGrouping("spout");
		builder.setBolt("write-bolt", new WriteBolt()).shuffleGrouping("print-bolt");
		
//		//本地模式
//		LocalCluster cluster = new LocalCluster();
//		cluster.submitTopology("top1", cgf, builder.createTopology());
//		//休息10s之后关闭拓扑
//		try {
//			Thread.sleep(10000);
//		} catch (InterruptedException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//		
//		cluster.killTopology("top1");
//		//关闭本地集群
//		cluster.shutdown();
		
		//集群模式
		try {
			StormSubmitter.submitTopology("top1", cgf, builder.createTopology());    //提交给集群
		} catch (AlreadyAliveException | InvalidTopologyException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}

}

基本代码有什么不清楚的可以call我,我给你们解答;

 

5、启动安装好集群的三台Storm节点;

6、三个节点都启动ZooKeeper;

为了避免出错我们清空一下之前的status文件。

7、在主节点启动nimbus和ui

8、在两个从节点启动supervisor

9、将我们在eclipse创建的maven项目打jar包

在项目上右键 ----》 Run as ----> Maven Build...    ----> 键入package   ----》  Finish

10、在三个节点的home下创建temp文件,存放storm处理结果;

创建stormjars,存放maven的jar 文件;

11、在stormjars文件夹下上传我们刚刚打好jar包的maven项目;

12、在nimbus节点上,也就是01节点上启动storm

13、查看storm状态

任务名为top1,状态活跃,2个workers

14、在从节点键入jps查看workers分布状态

这里可能只两个workers同时分布在一个节点上,也可能是两个节点各有一个workers。因为workers的分布式随机的;

15、进入workers节点的logs中查看worker的工作状态

不断的ll命令查看文件大小是否改变,如果改变就说明storm正在运行,不断的写入文件。

当然还可以使用命令:查看某个文件的后100行的实时变化

tail  -100  文件名

16、在web上查看storm的状态

网址:

nimbus节点的IP:8080

17、查看storm的运行结果;

cd到worker的home/temp文件夹下面

打开看看:已经写入

18、暂停storm任务

storm deactivate top1

19、恢复暂停的任务

storm activate top1

20、结束storm任务

kill storm top1

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值