集采单词

package wordcount;

import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Map; import org.apache.commons.io.FileUtils; 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; /**
* @ClassName: DataSourceSpout
* @Description: TODO
* @author cheng
* @date 2017年12月12日 下午2:06:32
*收集数据源
*/
public class DataSourceSpout extends BaseRichSpout{
private Map conf;
private TopologyContext context;
private SpoutOutputCollector collector; /* (non-Javadoc)
* 运行时调用一次,初始化
* conf获取配置参数,
* collector:spout收集数据发送给blot
*/
public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
this.collector=collector;
this.conf=conf;
this.context=context;
}
// 读文件
public void nextTuple() {
// 参数:目录位置,文件后缀,是否递归
Collection<File> files = FileUtils.listFiles(new File("F:/安装/java工程/StormTest/data"),
new String[]{"txt"},true);
// Collection<File> files = FileUtils.listFiles(new File("/home/neworigin/Desktop/data"),
// new String[]{"txt"},true);
// 遍历文件内容
for(File file:files)
{
//按行来读
try {
// 将读取的每行存放在List中
List<String> lines = FileUtils.readLines(file);
// 把一行数据发送出去
for(String line:lines)
{
this.collector.emit(new Values(line));
}
Thread.sleep(1000);
// 防止文件被重复读,将读过的文件改名
FileUtils.moveFile(file, new File(file.getAbsolutePath()+System.currentTimeMillis()));
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//声明输出的内容,告知blot,spout输出的内容
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("line"));//通过字段名称来获取字段内容
}
@Override
public void close() {
System.out.println("read close");
} }

处理单词(按空格拆分)

package wordcount;

import java.util.Map;

import backtype.storm.spout.SpoutOutputCollector;
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.Fields;
import backtype.storm.tuple.Tuple;
import backtype.storm.tuple.Values; /**
* @ClassName: SplitBolt
* @Description: TODO
* @author cheng
* @date 2017年12月12日 下午2:28:25
*切分采集的数据
*/
public class SplitBolt extends BaseRichBolt{
private Map conf;
private TopologyContext context;
private OutputCollector collector;
//调用一次,进行初始化
public void prepare(Map conf, TopologyContext context, OutputCollector collector) {
this.collector=collector;
this.context=context;
this.conf=conf;
}
// 处理数据
public void execute(Tuple input) {
// 根据字段获取每一行数据
String line=input.getStringByField("line");
String[] words = line.split(" ");
for(String word:words )
{
//传递给下一个bolt
this.collector.emit(new Values(word));
}
}
//声明输出的内容,告知下一个bolt这里输出的是什么
// 如果是最后一个bolt就不用声明字段名称
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("words"));
} }

对单词计数

package wordcount;

import java.util.HashMap;
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 CountBolt extends BaseRichBolt{
private Map conf;
private TopologyContext context;
private OutputCollector collector;
//调用一次,进行初始化
public void prepare(Map conf, TopologyContext context, OutputCollector collector) {
this.collector=collector;
this.context=context;
this.conf=conf;
}
int testnum=0;
int i=0;
HashMap<String,Integer> hashmap=new HashMap<String,Integer>();
public void execute(Tuple input) {
// 获取每一个单词
String word = input.getStringByField("words");
// 对所有单词进行汇总
Integer num = hashmap.get(word);//根据key来获取value
if(num==null)
{
num=0;
}
num++;
hashmap.put(word, num);
// System.out.println("---------"+testnum++);
// 遍历map,输出键值对
System.out.println("执行countBolt的exec"+i++);
for(Map.Entry<String, Integer> entry:hashmap.entrySet())
{
System.out.println("word="+entry.getKey()+":number="+entry.getValue()+"---------"+testnum++); } }
//最后一个bolt,不用声明
public void declareOutputFields(OutputFieldsDeclarer declarer) { } }

联合运行

package wordcount;

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.BoltDeclarer;
import backtype.storm.topology.TopologyBuilder;
import backtype.storm.tuple.Fields;
import clojure.main; public class WordCount {
public static void main(String[] args) throws InterruptedException, AlreadyAliveException, InvalidTopologyException {
TopologyBuilder builder=new TopologyBuilder();
builder.setSpout("spout_id", new DataSourceSpout(),4);//默认只有一个,给个4设置并发度(多线程执行),还以在最后面设置numtask(task的数量,默认每个executor执行已task)
builder.setBolt("bolt_1", new SplitBolt()).shuffleGrouping("spout_id");//因为有多个bolt需要指定上一个步骤
BoltDeclarer declarer = builder.setBolt("bolt_2", new CountBolt()).fieldsGrouping("bolt_1",new Fields("words"));//指定上一个bolt并按words相同的bolt分到同一个task
// 设置在本地运行
LocalCluster cluster = new LocalCluster();
Config config = new Config();
config.setNumWorkers(2);//设置worker的数量
cluster.submitTopology("topology", config, builder.createTopology());
}
}

