大規模なデータ構造とアプリケーションの取得---嵐

1. Linux環境で構成された嵐

ホスト名 Tugel tuge2 tuge3
展開環境 飼育係/ニンバス 飼育係/スーパーバイザー 飼育係/スーパーバイザー

(展開一目ビュー)

飼育係1.1構成環境(3台のマシンを設定する、あなたは1を設定し、配布することができます)

  • ダウンロードするには、公式ウェブサイトに行くのApache ZooKeeperの--3.5.5-bin.tar.gzをして、Linuxのは/ opt / ZooKeeperのディレクトリにアップロード。(あなたは、次の作成しない場合。)

  • 減圧

    タール-xvfのapache-飼育係-3.5.5-bin.tar.gz

  • 設定環境

    vimのは/ etc / profile

    export ZK_HOME=/opt/zookeeper/apache-zookeeper-3.5.5-bin
    
    export PATH=$ZK_HOME/bin:$PATH
  • きれいな自動飼育係の構成ログ
    に配置することによりautopurge.snapRetainCountautopurge.purgeIntervalをこれら2つのパラメータは、定期的な清掃を可能にします。
    両方のパラメータが除去フロントNotesでzoo.cfgに配置され、修正の数は、ログを保持するために必要な:

    autopurge.purgeIntervalは、このパラメータは、1以上の整数を完了するために必要な時間、で、デフォルトの手段は、独自のクリーンアップ機能を開けないでください0、で、クリーンアップの頻度を指定します。

    autopurge.snapRetainCountこのパラメータと、このパラメータを使用して上記のパラメータを使用して、保持したいファイルの数を指定します。デフォルトでは、3を保持することです。

1.2 Java環境の設定(3台のマシンを設定する必要があります)

  • ダウンロードする公式サイトに移動JDK-8u221-のLinux-x64.tar.gzをし、その後は/ opt / javaのディレクトリにアップロードします。(作成されていない場合には、Java8 +バージョンをダウンロードするには、公式ウェブサイトによります)

  • 減圧

    タール-xvf JDK-8u221-linuxの-x64.tar.gz

  • 設定環境

    vimのは/ etc / profile

    export JAVA_HOME=/opt/java/jdk1.8.0_221
    export PATH=$JAVA_HOME/bin:$ZK_HOME/bin:$PATH

ストーム1.3構成環境(3台のマシンを設定する必要があります)

  • 地球環境の設定

    • ダウンロードするには、公式ウェブサイトに行くのApache-ストーム-2.1.0.tar.gzをし、その後は/ opt /嵐のディレクトリにアップロードします。(下に作成されていません)
    • 減圧

    タール-xvfのapache-嵐-2.1.0.tar.gz

    • 設定環境

    vimのは/ etc / profile

    export STORM_HOME=/opt/storm/apache-storm-2.1.0
    export PATH=$STORM_HOME/bin:$JAVA_HOME/bin:$ZK_HOME/bin:$PATH
    • 設定ファイルをリロード

    ソースは/ etc / profile

  • Storm.yaml設定ファイル

    vimの/opt/storm/apache-storm-2.1.0/conf/storm.yaml

    • 飼育係のサーバーの構成:
    # storm.zookeeper.servers:
    #     - "server1"
    #     - "server2"

    変更

    storm.zookeeper.servers:
    - "tuge1"
    - "tuge2"
    - "tuge3"
  • 状態のディレクトリを作成します。

    嵐のローカルディレクトリを作成し、権限を変更

    MKDIR -p /opt/storm/apache-storm-2.1.0/status

    storm.local.dir: "/opt/storm/apache-storm-2.1.0/status"
  • マスターノードアドレスを設定します

    nimbus.seeds: ["tuge1"]
  • コンピューターの設定ワーカー数(実際の生産環境は、タスクの実行に基づいて構成されており、ここにされて、私は最初の4つの構成を学ぶために公式サイトを参照してください)

    複数のポートを追加し、あなたには、いくつかの労働者を割り当てることができます。ここでは、4つの第1の構成。

    次のstorm.yamlを追加します。

    supervisor.slots.ports:
    - 6700
    - 6701
    - 6702
    - 6703

