目录
10、在三个节点的home下创建temp文件,存放storm处理结果;
11、在stormjars文件夹下上传我们刚刚打好jar包的maven项目;
15、进入workers节点的logs中查看worker的工作状态
文章中的所有内容不明白的可以查看前后文或者call博主;
相关文章:
Storm集群安装部署2——Centos6.5的默认python2.6.6版本升级到python2.7.15
Storm集群安装部署3——在节点服务器上安装 Storm并启动Storm
Storm集群安装部署4——在Storm节点服务器上安装 nimBus和supervisor
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