Storm安装和使用Demo
来源:互联网 发布:基于qt的游戏编程教程 编辑:程序博客网 时间:2024/06/01 09:10
http://blog.csdn.net/sqh201030412/article/details/78426812
一,Storm集群的安装
1.下载安装包:
wget http://archive.apache.org/dist/storm/apache-storm-0.9.7/apache-storm-0.9.7.tar.gz
2.解压移动到软件安装目录
tar -zxvf xxxx
3.修改配置文件,conf目录下:
storm.zookeeper.servers:
- "hadoop6"
- "hadoop7"
- "hadoop8"
nimbus.host: "hadoop5"
#
nimbus.childopts: "-Xmx1024m"
#
supervisor.childopts: "-Xmx1024m"
#
worker.childopts: "-Xmx1024m"
#
ui.childopts: "-Xmx1024m"
#
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
4.分发到运行的节点上:scp -r storm hadoop@hadoop8:/home/hadoop/app/
......
5.在各个节点启动服务:
- 在nimbus.host所属的机器上启动 nimbus服务
cd /export/servers/storm/bin/
nohup ./storm nimbus &
cd /export/servers/storm/bin/
nohup ./storm ui &
cd /export/servers/storm/bin/
nohup ./storm supervisor &
6.查看
访问nimbus.host:/8080,即可看到storm的ui界面。
二,Storm得使用Demo
1.官方统计字数例子
bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.7.jar storm.starter.WordCountTopology wordcount
2.运行结果
3.自己书写一个字符统计的Demo
- package com.demo.storm.wordcount;
-
- import java.util.HashMap;
- import java.util.Map;
-
- import org.apache.storm.Config;
- import org.apache.storm.StormSubmitter;
- import org.apache.storm.generated.AlreadyAliveException;
- import org.apache.storm.generated.AuthorizationException;
- import org.apache.storm.generated.InvalidTopologyException;
- import org.apache.storm.spout.SpoutOutputCollector;
- import org.apache.storm.task.OutputCollector;
- import org.apache.storm.task.TopologyContext;
- import org.apache.storm.topology.OutputFieldsDeclarer;
- import org.apache.storm.topology.TopologyBuilder;
- import org.apache.storm.topology.base.BaseRichBolt;
- import org.apache.storm.topology.base.BaseRichSpout;
- import org.apache.storm.tuple.Fields;
- import org.apache.storm.tuple.Tuple;
- import org.apache.storm.tuple.Values;
-
-
-
-
-
-
-
- public class WordCountStart {
-
-
- public static void main(String[] args) throws AlreadyAliveException, InvalidTopologyException, AuthorizationException {
-
- TopologyBuilder builder = new TopologyBuilder();
-
- builder.setSpout("mySpout", new MyWordSpout(), Integer.valueOf(4));
-
- builder.setBolt("mySplitBolt", new MySplitWordBolt(), Integer.valueOf(5)).shuffleGrouping("mySpout");
-
- builder.setBolt("myCountBolt", new MyCountWordBolt(), Integer.valueOf(5)).fieldsGrouping("mySplitBolt", new Fields("word"));
-
- Config config = new Config();
-
- config.setNumWorkers(Integer.valueOf(3));
-
- if(args.length==1){
- StormSubmitter.submitTopology(args[0],config, builder.createTopology());
- }else{
- StormSubmitter.submitTopology("mywordcount",config, builder.createTopology());
- }
- }
- }
-
-
-
-
-
-
- class MyCountWordBolt extends BaseRichBolt {
-
-
- private Map<String, Integer> wordCount = new HashMap<String,Integer>();
-
- @Override
- public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
-
- }
-
- @Override
- public void execute(Tuple input) {
- String word = input.getString(0);
-
- if(wordCount.containsKey(word)){
- wordCount.put(word, wordCount.get(word)+1);
- }else{
- wordCount.put(word, 1);
- }
-
- System.out.println(wordCount);
- }
-
- @Override
- public void declareOutputFields(OutputFieldsDeclarer declarer) {
-
- }
-
- }
-
-
-
-
-
-
-
-
- class MySplitWordBolt extends BaseRichBolt {
-
- private OutputCollector collector;
-
- @Override
- public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
- this.collector =collector;
- }
-
- @Override
- public void execute(Tuple input) {
- String words = input.getString(0);
- String[] split = words.split(" ");
- for (String word : split) {
- collector.emit(new Values(word.trim()));
- }
- }
-
- @Override
- public void declareOutputFields(OutputFieldsDeclarer declarer) {
- declarer.declare(new Fields("word"));
- }
-
- }
-
-
-
-
-
-
-
-
-
- class MyWordSpout extends BaseRichSpout{
-
- private SpoutOutputCollector collector;
-
-
- @Override
- public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
-
- this.collector = collector;
- }
-
- @Override
- public void nextTuple() {
-
- collector.emit(new Values("My life is in these books Read these and know my heart"));
- }
-
-
- @Override
- public void declareOutputFields(OutputFieldsDeclarer declarer) {
-
- declarer.declare(new Fields("words"));
- }
-
- }
4.打包运行即可:
bin/storm jar wordcount.jar com.demo.storm.wordcount.WordCountStart mywordcount