1.4以降の嵐

  • まずスタート飼育係は、3つの参照ブログを開始する前に、具体的な手順を活性化します

  • ニンバス開始とUIは、tuge1上で実行します

    ./storm nimbus >./logs/nimbus.out 2>&1 &
    ./storm ui >>./logs/ui.out 2>&1 &
  • スタートスーパーバイザー、tuge2上で実行されている、tuge3

    ./storm supervisor >>./logs/supervisor.out 2>&1 &

    PS:> DEV>平均ヌル2>&1標準誤差出力に入力され、出力は、標準のファイルDEVヌルに、最終&意味背景内部入力されます。

    アクセスUIページ:のhttp:// tuge1:8080 /

    (PS:開始するかどうかは何も異常な、見た目の飼育係はJPSを使用することに加えて、存在する場合は、起動するかどうかをnumbusやスーパーバイザーを見ます)

    如果报异常は:シードホスト[tuge1]からのリーダーの雨雲が見つかりませんでした。あなたは、設定nimbus.seedsのための雨雲のホストの有効なリストを指定しましたか?

    zkCli.sh、コンソールに飼育係をして、嵐のノードを削除します。実行ZooKeeperのbinディレクトリに移動してください。

    Bug1

    Bug2

    注:唯一の削除ノードは子ノードが含まれていない削除、ノードを削除したい場合は、子ノードが含まれている、コマンドRMRを使用

    Bug3

    再起動してZooKeeperのノード:
    ビン/ zkServer.sh再起動

    いいえ問題は、あなたは〜次のインターフェイスの友人を見ることはできません

    襲撃

ローカルに実行2.Storm

ここでは、追加コンテンツの小さな例言葉は次のとおりです。

Mavenプロジェクトを作成し、次のクラス構造を追加します。

StormProjectPreView

次のようにコードは(アイデアを参照された上でアーキテクチャストロークシス):

App.java(入口カテゴリ):
package Demo.Storm;

import java.util.Map;

import javax.security.auth.login.AppConfigurationEntry;
import javax.security.auth.login.Configuration;

import org.apache.storm.Config;
import org.apache.storm.LocalCluster;
import org.apache.storm.LocalCluster.LocalTopology;
import org.apache.storm.generated.StormTopology;
import org.apache.storm.thrift.TException;
import org.apache.storm.topology.TopologyBuilder;
import Demo.Storm.TestWordSpout;

/**
 * Hello world!
 *
 */