strom:实时的WordCount的更多相关文章

  1. Spark练习之通过Spark Streaming实时计算wordcount程序

    Spark练习之通过Spark Streaming实时计算wordcount程序 Java版本 Scala版本 pom.xml Java版本 import org.apache.spark.Spark ...

  2. 50、Spark Streaming实时wordcount程序开发

    一.java版本 package cn.spark.study.streaming; import java.util.Arrays; import org.apache.spark.SparkCon ...

  3. Flink简介及使用

    一.Flink概述 官网:https://flink.apache.org/ mapreduce-->maxcompute HBase-->部门 quickBI DataV Hive--& ...

  4. Flink+kafka实现Wordcount实时计算

    1. Flink Flink介绍: Flink 是一个针对流数据和批数据的分布式处理引擎.它主要是由 Java 代码实现.目前主要还是依靠开源社区的贡献而发展.对 Flink 而言,其所要处理的主要场 ...

  5. 55、Spark Streaming:updateStateByKey以及基于缓存的实时wordcount程序

    一.updateStateByKey 1.概述 SparkStreaming 7*24 小时不间断的运行,有时需要管理一些状态,比如wordCount,每个batch的数据不是独立的而是需要累加的,这 ...

  6. 52、Spark Streaming之输入DStream之基础数据源以及基于HDFS的实时wordcount程序

    一.概述 1.Socket:之前的wordcount例子,已经演示过了,StreamingContext.socketTextStream() 2.HDFS文件 基于HDFS文件的实时计算,其实就是, ...

  7. 输入DStream之基础数据源以及基于HDFS的实时wordcount程序

    输入DStream之基础数据源以及基于HDFS的实时wordcount程序 一.Java方式 二.Scala方式 基于HDFS文件的实时计算,其实就是,监控一个HDFS目录,只要其中有新文件出现,就实 ...

  8. 开源分布式实时计算引擎 Iveely Computing 之 WordCount 详解(3)

    WordCount是很多分布式计算中,最常用的例子,例如Hadoop.Storm,Iveely Computing也不例外.明白了WordCount在Iveely Computing上的运行原理,就很 ...

  9. Hadoop平台提供离线数据和Storm平台提供实时数据流

    1.准备工作 2.一个Storm集群的基本组件 3.Topologies 4.Stream 5.数据模型(Data Model) 6.一个简单的Topology 7.流分组策略(Stream grou ...

随机推荐

  1. LuoguP1041 传染病控制

    题目地址 题目链接 题解 这里讲一个非正解--贪心+随机化. 贪心的想法是什么? 我们dfs一遍处理出每个节点子树内的节点数量,记为\(siz\). 贪心的砍掉\(siz\)最大的那个子树,在树的形态 ...

  2. Java程序运行机制及开发环境

    Java既是编译型语言,又是解释型语言 java源文件首先需要通过javac编译生成后缀名为.class的字节码文件(与平台无关,只面向JVM),然后使用Java虚拟机将字节码解释成特定平台上的机器码 ...

  3. [ajaxupload] - 上传文件同时附件参数值

    $.ajax({ url: '/excel/importExcel?instance='+"品种1", type: 'POST', data: formData, 上面前端通过?拼 ...

  4. POJ 3693 Maximum repetition substring(连续重复子串)

    http://poj.org/problem?id=3693 题意:给定一个字符串,求重复次数最多的连续重复子串. 思路: 这道题确实是搞了很久,首先枚举连续子串的长度L,那么子串肯定包含了r[k], ...

  5. 自定义标签TLD文件中,rtexprvalue子标签的意思

    rtexprvalue的全称是 Run-time Expression Value, 它用于表示是否能够利用JSP表达式. 举例子: 1.定义一个TLD文件: <tag> <name ...

  6. ECharts配置项之title(标题)

    1.标题居中 //left的值为'left', 'center', 'right' title:{ left:'center' } 2.主副标题之间的间距 title:{ //默认为10 itemGa ...

  7. Create and format Word documents using R software and Reporters package

    http://www.sthda.com/english/wiki/create-and-format-word-documents-using-r-software-and-reporters-pa ...

  8. 关于在mac安装安卓的模拟器的一些些那点事情~~~

    ook~~自己捣鼓了三天终于安装成功了~妹的~踩了太多的坑~整个人就不好了~ 为了节省大家的时间~所以今天我就将我安装的过程整体思路教给大家!有了思路安装起来就很好了!!!但是 注意的是,也许你会出现 ...

  9. chrome浏览器的SwitchyOmega插件使用方法

    对于有某些特殊需求的人来讲,应该对这个插件不陌生,但是很多人不了解这插件的工作原理,百度的老教程又很烂,在刚开始用的时候我也不知道怎么办,去百度搜出来的教程基本都是让下载个规则文件让你去导入,但一般这 ...

  10. _itemmod_stat

    制作几种基础模板,用模板快速生成装备 `comment` 备注 `entry`目标装备 entry `src_entry` 模板装备entry `stat_muilt` 属性倍率 `mindmg_mu ...