Storm的程序叫做Topology,类似MapReduce job

一个Topolog应该有Spout,代表数据源,和若干个bolt

首先写一个Spout

public class RandomSpout extends BaseRichSpout {

	private String[] names = new String[]{"zhangsan", "lisi", "wangwu", "zhaoliu"};

	private SpoutOutputCollector collector;
/**
* 初始化方法
*/
@Override
public void open(Map conf, TopologyContext context,
SpoutOutputCollector collector) { this.collector = collector;
} /**
* 发射一个Tuple到Topology都是通过这个方法来实现的
*/
@Override
public void nextTuple() {
this.collector.emit(new Values(names[new Random().nextInt(names.length)]));
} /**
* 此方法用于声明当前Spout的Tuple发送流, 声明tuple中的字段的名称
*/
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("name"));
} }

写一个字符串大写的bolt

public class UpperBolt extends BaseBasicBolt{

	/**
* bolt的核心方法,主要负责对数据进行处理
*/
@Override
public void execute(Tuple input, BasicOutputCollector collector) {
collector.emit(new Values(input.getString(0).toUpperCase()));
} @Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("name"));
}
}

写一个输出到文件的bolt

public class ExtBolt extends BaseBasicBolt{
FileWriter fileWriter = null; @Override
public void prepare(Map stormConf, TopologyContext context) {
// /home/hemingliang
File file = new File("/home/hadoop/stormoutput/"
+ UUID.randomUUID());
try {
fileWriter = new FileWriter(file);
} catch (IOException e) {
e.printStackTrace();
}
} @Override
public void execute(Tuple input, BasicOutputCollector collector) {
String name = input.getString(0);
name = name + "_\n";
try {
fileWriter.write(name);
fileWriter.flush();
} catch (IOException e) {
e.printStackTrace();
}
} @Override
public void declareOutputFields(OutputFieldsDeclarer declarer) { } @Override
public void cleanup() {
try {
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
} }

 

打成jar包,比如为 storm.jar

stormoutput目录应该存在,不然看不到数据

执行 storm.jar : ./storm jar ~/storm.jar com.storm.RunTopology

列出所有的Topology :  ./storm list

接触一个Topology  : ./storm kill topology名称

storm 随机发送字符串的更多相关文章

  1. php这是一个随机打印输出字符串的例子

    <?php header("Content-type:text/html;charset='utf8'"); error_reporting(E_ALL); define(& ...

  2. 要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10;

    package text1; import java.util.ArrayList; import java.util.HashSet; /* * 要求产生10个随机的字符串, * 每一个字符串互相不 ...

  3. c# .Net随机生成字符串代码

    /// <summary> /// 随机生成字符串 /// </summary> /// <param name="OperationType"> ...

  4. python生成随机日期字符串

    python生成随机日期字符串 生成随机的日期字符串,用于插入数据库. 通过时间元组设定一个时间段,开始和结尾时间转换成时间戳. 时间戳中随机取一个,再生成时间元组,再把时间元组格式化输出为字符串 # ...

  5. Java随机字符串:随机数字字符串,工具类

    Java中生成随机数,字符串的工具类 1. 调用方法需要传入生成字符串的长度和需要的类型 生成随机数字 生成随机字母字符串 生成随机字符串+数字等 ......... 2. 总共8种类型,具体看工具类 ...

  6. delphi消息发送字符串

    delphi消息发送字符串 其实不论什么方法,归根揭底都是通过传递对象的指针来达到效果的. 方法一: procedure SendString(strMSG: string);var  Data: t ...

  7. 在论坛中出现的比较难的sql问题:27(字符串拆分、字符串合并、非连续数字的间隔范围、随机返回字符串)

    原文:在论坛中出现的比较难的sql问题:27(字符串拆分.字符串合并.非连续数字的间隔范围.随机返回字符串) 在论坛中看到一个帖子,帖子中有一些sql方面的面试题,我觉得这些面试题很有代表性. 原帖的 ...

  8. js产生一个随机的字符串数字组合

    /** * 随机生成字符串 * @param randomFlag 产生任意长度随机字母数字组合 * @param min 任意长度最小位[固定位数] * @param max 任意长度最大位 * @ ...

  9. 随机发送n位数字+字母的验证码

    ''' 随机发送n位数字+字母的验证码 ''' import random def get_verified(length): code = '' for i in range(length): nu ...

随机推荐

  1. FZU 2028 BFS+vector

    一个普通的bfs 如果不看样例和input的解释... 四个0真是神样例 又被input误导 以为每个点都按顺序有标号 传送门的终点给的是一个点的标号 然后结果是什么呢?无尽的runtime erro ...

  2. [服务器]脚本:批处理带参数ping命令 发送邮件脚本

    1.批处理带参数ping命令 @echo offecho Input you IP address ......set /p IP=echo Your IP number is %IP%.ping % ...

  3. Web 在线文件管理器学习笔记与总结(5)修改文件内容

    ① 读出要修改的文件的内容 ② 进行修改 ③ 将修改后的内容写进文件 index.php: <?php require 'dir.func.php'; require 'file.func.ph ...

  4. Google Chrome can not be run as root

    Ubuntu运行Chrome出现"Google Chrome can not be run as root"的解决方法 编辑启动文件:/opt/google/chrome/goog ...

  5. jquery鼠标移入某区域屏蔽鼠标滚轮 滚动滚动条

    <script> var firefox = navigator.userAgent.indexOf('Firefox') != -1; function MouseWheel(e) { ...

  6. Open Sourcing Kafka Monitor

    https://engineering.linkedin.com/blog/2016/05/open-sourcing-kafka-monitor     https://github.com/lin ...

  7. git 第一次初始化

    Command line instructions Git global setup git config --global user.name "{名字}({工号})" git ...

  8. ntpdate[16603]: the NTP socket is in use

    ubuntu使用ntpdate更新时间的时候提示错误如下 root@lnmp:/etc/squid3# sudo ntpdate cn.pool.ntp.org 5 Jan 07:22:59 ntpd ...

  9. 【C51】单片机定时器介绍

    标准51架构的单片机有2个定时器 :T0  和  T1,他们2个的用法几乎一样.下面主要讲T0定时器的用法. 初步认知 定时器 和 计数器 都是单片机中同一个模块.他们的实质都是: 加法存储计数器.对 ...

  10. input的type属性的修改

    记录一下成长的历程吧! 刚开始写,没什么文笔,也没什么技术含量,可能主要的是纪录一下平常工作学习中遇到的问题,以及解决的办法吧.或者只有问题,没有解决办法. 前两天项目中遇到的一个问题,由于之前一直没 ...