public class App {
    public static void main(String[] args) {
        try {

            TopologyBuilder builder = new TopologyBuilder();
            builder.setSpout("words", new TestWordSpout(), 6);//6个spout同时运行
            builder.setBolt("exclaim1", new ExclamationBolt1(), 2).shuffleGrouping("words");//2个bolt同时运行
            builder.setBolt("exclaim2", new ExclamationBolt2(), 2).shuffleGrouping("exclaim1");//2个bolt同时运行

            LocalCluster lc = new LocalCluster();//设置本地运行
    
            lc.submitTopology("wordadd", new Config(), builder.createTopology());//提交topology

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}
ExclamationBolt1.java(Bolt1):
package Demo.Storm;

import java.util.Map;

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 org.apache.storm.tuple.Values;

public class ExclamationBolt1 extends BaseRichBolt {
    
    OutputCollector _collector;

    public void prepare(Map<String, Object> topoConf, TopologyContext context, OutputCollector collector) {
        // TODO Auto-generated method stub
        _collector=collector;
    }

    public void execute(Tuple input) {
        // TODO Auto-generated method stub
        String val=input.getStringByField("words")+"!!!";
        _collector.emit(input, new Values(val));//input用来标识是哪个bolt
        _collector.ack(input);//确认bolt
    }

    public void declareOutputFields(OutputFieldsDeclarer declarer) {
        // TODO Auto-generated method stub
        declarer.declare(new Fields("exclaim1"));
    }

}
ExclamationBolt2.java(Bolt2):
package Demo.Storm;

import java.util.Map;

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.Tuple;

public class ExclamationBolt2 extends BaseRichBolt {

    OutputCollector _collector;
    
    public void prepare(Map<String, Object> topoConf, TopologyContext context, OutputCollector collector) {
        // TODO Auto-generated method stub
        this._collector=collector;
    }

    public void execute(Tuple input) {
        // TODO Auto-generated method stub
        String str= input.getStringByField("exclaim1")+"~~~";
        System.err.println(str);
    }

    public void declareOutputFields(OutputFieldsDeclarer declarer) {
        // TODO Auto-generated method stub

    }

}
TestWordSpout.java(継続的にデータをストリーミング):
package Demo.Storm;
import java.util.Map;
import java.util.Random;
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 org.apache.storm.utils.Utils;
public class TestWordSpout extends BaseRichSpout {
    SpoutOutputCollector _collector;

    public void open(Map<String, Object> conf, TopologyContext context, SpoutOutputCollector collector) {
        // TODO Auto-generated method stub
        _collector=collector;

    }

    public void nextTuple() {
        // TODO Auto-generated method stub
        Utils.sleep(100);
        final String[] words = new String[] { "你好啊", "YiMing" };
        final Random rand = new Random();
        final String word = words[rand.nextInt(words.length)];//司机发送字符串
        _collector.emit(new Values(word));

    }

    public void declareOutputFields(OutputFieldsDeclarer declarer) {
        // TODO Auto-generated method stub
        declarer.declare(new Fields("words"));
    }

}
pom.xm(Mavenの設定ファイル、問題は後述参照している場合):
<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>Demo</groupId>
  <artifactId>Storm</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>Storm</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.storm/storm-client -->
    <dependency>
        <groupId>org.apache.storm</groupId>
        <artifactId>storm-client</artifactId>
        <version>2.1.0</version>
    
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.storm/storm-server -->
    <dependency>
        <groupId>org.apache.storm</groupId>
        <artifactId>storm-server</artifactId>
        <version>2.1.0</version>      
    </dependency>
    
  </dependencies>
</project>

次のように動作した結果は以下のとおりです。

StormProjectResult

問題が発生しました:

一つの問題:LocalClusterこのクラスは明らかに存在するが、導入していませんか?

ソリューション:まず、差異ジャーパッケージを見て、導入することができますが、このjarファイルのパッケージが灰色であるということです、そして無知な表情は、それがこの事と推定されています。なぜいくつかの検索、オンライン検索パッケージは灰色で、彼女はポンポンとがあることに答えを持っています テスト 原因、OK、それを削除し、灰色がある場合は、その後、ほんの少し、意志 *** 彼らは削除され、または他にこれがピットです。参照元

嵐の8グループポリシー

1)shuffleGrouping(ランダム)

一つの同じ単語がボルトに送信することが可能に係るパケットの2)fieldsGrouping(フィールド、すなわち、)

3)allGrouping(放送伝送、すなわち各タプルは、各ボルトを受けます)

4)タスクのタスクID最小値に割り当てられた(グローバルパケットタプル)globalGrouping

5)noneGrouping(無作為)

6)directGrouping(直接パケット、タプルボルトが伝送関係に対応する指定)

7)地域やシャッフルのグループ化

8)customGrouping(カスタムグループ化)

Linuxクラスタ上3.Stormラン

ここで小さな例数の単語数は次のとおりです。

上記、次のような構造に基づいて、プロジェクトで、次のクラスファイルを追加していきます。

WordCountProjectPreView

コードは以下の通りであります:

WordCountApp.java(クラスエントリ)
package Demo.Storm;

import org.apache.storm.Config;
import org.apache.storm.LocalCluster;
import org.apache.storm.StormSubmitter;
import org.apache.storm.topology.TopologyBuilder;
import org.apache.storm.tuple.Fields;


public class WordCountApp {

      
      

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TopologyBuilder builder = new TopologyBuilder();
        
        builder.setSpout("words", new WordCountSpout(), 8);//8个Spout同时执行
        
        builder.setBolt("wordSplit", new WordCountSplitBolt(), 3).shuffleGrouping("words");//3个Bolt同时执行
        builder.setBolt("wordSum", new WordCountSumBolt(), 3).fieldsGrouping("wordSplit", new Fields("word"));//3个Bolt同时执行

