storm入门
来源:互联网 发布:大数据分析师就业形势 编辑:程序博客网 时间:2024/06/07 12:08
hadoop, 批处理,通过磁盘IO处理,吞吐量大;
strom,实时,通过内存处理,吞吐量小;
高频:高频率;
生产者和消费者之间使用Message Queue,有Kafka, Active MessageQ和Rabbit Mq
图:Hadoop与Storm的比较
mapreduce的组成由JobTracker和TaskTracker。其中,JobTracker是主节点,TaskTracker是从节点。
mapreduce执行的是job。job表示用户提交的一段计算代码。job在运行时,先提交给JobTracker,然后由JobTracker分给TaskTracker执行。
在job运行时,分为map阶段和reduce阶段。每个阶段中传递的数据单位是kv对。
storm的组成由nimbus和supervisor。其中,nimbus是主节点,supervisor是从节点。
storm执行的是topology。topology表示用户提交的一段计算代码。toplogy在运行时,先提交给nimbus,然后由nimbus分配给supervisor执行。
在topology运行时,分为spout阶段和bolt阶段。每个阶段中传递的数据单位是tuple。
图:创建一个Maven的项目
图:编辑POM文件
写Storm程序对该文件进行单词计数
package mystorm;import java.io.File;import java.io.IOException;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.commons.io.FileUtils;import clojure.main;import backtype.storm.LocalCluster;import backtype.storm.spout.SpoutOutputCollector;import backtype.storm.task.OutputCollector;import backtype.storm.task.TopologyContext;import backtype.storm.topology.OutputFieldsDeclarer;import backtype.storm.topology.TopologyBuilder;import backtype.storm.topology.base.BaseRichBolt;import backtype.storm.topology.base.BaseRichSpout;import backtype.storm.tuple.Fields;import backtype.storm.tuple.Tuple;import backtype.storm.tuple.Values;//本地模式public class WordCountApp {public static void main(String[] args) {final TopologyBuilder topologyBuilder = new TopologyBuilder();topologyBuilder.setSpout("1", new MySpout());topologyBuilder.setBolt("2", new MyBolt()).shuffleGrouping("1");final HashMap conf = new HashMap();final LocalCluster localCluster = new LocalCluster();localCluster.submitTopology(WordCountApp.class.getSimpleName(), conf, topologyBuilder.createTopology());}}class MySpout extends BaseRichSpout{private static final long serialVersionUID = 1L;SpoutOutputCollector collector = null;public void open(Map arg0, TopologyContext arg1, SpoutOutputCollector collector) {this.collector = collector;}//最最重要的方法,处理数据的。简单认为是死循环的,监听文件内容的变化public void nextTuple() {try {final List<String> readLines = FileUtils.readLines(new File("h:/a.txt"));for (String line : readLines) {//把每一行看作一个tuplefinal Values tuple = new Values(line);//collector把tuple送出去,交给bolt处理collector.emit(tuple);}Thread.sleep(2000L);} catch (Exception e) {e.printStackTrace();}}public void declareOutputFields(OutputFieldsDeclarer declarer) {final Fields fields = new Fields("line");declarer.declare(fields);}}class MyBolt extends BaseRichBolt{public void execute(Tuple tuple) {final String line = tuple.getString(0);System.err.println(line);try {Thread.sleep(2000L);} catch (InterruptedException e) {e.printStackTrace();}}public void prepare(Map arg0, TopologyContext arg1, OutputCollector arg2) {// TODO Auto-generated method stub}public void declareOutputFields(OutputFieldsDeclarer arg0) {// TODO Auto-generated method stub}}
- Storm入门
- storm入门
- Storm入门
- Storm入门
- storm入门
- Storm入门
- Storm入门
- storm入门
- storm入门
- Storm入门
- Storm入门
- storm入门
- Storm入门
- Storm入门-storm的安装
- Twitter Storm入门
- Twitter Storm入门实战
- twitter storm 入门
- Twitter Storm入门
- 字符串相关函数的实现
- 计算机网络概述
- 两个栈实现的一个队列
- Quartz.NET学习系列(十一)--- Quartz.NET持久化及客户端服务器模式
- 程序编程学习心得
- storm入门
- Python基础12--模块
- 序列求和
- 为什么在一台服务器绑定多个IP
- Sizeof与Strlen的区别与联系
- 黑马程序员_JAVA中其他常用类
- Python基础13--类
- 动规
- 设计模式之状态模式——自动售货机