1、アイデアでMavenのプロジェクトをビルドし、POMファイルを設定します
ポンポン:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zpark</groupId>
<artifactId>HelloStorm</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!--storm相关jar -->
<dependency>
<groupId>org.apache.storm</groupId>
<artifactId>storm-core</artifactId>
<version>1.1.1</version>
<!-- 运行在本地需要注释下面这句-->
<scope>provided</scope>
</dependency>
</dependencies>
</project>
2、スパウトはBaseRichSpoutを継承しました
package com.zpark;
import org.apache.storm.spout.SpoutOutputCollector;
import org.apache.storm.task.TopologyContext;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.base.BaseRichSpout;
import org.apache.storm.tuple.Fields;
import org.apache.storm.tuple.Values;
import java.util.Map;
import java.util.Random;
public class Spout extends BaseRichSpout {
private SpoutOutputCollector spoutOutputCollector;
private static String[] words = {"Hadoop","Storm","Apache","Linux","Nginx","Tomcat","Spark"};
public void open(Map map, TopologyContext topologyContext, SpoutOutputCollector spoutOutputCollector) {
this.spoutOutputCollector = spoutOutputCollector;
}
public void nextTuple() {
String word = words[new Random().nextInt(words.length)];
spoutOutputCollector.emit(new Values(word));
}
public void declareOutputFields(OutputFieldsDeclarer declarer) {
System.out.println("定义格式...");
declarer.declare(new Fields("test"));
}
}
3、ボルトはBaseRichBoltを継承しました
package com.zpark;
import org.apache.storm.task.OutputCollector;
import org.apache.storm.task.TopologyContext;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.base.BaseRichBolt;
import org.apache.storm.tuple.Fields;
import org.apache.storm.tuple.Tuple;
import java.util.Map;
public class Bolt extends BaseRichBolt {
public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {
System.out.println("==========打印=========");
}
public void execute(Tuple tuple) {
String word = (String) tuple.getValue(0);
String out = "Hello " + word + "!";
System.out.println(out);
}
public void declareOutputFields(OutputFieldsDeclarer declarer) {
}
}
4、トポロジカテゴリ
package com.zpark;
import org.apache.storm.Config;
import org.apache.storm.LocalCluster;
import org.apache.storm.StormSubmitter;
import org.apache.storm.topology.TopologyBuilder;
public class App {
public static void main(String[] args) {
//定义一个拓扑
TopologyBuilder builder=new TopologyBuilder();
//设置一个Executeor(线程),默认一个
builder.setSpout("send", new Spout());
//设置一个Executeor(线程),和一个task
builder.setBolt("deal", new Bolt(),1).setNumTasks(1).shuffleGrouping("send");
Config conf = new Config();
conf.put("send", "send");
try{
//运行拓扑
if(args !=null&&args.length>0){ //有参数时,表示向集群提交作业,并把第一个参数当做topology名称
System.out.println("远程模式");
StormSubmitter.submitTopology(args[0], conf, builder.createTopology());
} else{//没有参数时,本地提交
//启动本地模式
System.out.println("本地模式");
LocalCluster cluster = new LocalCluster();
cluster.submitTopology("work" ,conf, builder.createTopology() );
Thread.sleep(60000);
// 关闭本地集群
cluster.shutdown();
}
}catch (Exception e){
e.printStackTrace();
}
}
}
5、コンソールには以下のデータが表示されるプログラムを実行
6、そして、私たちは実行しているサーバーの嵐クラスタ内に突出します、ここでは嵐が瓶ミックスに追加を入れないでください。
7、我々はLinuxの嵐のインストールディレクトリにアップロードしたパッケージ、マスターノード嵐のインストールディレクトリに行って、この時間jarファイルます:binに/嵐の光背を&ビン/嵐スーパーバイザーを実行&それぞれのノード・ディレクトリーに嵐サービスのクラスタ全体を開始しますまた、ビン/嵐のUIを行っ&スタートすることができるUIの管理インターフェイスが嵐を開始することができ、スタンドアロン環境またはサービスのために起動しない、もちろん、結果を確認するために、より直感的で、この時間は、このプロジェクトのためのプログラムを実行するには、次のコマンドを実行します
ここでは主な方法は、プレスを実行するために入力し、プログラムのパラメータが処理された場合は、その後、後者はまた、パラメータについていくことができ、アプリケーションクラスと呼ばれ、システムがクラスタを初期化するために動作しますが、タスクは、数秒後に実装プロセスを開始しました次のように一度にスクロール出力は、次のとおりです。
ここでは、開発およびテストは最初の嵐のエントリのプロジェクトが終了している実行し、より複雑な計算ロジックモデルは、基本的には同じ、主にMavenのプロジェクトは、実際には、より複雑なモジュールや通話を登場さ、プロセスの全体的な動作は似ていますそして今も、計算されたホールのドアをストリーミング嵐の中に、次のエキサイティングも徐々に実現する必要があります