        if (args.length > 0) {//如果有参数,走集群执行
            try {
                StormSubmitter.submitTopology(args[0], new Config(), builder.createTopology());

            } catch (Exception ex) {
                ex.printStackTrace();
            }

        } else {//没有参数走本机执行

            try {
                LocalCluster lc = new LocalCluster();
                lc.submitTopology("wordCount", new Config(), builder.createTopology());

            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }

    }

}
WordCountSpout.java(データの安定した流れを提供します)
package Demo.Storm;

import java.util.Map;
import java.util.Random;

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 org.apache.storm.utils.Utils;


public class WordCountSpout extends BaseRichSpout {

    SpoutOutputCollector _collector;
    public void open(Map<String, Object> conf, TopologyContext context, SpoutOutputCollector collector) {
        // TODO Auto-generated method stub
        this._collector=collector;
    }

    public void nextTuple() {
        // TODO Auto-generated method stub
        Utils.sleep(1000);
        String[] words=new String[] {
                "hello YiMing",
                "nice to meet you"
        };
        Random r=new Random();
        _collector.emit(new Values(words[r.nextInt(words.length)]));//随机传递一个字母
    }

    public void declareOutputFields(OutputFieldsDeclarer declarer) {
        // TODO Auto-generated method stub
        declarer.declare(new Fields("words"));
    }

}
WordCountSplitBolt.java(分割型)
package Demo.Storm;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

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 org.apache.storm.tuple.Values;

public class WordCountSplitBolt extends BaseRichBolt {

    OutputCollector _collector;

    public void prepare(Map<String, Object> topoConf, TopologyContext context, OutputCollector collector) {
        // TODO Auto-generated method stub
        this._collector = collector;
    }

    //传递分割后的字母
    public void execute(Tuple input) {
        // TODO Auto-generated method stub
        String line=input.getString(0);
        String[] lineGroup= line.split(" ");
        for(String str:lineGroup) {
            List list=new Values(str);
            _collector.emit(input, list);
            _collector.ack(input);
        }       
    }
    //声明传递的字母名称为 word,下一个bolt可以通过此名称获取
    public void declareOutputFields(OutputFieldsDeclarer declarer) {
        // TODO Auto-generated method stub
        declarer.declare(new Fields("word"));
    }

}
WordCountSumBolt.java(誘導統計カテゴリ)
package Demo.Storm;

import java.util.HashMap;
import java.util.Map;

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.Tuple;

public class WordCountSumBolt extends BaseRichBolt {

    OutputCollector _collector;
    Map<String, Integer> map = new HashMap<String, Integer>();

    public void prepare(Map<String, Object> topoConf, TopologyContext context, OutputCollector collector) {
        // TODO Auto-generated method stub
        this._collector = collector;
    }
    //归纳统计
    public void execute(Tuple input) {
        // TODO Auto-generated method stub
        String word = input.getString(0);

        if (map.containsKey(word)) {
            map.put(word, (map.get(word) + 1));
        } else {
            map.put(word, 1);
        }
        System.err.println("单词:" + word + ",出现:" + map.get(word) + "次");

    }

    public void declareOutputFields(OutputFieldsDeclarer declarer) {
        // TODO Auto-generated method stub

    }

}
あなたは、準備コンパイラパッケージであり、それ上のLinuxにそれをアップロードするとき。

WordCountDaBao

WordCountUpdatePack

/opt/storm/apache-storm-2.1.0/bin実行に

[ルートtuge1ビン@]#の./stormジャー/opt/data/storm/WordCount.jar Demo.Storm.WordCountAppトイレ

公式の例を実行します。

storm jar all-my-code.jar org.apache.storm.MyTopology arg1 arg2

WordCountConsole

WordCountUI

タスクの終了

嵐キルWC(つまり、トポロジ名)

https://blog.csdn.net/cuihaolong/article/details/52684396:結果を取得するには、を参照してください。

PS:操作中に、タスクを変更することはできませんが、労働者と実行者を変更することができます。

ZJ ...

シリーズポータル

おすすめ

転載: www.cnblogs.com/shun7man/p/12424386.html
おすすめ