SlideShare une entreprise Scribd logo
1  sur  35
Télécharger pour lire hors ligne
Advanced Tech Night No.05



  リアルタイム分散処理フレームワーク
     Stormの注目の新機能
              Trident API
                                      2012/09/20
                            Acroquest Technology
                                       木村 宗太郎
自己紹介

•   名前      : 木村宗太郎
•   所属      : Acroquest Technology
•   Twitter : @kimutansk
•   主な仕事:
     Androidサービス基盤開発、性能監視システム開発
•   趣味:
     料理全般
     (特にお菓子作り)




                                     1
               Advanced Tech Night
目次

(A)そもそもStormって何? (C)注目の新機能
  1. Stormとは?       Trident API
  2. Stormの6つの特長                   8. これまでのStormの使い方
  3. 類似プロダクトの比較                    9. Trident APIとは?
(B)Stormの機能/構成                     10. Trident APIで
  4.   Stormの論理構成                      出来るようになったこと
                                   11. Trident API
  5.   Stormのプロセス構成
                                       サンプル実行デモ
  6.   StreamGrouping
  7.   Storm実行イメージ



                                                  2
                    Advanced Tech Night
そもそもStormって何?
1. Stormとは?
1.    『フォールトトレラントなリアルタイム分散処理フレームワーク』
       ※簡単に言うと、
       ※「一部で障害が発生しても動き続ける早いフレームワーク」

2.    Twitterではつぶやきのリアルタイム解析に利用                        昨日公開1周年!
      元々は、米BackType社が開発
      Twitter社がBackType社を買収し、オープンソースとして公開(2011/09/19)

3.    用途は『連続的に発生するデータを、継続的に処理し続ける』

4.    コア部分はClojure、コンポーネントはJavaで実装されている。
      制御インタフェースはThriftで記述されているため、
       他言語からでも操作することが可能。
      ※Thrift : Facebook社が開発したRPCライブラリ




                                                              4
                                 Advanced Tech Night
2. Stormの6つの特長

1. 幅広いユースケース(Extremely broad set of use cases)
  •   ストリーム処理:メッセージ処理やデータベースのリアルタイム更新
  •   継続的な処理:発生し続けるデータを継続的に処理
      • 例)Twitterのつぶやき、Web上の新規情報等
  •   分散RPC:即座に処理する必要があるクエリを並列処理

2. スケーラブル(Scalable)
  •   膨大な処理に対してもマシンを追加するだけでスケール可能。
  •   アプリケーションの特性に依るが、マシンを追加した分線形にスケール。




                                                 5
                        Advanced Tech Night
2. Stormの6つの特長
3. メッセージの処理保証(Guarantees no data loss)
  •   Stormはメッセージが最後まで処理されるかトレースする
  •   処理失敗した場合はメッセージを取得したスレッドに失敗通知が返る
  •   メッセージ処理保証機構をOFFにして
      スピード重視の構成にすることも可能

4. 環境構築の容易性(Extremely robust)
  •   Stormクラスタは「クラスタ」と呼ばれるが、環境構築は非常に容易
  •   Stormは全クラスタ共通の設定で動作する
  •   共通設定を行ったノードを追加するだけでクラスタを拡張可能




                                          6
                   Advanced Tech Night
2. Stormの6つの特長
5. 耐障害性(Fault-tolerant)
  •   Stormはメッセージの処理中に障害が発生した場合、
      必要に応じて処理プロセスの再起動/再配分を行う。
  •   Stormはメッセージ処理を継続することを保証する。

6. プログラミング言語非依存(Programming language agnostic)
  •   StormのTopologyと処理コンポーネントは様々な言語で定義でき、
      どんな開発者にとっても利用しやすくなっている。
  •   (例:Java、Clojure、Scala、Ruby、Python etc)




                                                 7
                     Advanced Tech Night
3. 類似プロダクトとの比較

           Storm                Dempsy    S4
処理対象単位     Tuple(専用Entity) オブジェクト         オブジェクト
           (オブジェクト内包)
ノードの役割分担 マスタ/スレーブ               対称        対称
         (SPOFは無い)
接続関係の定義    プログラム                定義ファイル    定義ファイル
                                          条件定義可能
コンポーネント    継承                   アノテーション   継承
実装方法
メッセージ単位の   失敗検知有り               失敗検知無し    処理負荷に従い
処理保証                                      破棄




                                                   8
                    Advanced Tech Night
Stormの機能/構成
4. Stormの論理構成
                        Bolt
Spout
                                                              Bolt




                                      Tuple   Tuple   Tuple




                Topology
        Spout & Bolt からなるネットワーク構造

                                                               10
                Advanced Tech Night
4. Stormの論理構成

 Topologyの構成要素
 Tuple     Stormで処理されるメッセージを保持するデータのこと。
            シリアライズ登録をすることで独自エンティティも利用可能。

 Stream     Tupleが連続的に流れる経路を意味する。

 Spout      Streamのソースとなるもので、Tupleを送り出す。
            Stormのストリーム処理の起点となる。

 Bolt       Streamの変換処理を行う。
            単一、または、複数のStreamからTupleを受信し、
            加工した上で、新たなStreamにメッセージを送信する。

            Stream、Spout、Boltからなるネットワーク構造のこと。
 Topology   Stormで処理を実行する場合は、このTopologyの単位で
            Stormクラスタに渡す。



                                                11
                  Advanced Tech Night
5. Stormのプロセス構成

  Stormクラスタ
                                                Supervisor

                          1ノード                       Worker


                    Zookeeper                   Supervisor

                                                     Worker
    Nimbus          Zookeeper

                                                Supervisor
                    Zookeeper

                                                     Worker



              1マシンにSupervisor1プロ                Supervisor
              セスと複数のWorkerプロセ
              スが存在
                                                     Worker



                                                              12
                          Advanced Tech Night
5. Stormのプロセス構成
 Nimbus  (≒Hadoop:JobTracker)
    StormクラスタにおけるMasterノードDaemon
     •Topologyの起動/終了リクエストの待受け
     •Workerプロセスへのタスクの割り振り
     •Supervisor/Workerプロセスのモニタリング/再配分
Supervisor (≒Hadoop:TaskTracker)
    StormクラスタにおけるSlaveノードDaemon
     •Spout/Boltのアサイン待ち受け
     •Workerプロセスのモニタリング/起動/停止
Zookeeper
    NimbusとSupervisor間の協調
     •各ノードで動作するDaemonの状態を管理
     •Workerへのアサイン等は全てZookeeperを介して行われる

 Worker   (≒Hadoop:Task)
    Spout/Boltを実行するプロセス
     •Topologyのサブセットの実行
                                               13
                         Advanced Tech Night
6. Stream Groupings

 TupleがどのBoltに流れるかを指定

                                                      Stream
    Stream
                                                   Groupings
                                                 Boltが、インプットとして
                                                    どのようなStreamを
                                                        読み込むかを
                   Stream Groupings
                                                        指定する定義


                                       Spout → Bolt → Boltの流れと
    Stream                          流れるTupleのグルーピング定義が可能

             Stream Groupings

                                                             14
                           Advanced Tech Night
6. Stream Groupings
 7種類の Stream Groupings を知る
  Shuffle grouping   各Boltが等しい数のTupleを受けとるように、Tupleをサイクリックに配分する。

  Fields grouping    Streamは、グループで指定されたフィールドによって分割される。
                     同じ値を持つTupleは、必ず同じタスクへ送信される。
                     (コンシステント・ハッシュ法)

 All grouping        Streamは複製され、すべてのBoltタスクへ送信される。

 Global grouping     Stream全体が、ただ一つのBoltタスクへ送信される。
                     具体的には、Streamは最も小さいIDのタスクへ送信される。

 None grouping       どのようにStreamがグループ化されるか気にしない。
                     現状このグループは Shuffle grouping と同じである。
                     だが、Stormは、このグループのBoltを(可能な場合)送信元のBolt
                     またはSpoutと同じスレッドで実行させる。

  Direct grouping    Tuple生成者がコンシューマのどのタスクに、Tupleを受けとらせるか決める。

  Local or shuffle   同一Workerに送信先Boltが存在すればそのBoltに送信する。
  grouping           存在しない場合はShuffle groupingと同じ。
                     ※同一Worker内の通信時、シリアライズとネットワーク通信が省略されるため、
                      処理負荷/時間を抑えることが可能。
                                                             15
                            Advanced Tech Night
7. Stormの実行イメージ
Topologyの構築は非常に簡単!(分散処理を、これだけで実現)
// 新規のTopologyを生成
TopologyBuilder builder = new TopologyBuilder();
                        Spoutの名前             Spoutインスタンス
// Spout を設定
builder.setSpout(“Sentence", new SentenceSpout(), 1);
                                                               Spout、Bolt共に
// Bolt を設定                                                    スレッド数を指定
 builder.setBolt(“Split", new SplitBolt(), 1)
           .shuffleGrouping(“Sentence");                        “Split”のOutputを”word”で
 builder.setBolt(“Word", new WordCountBolt(), 3)                   Groupingして受信
           .fieldsGrouping(“Split ",new Fields(“word"));

// Topologyの設定を指定                   Worker数を“2”で指定
Config conf = new Config();      (Topologyにおいて起動する
                                                                  Topologyの名前
conf.setNumWorkers(2);                  Worker数)


// TopologyをStormのクラスタへ登録
StormSubmitter.submitTopology(“WordCountTopology", conf, builder.createTopology());


                                                                                         16
                                         Advanced Tech Night
7. Stormの実行イメージ

ワードカウントの実行イメージ                                        Word
                                                      Count       ["the”,2]
  1文を                                                  Bolt
Tupleとして              単語に       ["the”]
   送出                 分割
                                                      Word
                                                      Count       [“cow”,1]
Sentence              Split                            Bolt
 Spout                Bolt          [“cow”]
                                                        ・      単語の
  "the cow jumped                                       ・     発現回数を
  over the moon“                                        ・      カウント
                              [“moon”]
  ・・・
                                                      Word
                                                      Count      [“moon”,1]
            Shuffle               Fields               Bolt
           grouping              grouping
                          (同じ単語は同じBoltへ送信)

                                                                         17
                                Advanced Tech Night
注目の新機能
Trident API
8. これまでのStormの使い方
これまでStormは「1Tuple/1Boltずつ処理する」のが前提
ワードカウントも「1Tupleの処理」を各Boltに分散して記述
                                                  Word
      1文を                                         Count       ["the”,2]
 Tupleとして送出
                   単語に分割         ["the”]           Bolt

                                                  Word
  Sentence          Split       [“cow”]
   Spout            Bolt                          Count      [“cow”,1]
                                                   Bolt

 "the cow jumped                                    ・
 over the moon“               [“moon”]              ・     単語の発現回数を
                                                    ・       カウント
 ・・・
                                                  Word
                                                  Count      [“moon”,1]
                                                   Bolt

      「複数のTupleに対してこうしてね」という
      処理を記述することはできなかった
                                                                      19
                            Advanced Tech Night
9. Trident APIとは?
1. Storm0.8.0で追加された、Stormの抽象化API(≒構文糖衣)
  ① Tridentを用いることにより、
    高スループットかつ状態を持つストリーム処理を構築可能
  ② コンセプトとしては、HadoopにおけるPigやCascadingと同一


2. Boltを意識することなく下記のような処理を作成可能。
  ①   ネットワーク通信を行わないプロセス内で区切った処理の定義
  ②   データの再配分(データの中身は変更しない)
  ③   データの集計
  ④   データのグルーピング
  ⑤   データのマージ/ジョイン

3. インクリメンタルな状態管理を提供
  ① 1回のバッチ毎に永続化層(DB等)にデータを保存し、
    バッチ実行ごとに加算集計することが可能
                                           20
                    Advanced Tech Night
9. Trident APIとは?
•       Trident Topologyでパーツとして利用できるAPI例
        (自作機能を追加することも可能)
            分割                    フィルタ
            (入力データを分割)            (データをフィルタリング)
          グルーピング                             集計
          (データをグルーピング)                       (データを集計)
          カウント                               変換
          (発現回数をカウント)                        (データを変換)
          キャッシュ                              ジョイン
          (データを保持)                           (キーベースでジョイン)
    •    これらのパーツを組み合わせたデータの整形/統計が
         Stormの機構上で可能になる。
                                                        21
                       Advanced Tech Night
10. Trident APIで出来るようになったこと
実現したいことを例に考えてみると・・・

例:ある文書に対するワードカウント
  → ワードカウントは下記の3ステップに分割される。

1. 文章を1文ずつ読みこむ
2. 文章を単語ごとに分割する
3. 各単語ごとに発現回数をカウントする


     これをStormで実現するとどうなるか?


                                    22
              Advanced Tech Night
10. Trident APIで出来るようになったこと
•    【Before】これまでのStormを用いた場合(コンポーネント)
                                                         Word
    1. 文章を1文ずつ                                           Count        ["the”,2]
        読みこむ           2. 文章を単語ご
                       とに分割する           ["the”]           Bolt

                                                         Word
      Sentence            Split        [“cow”]
       Spout              Bolt                           Count       [“cow”,1]
                                                          Bolt
                                                                 3. 各単語ごとに発
     "the cow jumped                                       ・
                                                                 現回数をカウントす
     over the moon“                  [“moon”]              ・
                                                                 る
                                                           ・
     ・・・
                                                         Word
                                                         Count       [“moon”,1]
                                                          Bolt


                  1処理をSpout/Boltにマッピング

                                                                              23
                                   Advanced Tech Night
10. Trident APIで出来るようになったこと
•    【After】Trident APIを用いた場合(コンポーネント)

    1. 文章を1文ずつ         2. 文章を単語ご                         3. 各単語ごとに発現回
        読みこむ           とに分割する                            数をカウントする
                                        ["the”]
                                                                        [“the”,1]
      Sentence                         [“cow”]
       Spout              Split                           Count         [“cow”,1]

                                      [“moon”]
                                                                        [“moon”,1]
     "the cow jumped
     over the moon“
     ・・・


                       Spoutは同じく作成
                  Boltではなく、「関数」をマッピング

                                                                                24
                                   Advanced Tech Night
10. Trident APIで出来るようになったこと
•    【Before】これまでのStormを用いた場合(Topology定義部分)

// 新規のTopologyを生成
TopologyBuilder builder = new TopologyBuilder();

// Spout を設定
builder.setSpout(“Sentence", new SentenceSpout(), 1);

// Bolt を設定
 builder.setBolt(“Split", new SplitBolt(), 1)
           .shuffleGrouping(“Sentence");
 builder.setBolt(“Word", new WordCountBolt(), 3)
           .fieldsGrouping(“Split ",new Fields(“word"));

// Topologyの設定を指定
Config conf = new Config();
conf.setNumWorkers(2);

// TopologyをStormのクラスタへ登録
StormSubmitter.submitTopology(“WordCountTopology", conf, builder.createTopology());



                                                                                      25
                                               Advanced Tech Night
10. Trident APIで出来るようになったこと
•   【After】Trident APIを用いた場合(Topology定義部分)
TridentTopology topology = new TridentTopology();
TridentState wordCounts = topology
           .newStream("spout1", spout)
           .parallelismHint(1)
           .each(new Fields(“sentence”), new Split(), new Fields(“word”)) ★文章を単位に分割★
           .groupBy(new Fields(“word”))                                   ★単語でグルーピング★
           .persistentAggregate(new MemoryMapState.Factory(), new Count(),
                       new Fields(“count”)).
           parallelismHint(3);                                           ★単語ごとにカウントし保存★




                        TopologyはDSLのように
                          簡易に記述可能!

                                                                                     26
                                      Advanced Tech Night
10. Trident APIで出来るようになったこと
    •       【Before】これまでのStormを用いた場合(Spout)
■ SentenceSpout
                                                                                                                     Sentence
public class RandomSentenceSpout extends BaseRichSpout {
  SpoutOutputCollector _collector;                                                                                    Spout
  Random _rand;

    @Override
    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {
      _collector = collector;
      _rand = new Random();
    }

    @Override
    public void nextTuple() {
      Utils.sleep(100);
      String[] sentences = new String[] {
         "the cow jumped over the moon“, "an apple a day keeps the doctor away“, "four score and seven years ago",
         "snow white and the seven dwarfs“, "i am at two with nature"};
      String sentence = sentences[_rand.nextInt(sentences.length)];
      _collector.emit(new Values(sentence));
    }

    @Override
    public void declareOutputFields(OutputFieldsDeclarer declarer) {
      declarer.declare(new Fields("word"));
    }
}



                                                                                                                          27
                                                                Advanced Tech Night
10. Trident APIで出来るようになったこと
•   【After】Trident APIを用いた場合(Spout)                                       Sentence
                                                                           Spout
FixedBatchSpout spout = new FixedBatchSpout(new Fields("sentence"), 3,
          new Values("the cow jumped over the moon"), new Values(
                    "the man went to the store and bought some candy"),
          new Values("four score and seven years ago"), new Values(
                    "how many apples can you eat"), new Values(
                    "to be or not to be the person"));
spout.setCycle(true);




                                                                               28
                                     Advanced Tech Night
10. Trident APIで出来るようになったこと
  •       【Before】これまでのStormを用いた場合(Bolt)

                                                                                                                                        Word
■ SplitBolt                                                Split          ■WordCountBolt                                                Count
                                                           Bolt                                                                          Bolt
                                                                           public static class WordCount extends BaseBasicBolt {
                                                                             Map<String, Integer> counts = new HashMap<String, Integer>();
 public class SplitBolt extends BaseBasicBolt {
                                                                               @Override
 @Override
                                                                               public void execute(Tuple tuple, BasicOutputCollector collector) {
 public void execute(Tuple tuple, BasicOutputCollector collector) {
                                                                                 String word = tuple.getString(0);
   String sentence = tuple.getString(0);
                                                                                 Integer count = counts.get(word);
   for(String word: sentence.split(" ")) {
                                                                                 if(count==null) count = 0;
     collector.emit(new Values(word));
                                                                                 count++;
   }
                                                                                 counts.put(word, count);
 }
                                                                                 collector.emit(new Values(word, count));
                                                                               }
 @Override
   public void declareOutputFields(OutputFieldsDeclarer declarer) {
                                                                               @Override
     declarer.declare(new Fields("word"));
                                                                               public void declareOutputFields(OutputFieldsDeclarer declarer) {
   }
                                                                                 declarer.declare(new Fields("word", "count"));
 }
                                                                               }
                                                                           }




                                                                                                                                          29
                                                               Advanced Tech Night
10. Trident APIで出来るようになったこと
  •       【After】Trident APIを用いた場合(関数)

                                           Split                                                                 Count
■ Split                                                       ■ Count
                                                               public class Count implements CombinerAggregator<Long> {
public static class Split extends BaseFunction {                 @Override
                                                                 public Long init(TridentTuple tuple) {
    @Override                                                       return 1L;
    public void execute(TridentTuple tuple,                      }
                    TridentCollector collector) {
      String sentence = tuple.getString(0);                        @Override
      for (String word : sentence.split(" ")) {                    public Long combine(Long val1, Long val2) {
          collector.emit(new Values(word));                          return val1 + val2;
                                                                   }
      }
  }                                                                @Override
}                                                                  public Long zero() {
                                                                     return 0L;
                                                                   }
                                                               }


                 Boltより小さい「関数」で処理を記述可能!
                      Boltを考える必要が無くなる!
                                                                                                                   30
                                                    Advanced Tech Night
11. Trident APIサンプル実行デモ
•     下記の構成を持つTrident Topologyのデモを行います。
集計処理
                                                                              “moon”      “moon”


            "the cow jumped          “moon”
            over the moon“                                                     “cow”      “cow”
            ・・・                                   “cow”
文章入力                          単語分割                           グルーピング                                     カウント
                                                                             “moon”, 10      “cow”, 8


                                                                                   結果保存

結果取得処理
                                 “cat”                             “cat”,5                   “cat”,5


    DRPC
                                     “dog”                    “dog”,10                     “dog”,10
     "cat dog jumped”
                                                                        空データ                            合計算出
                         単語分割                結果取得
                                                                       フィルタリング
                                                                                                          31
                                             Advanced Tech Night
• Demo
まとめ
1. Stormは、
   『分散し、フォールトトレラントなリアルタイム処理フレームワーク』
2. 6つの特長
 ①幅広いユースケース    ②スケーラブル
 ③メッセージの処理保証   ④環境構築の容易性
 ⑤耐障害性         ⑥プログラミング言語非依存
3. Trident APIの特長
   -これまでTuple単位だった処理をTopology全体で実施
   -結果データの取得が容易になった
4. Trident APIのパーツ
   分割、フィルタ、グルーピング、集計、カウント、変換etc
5. Trident APIを利用することで、統計処理が容易に実装可能

                                  33
Thank you
Try Storm And
   Trident!

                           34
     Advanced Tech Night

Contenu connexe

Tendances

CloudStack徹底入門読書会 第4章 4.6 グローバル設定について
CloudStack徹底入門読書会 第4章 4.6 グローバル設定についてCloudStack徹底入門読書会 第4章 4.6 グローバル設定について
CloudStack徹底入門読書会 第4章 4.6 グローバル設定についてSatoshi Shimazaki
 
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:講義No2
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:講義No2OpenStackクラウド基盤構築ハンズオンセミナー 第2日:講義No2
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:講義No2Etsuji Nakai
 
OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!ksk_ha
 
PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例kazuhcurry
 
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化kazuhcurry
 
入門!Software Defined Network
入門!Software Defined Network入門!Software Defined Network
入門!Software Defined NetworkEtsuji Nakai
 
OpenStack超入門シリーズ いまさら聞けないNeutronの使い方
OpenStack超入門シリーズ いまさら聞けないNeutronの使い方OpenStack超入門シリーズ いまさら聞けないNeutronの使い方
OpenStack超入門シリーズ いまさら聞けないNeutronの使い方Toru Makabe
 
OpenStack管理者入門 - OpenStack最新情報セミナー 2014年12月
OpenStack管理者入門 - OpenStack最新情報セミナー 2014年12月OpenStack管理者入門 - OpenStack最新情報セミナー 2014年12月
OpenStack管理者入門 - OpenStack最新情報セミナー 2014年12月VirtualTech Japan Inc.
 
CloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloudCloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloudsamemoon
 
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化Takatoshi Matsuo
 
バックアップことはじめ JPUG第29回しくみ+アプリケーション分科会(2014-05-31)
バックアップことはじめ JPUG第29回しくみ+アプリケーション分科会(2014-05-31)バックアップことはじめ JPUG第29回しくみ+アプリケーション分科会(2014-05-31)
バックアップことはじめ JPUG第29回しくみ+アプリケーション分科会(2014-05-31)Chika SATO
 
エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造
エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造
エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造Etsuji Nakai
 
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...Tatsuya Watanabe
 
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」Nobuyuki Tamaoki
 
オープンソースのクラウド基盤 CloudStack技術解説~ストレージ編~
オープンソースのクラウド基盤 CloudStack技術解説~ストレージ編~オープンソースのクラウド基盤 CloudStack技術解説~ストレージ編~
オープンソースのクラウド基盤 CloudStack技術解説~ストレージ編~Satoshi Shimazaki
 
RHEL7/CentOS7 NetworkManager徹底入門
RHEL7/CentOS7 NetworkManager徹底入門RHEL7/CentOS7 NetworkManager徹底入門
RHEL7/CentOS7 NetworkManager徹底入門Etsuji Nakai
 
第4回Linux-HA勉強会資料 Pacemakerの紹介
第4回Linux-HA勉強会資料 Pacemakerの紹介第4回Linux-HA勉強会資料 Pacemakerの紹介
第4回Linux-HA勉強会資料 Pacemakerの紹介ksk_ha
 
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:ハンズオンNo1OpenStackクラウド基盤構築ハンズオンセミナー 第2日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:ハンズオンNo1Etsuji Nakai
 
試して覚えるPacemaker入門 『リソース設定編』
試して覚えるPacemaker入門 『リソース設定編』試して覚えるPacemaker入門 『リソース設定編』
試して覚えるPacemaker入門 『リソース設定編』健太 松浦
 

Tendances (20)

CloudStack徹底入門読書会 第4章 4.6 グローバル設定について
CloudStack徹底入門読書会 第4章 4.6 グローバル設定についてCloudStack徹底入門読書会 第4章 4.6 グローバル設定について
CloudStack徹底入門読書会 第4章 4.6 グローバル設定について
 
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:講義No2
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:講義No2OpenStackクラウド基盤構築ハンズオンセミナー 第2日:講義No2
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:講義No2
 
PostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラPostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラ
 
OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!OpenStackでも重要な役割を果たすPacemakerを知ろう!
OpenStackでも重要な役割を果たすPacemakerを知ろう!
 
PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例
 
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
 
入門!Software Defined Network
入門!Software Defined Network入門!Software Defined Network
入門!Software Defined Network
 
OpenStack超入門シリーズ いまさら聞けないNeutronの使い方
OpenStack超入門シリーズ いまさら聞けないNeutronの使い方OpenStack超入門シリーズ いまさら聞けないNeutronの使い方
OpenStack超入門シリーズ いまさら聞けないNeutronの使い方
 
OpenStack管理者入門 - OpenStack最新情報セミナー 2014年12月
OpenStack管理者入門 - OpenStack最新情報セミナー 2014年12月OpenStack管理者入門 - OpenStack最新情報セミナー 2014年12月
OpenStack管理者入門 - OpenStack最新情報セミナー 2014年12月
 
CloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloudCloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloud
 
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
 
バックアップことはじめ JPUG第29回しくみ+アプリケーション分科会(2014-05-31)
バックアップことはじめ JPUG第29回しくみ+アプリケーション分科会(2014-05-31)バックアップことはじめ JPUG第29回しくみ+アプリケーション分科会(2014-05-31)
バックアップことはじめ JPUG第29回しくみ+アプリケーション分科会(2014-05-31)
 
エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造
エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造
エンジニア向け夏期特別講座 〜 Red Hat OpenStack徹底解説! 第二部 OpenStackの内部構造
 
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...
PacemakerのMaster/Slave構成の基本と事例紹介(DRBD、PostgreSQLレプリケーション) @Open Source Confer...
 
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
OpenStack最新動向と構築のポイント - EMC様セミナー 「あなたのビジネスを高速化! OpenStackが実現する戦略的なクラウドインフラ」
 
オープンソースのクラウド基盤 CloudStack技術解説~ストレージ編~
オープンソースのクラウド基盤 CloudStack技術解説~ストレージ編~オープンソースのクラウド基盤 CloudStack技術解説~ストレージ編~
オープンソースのクラウド基盤 CloudStack技術解説~ストレージ編~
 
RHEL7/CentOS7 NetworkManager徹底入門
RHEL7/CentOS7 NetworkManager徹底入門RHEL7/CentOS7 NetworkManager徹底入門
RHEL7/CentOS7 NetworkManager徹底入門
 
第4回Linux-HA勉強会資料 Pacemakerの紹介
第4回Linux-HA勉強会資料 Pacemakerの紹介第4回Linux-HA勉強会資料 Pacemakerの紹介
第4回Linux-HA勉強会資料 Pacemakerの紹介
 
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:ハンズオンNo1OpenStackクラウド基盤構築ハンズオンセミナー 第2日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第2日:ハンズオンNo1
 
試して覚えるPacemaker入門 『リソース設定編』
試して覚えるPacemaker入門 『リソース設定編』試して覚えるPacemaker入門 『リソース設定編』
試して覚えるPacemaker入門 『リソース設定編』
 

Similaire à Stormの注目の新機能TridentAPI

ログ収集フレームワークの新バージョン「FlumeNG」
ログ収集フレームワークの新バージョン「FlumeNG」ログ収集フレームワークの新バージョン「FlumeNG」
ログ収集フレームワークの新バージョン「FlumeNG」AdvancedTechNight
 
20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3openrtm
 
「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisitedUptime Technologies LLC (JP)
 
Solaris Zone と Puppet、Serverspec でインフラ CI
Solaris Zone と Puppet、Serverspec でインフラ CI Solaris Zone と Puppet、Serverspec でインフラ CI
Solaris Zone と Puppet、Serverspec でインフラ CI ftnk
 
Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド - Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド - Yuichi Sakuraba
 
20121217 jawsug-yokohama
20121217 jawsug-yokohama20121217 jawsug-yokohama
20121217 jawsug-yokohamaTetsuya Chiba
 
リアルタイム処理エンジン Gearpumpの紹介
リアルタイム処理エンジンGearpumpの紹介リアルタイム処理エンジンGearpumpの紹介
リアルタイム処理エンジン Gearpumpの紹介Sotaro Kimura
 
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システムTomohiro Ohtake
 
cloudpack負荷職人結果レポート(サンプル)
cloudpack負荷職人結果レポート(サンプル)cloudpack負荷職人結果レポート(サンプル)
cloudpack負荷職人結果レポート(サンプル)iret, Inc.
 
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 sandai
 
AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)Akio Katayama
 
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-publicAmazon Web Services Japan
 
第12回CloudStackユーザ会_ApacheCloudStack最新情報
第12回CloudStackユーザ会_ApacheCloudStack最新情報第12回CloudStackユーザ会_ApacheCloudStack最新情報
第12回CloudStackユーザ会_ApacheCloudStack最新情報Midori Oge
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについてtako pons
 
Trema の紹介とネットワーク仮想化への応用
Trema の紹介とネットワーク仮想化への応用Trema の紹介とネットワーク仮想化への応用
Trema の紹介とネットワーク仮想化への応用kazuyas
 
Aws elastic beanstalk-handson-summit2012
Aws elastic beanstalk-handson-summit2012Aws elastic beanstalk-handson-summit2012
Aws elastic beanstalk-handson-summit2012Akio Katayama
 
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!Kohei Tokunaga
 

Similaire à Stormの注目の新機能TridentAPI (20)

ログ収集フレームワークの新バージョン「FlumeNG」
ログ収集フレームワークの新バージョン「FlumeNG」ログ収集フレームワークの新バージョン「FlumeNG」
ログ収集フレームワークの新バージョン「FlumeNG」
 
20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3
 
Spock's world
Spock's worldSpock's world
Spock's world
 
FlexUnit4とMockitoFlex
FlexUnit4とMockitoFlexFlexUnit4とMockitoFlex
FlexUnit4とMockitoFlex
 
「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited「今そこにある危機」を捉える ~ pg_stat_statements revisited
「今そこにある危機」を捉える ~ pg_stat_statements revisited
 
Solaris Zone と Puppet、Serverspec でインフラ CI
Solaris Zone と Puppet、Serverspec でインフラ CI Solaris Zone と Puppet、Serverspec でインフラ CI
Solaris Zone と Puppet、Serverspec でインフラ CI
 
Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド - Project Loom - 限定継続と軽量スレッド -
Project Loom - 限定継続と軽量スレッド -
 
20121217 jawsug-yokohama
20121217 jawsug-yokohama20121217 jawsug-yokohama
20121217 jawsug-yokohama
 
リアルタイム処理エンジン Gearpumpの紹介
リアルタイム処理エンジンGearpumpの紹介リアルタイム処理エンジンGearpumpの紹介
リアルタイム処理エンジン Gearpumpの紹介
 
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
 
cloudpack負荷職人結果レポート(サンプル)
cloudpack負荷職人結果レポート(サンプル)cloudpack負荷職人結果レポート(サンプル)
cloudpack負荷職人結果レポート(サンプル)
 
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門
 
AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)
 
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
 
第12回CloudStackユーザ会_ApacheCloudStack最新情報
第12回CloudStackユーザ会_ApacheCloudStack最新情報第12回CloudStackユーザ会_ApacheCloudStack最新情報
第12回CloudStackユーザ会_ApacheCloudStack最新情報
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
 
Trema の紹介とネットワーク仮想化への応用
Trema の紹介とネットワーク仮想化への応用Trema の紹介とネットワーク仮想化への応用
Trema の紹介とネットワーク仮想化への応用
 
Aws elastic beanstalk-handson-summit2012
Aws elastic beanstalk-handson-summit2012Aws elastic beanstalk-handson-summit2012
Aws elastic beanstalk-handson-summit2012
 
OpenStack Updates
OpenStack UpdatesOpenStack Updates
OpenStack Updates
 
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
 

Plus de AdvancedTechNight

CSS3Rendererを使ってiOSでもサクサク3D
CSS3Rendererを使ってiOSでもサクサク3DCSS3Rendererを使ってiOSでもサクサク3D
CSS3Rendererを使ってiOSでもサクサク3DAdvancedTechNight
 
D3.jsと学ぶVisualization(可視化)の世界
D3.jsと学ぶVisualization(可視化)の世界D3.jsと学ぶVisualization(可視化)の世界
D3.jsと学ぶVisualization(可視化)の世界AdvancedTechNight
 
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めようAdvancedTechNight
 
CSSだけで実現するグラフィック表現
CSSだけで実現するグラフィック表現CSSだけで実現するグラフィック表現
CSSだけで実現するグラフィック表現AdvancedTechNight
 
これから利用拡大?WebSocket
これから利用拡大?WebSocketこれから利用拡大?WebSocket
これから利用拡大?WebSocketAdvancedTechNight
 
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験AdvancedTechNight
 
TypeScriptのススメ ~JavaエンジニアのためのJava(like)Script
TypeScriptのススメ ~JavaエンジニアのためのJava(like)ScriptTypeScriptのススメ ~JavaエンジニアのためのJava(like)Script
TypeScriptのススメ ~JavaエンジニアのためのJava(like)ScriptAdvancedTechNight
 
three.jsで作る3Dの世界
three.jsで作る3Dの世界three.jsで作る3Dの世界
three.jsで作る3Dの世界AdvancedTechNight
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介AdvancedTechNight
 
Hadoop scr第7回 hw2011フィードバック
Hadoop scr第7回 hw2011フィードバックHadoop scr第7回 hw2011フィードバック
Hadoop scr第7回 hw2011フィードバックAdvancedTechNight
 
ななめ45°から見たJavaOne
ななめ45°から見たJavaOneななめ45°から見たJavaOne
ななめ45°から見たJavaOneAdvancedTechNight
 
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たちATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たちAdvancedTechNight
 
ATN No.1 Hadoop vs Amazon EMR
ATN No.1 Hadoop vs Amazon EMRATN No.1 Hadoop vs Amazon EMR
ATN No.1 Hadoop vs Amazon EMRAdvancedTechNight
 
ATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlersATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlersAdvancedTechNight
 

Plus de AdvancedTechNight (17)

CSS3Rendererを使ってiOSでもサクサク3D
CSS3Rendererを使ってiOSでもサクサク3DCSS3Rendererを使ってiOSでもサクサク3D
CSS3Rendererを使ってiOSでもサクサク3D
 
D3.jsと学ぶVisualization(可視化)の世界
D3.jsと学ぶVisualization(可視化)の世界D3.jsと学ぶVisualization(可視化)の世界
D3.jsと学ぶVisualization(可視化)の世界
 
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
 
CSSだけで実現するグラフィック表現
CSSだけで実現するグラフィック表現CSSだけで実現するグラフィック表現
CSSだけで実現するグラフィック表現
 
これから利用拡大?WebSocket
これから利用拡大?WebSocketこれから利用拡大?WebSocket
これから利用拡大?WebSocket
 
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験
 
Backbone.js入門
Backbone.js入門Backbone.js入門
Backbone.js入門
 
TypeScriptのススメ ~JavaエンジニアのためのJava(like)Script
TypeScriptのススメ ~JavaエンジニアのためのJava(like)ScriptTypeScriptのススメ ~JavaエンジニアのためのJava(like)Script
TypeScriptのススメ ~JavaエンジニアのためのJava(like)Script
 
three.jsで作る3Dの世界
three.jsで作る3Dの世界three.jsで作る3Dの世界
three.jsで作る3Dの世界
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
 
Spine入門
Spine入門Spine入門
Spine入門
 
Hadoop scr第7回 hw2011フィードバック
Hadoop scr第7回 hw2011フィードバックHadoop scr第7回 hw2011フィードバック
Hadoop scr第7回 hw2011フィードバック
 
ななめ45°から見たJavaOne
ななめ45°から見たJavaOneななめ45°から見たJavaOne
ななめ45°から見たJavaOne
 
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たちATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
 
ATN No.1 Hadoop vs Amazon EMR
ATN No.1 Hadoop vs Amazon EMRATN No.1 Hadoop vs Amazon EMR
ATN No.1 Hadoop vs Amazon EMR
 
ATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlersATN No.2 大阪から来たJavaPuzzlers
ATN No.2 大阪から来たJavaPuzzlers
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 

Stormの注目の新機能TridentAPI

  • 1. Advanced Tech Night No.05 リアルタイム分散処理フレームワーク Stormの注目の新機能 Trident API 2012/09/20 Acroquest Technology 木村 宗太郎
  • 2. 自己紹介 • 名前 : 木村宗太郎 • 所属 : Acroquest Technology • Twitter : @kimutansk • 主な仕事: Androidサービス基盤開発、性能監視システム開発 • 趣味: 料理全般 (特にお菓子作り) 1 Advanced Tech Night
  • 3. 目次 (A)そもそもStormって何? (C)注目の新機能 1. Stormとは? Trident API 2. Stormの6つの特長 8. これまでのStormの使い方 3. 類似プロダクトの比較 9. Trident APIとは? (B)Stormの機能/構成 10. Trident APIで 4. Stormの論理構成 出来るようになったこと 11. Trident API 5. Stormのプロセス構成 サンプル実行デモ 6. StreamGrouping 7. Storm実行イメージ 2 Advanced Tech Night
  • 5. 1. Stormとは? 1. 『フォールトトレラントなリアルタイム分散処理フレームワーク』 ※簡単に言うと、 ※「一部で障害が発生しても動き続ける早いフレームワーク」 2. Twitterではつぶやきのリアルタイム解析に利用 昨日公開1周年!  元々は、米BackType社が開発  Twitter社がBackType社を買収し、オープンソースとして公開(2011/09/19) 3. 用途は『連続的に発生するデータを、継続的に処理し続ける』 4. コア部分はClojure、コンポーネントはJavaで実装されている。  制御インタフェースはThriftで記述されているため、 他言語からでも操作することが可能。 ※Thrift : Facebook社が開発したRPCライブラリ 4 Advanced Tech Night
  • 6. 2. Stormの6つの特長 1. 幅広いユースケース(Extremely broad set of use cases) • ストリーム処理:メッセージ処理やデータベースのリアルタイム更新 • 継続的な処理:発生し続けるデータを継続的に処理 • 例)Twitterのつぶやき、Web上の新規情報等 • 分散RPC:即座に処理する必要があるクエリを並列処理 2. スケーラブル(Scalable) • 膨大な処理に対してもマシンを追加するだけでスケール可能。 • アプリケーションの特性に依るが、マシンを追加した分線形にスケール。 5 Advanced Tech Night
  • 7. 2. Stormの6つの特長 3. メッセージの処理保証(Guarantees no data loss) • Stormはメッセージが最後まで処理されるかトレースする • 処理失敗した場合はメッセージを取得したスレッドに失敗通知が返る • メッセージ処理保証機構をOFFにして スピード重視の構成にすることも可能 4. 環境構築の容易性(Extremely robust) • Stormクラスタは「クラスタ」と呼ばれるが、環境構築は非常に容易 • Stormは全クラスタ共通の設定で動作する • 共通設定を行ったノードを追加するだけでクラスタを拡張可能 6 Advanced Tech Night
  • 8. 2. Stormの6つの特長 5. 耐障害性(Fault-tolerant) • Stormはメッセージの処理中に障害が発生した場合、 必要に応じて処理プロセスの再起動/再配分を行う。 • Stormはメッセージ処理を継続することを保証する。 6. プログラミング言語非依存(Programming language agnostic) • StormのTopologyと処理コンポーネントは様々な言語で定義でき、 どんな開発者にとっても利用しやすくなっている。 • (例:Java、Clojure、Scala、Ruby、Python etc) 7 Advanced Tech Night
  • 9. 3. 類似プロダクトとの比較 Storm Dempsy S4 処理対象単位 Tuple(専用Entity) オブジェクト オブジェクト (オブジェクト内包) ノードの役割分担 マスタ/スレーブ 対称 対称 (SPOFは無い) 接続関係の定義 プログラム 定義ファイル 定義ファイル 条件定義可能 コンポーネント 継承 アノテーション 継承 実装方法 メッセージ単位の 失敗検知有り 失敗検知無し 処理負荷に従い 処理保証 破棄 8 Advanced Tech Night
  • 11. 4. Stormの論理構成 Bolt Spout Bolt Tuple Tuple Tuple Topology Spout & Bolt からなるネットワーク構造 10 Advanced Tech Night
  • 12. 4. Stormの論理構成 Topologyの構成要素 Tuple Stormで処理されるメッセージを保持するデータのこと。 シリアライズ登録をすることで独自エンティティも利用可能。 Stream Tupleが連続的に流れる経路を意味する。 Spout Streamのソースとなるもので、Tupleを送り出す。 Stormのストリーム処理の起点となる。 Bolt Streamの変換処理を行う。 単一、または、複数のStreamからTupleを受信し、 加工した上で、新たなStreamにメッセージを送信する。 Stream、Spout、Boltからなるネットワーク構造のこと。 Topology Stormで処理を実行する場合は、このTopologyの単位で Stormクラスタに渡す。 11 Advanced Tech Night
  • 13. 5. Stormのプロセス構成 Stormクラスタ Supervisor 1ノード Worker Zookeeper Supervisor Worker Nimbus Zookeeper Supervisor Zookeeper Worker 1マシンにSupervisor1プロ Supervisor セスと複数のWorkerプロセ スが存在 Worker 12 Advanced Tech Night
  • 14. 5. Stormのプロセス構成 Nimbus (≒Hadoop:JobTracker) StormクラスタにおけるMasterノードDaemon •Topologyの起動/終了リクエストの待受け •Workerプロセスへのタスクの割り振り •Supervisor/Workerプロセスのモニタリング/再配分 Supervisor (≒Hadoop:TaskTracker) StormクラスタにおけるSlaveノードDaemon •Spout/Boltのアサイン待ち受け •Workerプロセスのモニタリング/起動/停止 Zookeeper NimbusとSupervisor間の協調 •各ノードで動作するDaemonの状態を管理 •Workerへのアサイン等は全てZookeeperを介して行われる Worker (≒Hadoop:Task) Spout/Boltを実行するプロセス •Topologyのサブセットの実行 13 Advanced Tech Night
  • 15. 6. Stream Groupings TupleがどのBoltに流れるかを指定 Stream Stream Groupings Boltが、インプットとして どのようなStreamを 読み込むかを Stream Groupings 指定する定義 Spout → Bolt → Boltの流れと Stream 流れるTupleのグルーピング定義が可能 Stream Groupings 14 Advanced Tech Night
  • 16. 6. Stream Groupings 7種類の Stream Groupings を知る Shuffle grouping 各Boltが等しい数のTupleを受けとるように、Tupleをサイクリックに配分する。 Fields grouping Streamは、グループで指定されたフィールドによって分割される。 同じ値を持つTupleは、必ず同じタスクへ送信される。 (コンシステント・ハッシュ法) All grouping Streamは複製され、すべてのBoltタスクへ送信される。 Global grouping Stream全体が、ただ一つのBoltタスクへ送信される。 具体的には、Streamは最も小さいIDのタスクへ送信される。 None grouping どのようにStreamがグループ化されるか気にしない。 現状このグループは Shuffle grouping と同じである。 だが、Stormは、このグループのBoltを(可能な場合)送信元のBolt またはSpoutと同じスレッドで実行させる。 Direct grouping Tuple生成者がコンシューマのどのタスクに、Tupleを受けとらせるか決める。 Local or shuffle 同一Workerに送信先Boltが存在すればそのBoltに送信する。 grouping 存在しない場合はShuffle groupingと同じ。 ※同一Worker内の通信時、シリアライズとネットワーク通信が省略されるため、 処理負荷/時間を抑えることが可能。 15 Advanced Tech Night
  • 17. 7. Stormの実行イメージ Topologyの構築は非常に簡単!(分散処理を、これだけで実現) // 新規のTopologyを生成 TopologyBuilder builder = new TopologyBuilder(); Spoutの名前 Spoutインスタンス // Spout を設定 builder.setSpout(“Sentence", new SentenceSpout(), 1); Spout、Bolt共に // Bolt を設定 スレッド数を指定 builder.setBolt(“Split", new SplitBolt(), 1) .shuffleGrouping(“Sentence"); “Split”のOutputを”word”で builder.setBolt(“Word", new WordCountBolt(), 3) Groupingして受信 .fieldsGrouping(“Split ",new Fields(“word")); // Topologyの設定を指定 Worker数を“2”で指定 Config conf = new Config(); (Topologyにおいて起動する Topologyの名前 conf.setNumWorkers(2); Worker数) // TopologyをStormのクラスタへ登録 StormSubmitter.submitTopology(“WordCountTopology", conf, builder.createTopology()); 16 Advanced Tech Night
  • 18. 7. Stormの実行イメージ ワードカウントの実行イメージ Word Count ["the”,2] 1文を Bolt Tupleとして 単語に ["the”] 送出 分割 Word Count [“cow”,1] Sentence Split Bolt Spout Bolt [“cow”] ・ 単語の "the cow jumped ・ 発現回数を over the moon“ ・ カウント [“moon”] ・・・ Word Count [“moon”,1] Shuffle Fields Bolt grouping grouping (同じ単語は同じBoltへ送信) 17 Advanced Tech Night
  • 20. 8. これまでのStormの使い方 これまでStormは「1Tuple/1Boltずつ処理する」のが前提 ワードカウントも「1Tupleの処理」を各Boltに分散して記述 Word 1文を Count ["the”,2] Tupleとして送出 単語に分割 ["the”] Bolt Word Sentence Split [“cow”] Spout Bolt Count [“cow”,1] Bolt "the cow jumped ・ over the moon“ [“moon”] ・ 単語の発現回数を ・ カウント ・・・ Word Count [“moon”,1] Bolt 「複数のTupleに対してこうしてね」という 処理を記述することはできなかった 19 Advanced Tech Night
  • 21. 9. Trident APIとは? 1. Storm0.8.0で追加された、Stormの抽象化API(≒構文糖衣) ① Tridentを用いることにより、 高スループットかつ状態を持つストリーム処理を構築可能 ② コンセプトとしては、HadoopにおけるPigやCascadingと同一 2. Boltを意識することなく下記のような処理を作成可能。 ① ネットワーク通信を行わないプロセス内で区切った処理の定義 ② データの再配分(データの中身は変更しない) ③ データの集計 ④ データのグルーピング ⑤ データのマージ/ジョイン 3. インクリメンタルな状態管理を提供 ① 1回のバッチ毎に永続化層(DB等)にデータを保存し、 バッチ実行ごとに加算集計することが可能 20 Advanced Tech Night
  • 22. 9. Trident APIとは? • Trident Topologyでパーツとして利用できるAPI例 (自作機能を追加することも可能) 分割 フィルタ (入力データを分割) (データをフィルタリング) グルーピング 集計 (データをグルーピング) (データを集計) カウント 変換 (発現回数をカウント) (データを変換) キャッシュ ジョイン (データを保持) (キーベースでジョイン) • これらのパーツを組み合わせたデータの整形/統計が Stormの機構上で可能になる。 21 Advanced Tech Night
  • 23. 10. Trident APIで出来るようになったこと 実現したいことを例に考えてみると・・・ 例:ある文書に対するワードカウント → ワードカウントは下記の3ステップに分割される。 1. 文章を1文ずつ読みこむ 2. 文章を単語ごとに分割する 3. 各単語ごとに発現回数をカウントする これをStormで実現するとどうなるか? 22 Advanced Tech Night
  • 24. 10. Trident APIで出来るようになったこと • 【Before】これまでのStormを用いた場合(コンポーネント) Word 1. 文章を1文ずつ Count ["the”,2] 読みこむ 2. 文章を単語ご とに分割する ["the”] Bolt Word Sentence Split [“cow”] Spout Bolt Count [“cow”,1] Bolt 3. 各単語ごとに発 "the cow jumped ・ 現回数をカウントす over the moon“ [“moon”] ・ る ・ ・・・ Word Count [“moon”,1] Bolt 1処理をSpout/Boltにマッピング 23 Advanced Tech Night
  • 25. 10. Trident APIで出来るようになったこと • 【After】Trident APIを用いた場合(コンポーネント) 1. 文章を1文ずつ 2. 文章を単語ご 3. 各単語ごとに発現回 読みこむ とに分割する 数をカウントする ["the”] [“the”,1] Sentence [“cow”] Spout Split Count [“cow”,1] [“moon”] [“moon”,1] "the cow jumped over the moon“ ・・・ Spoutは同じく作成 Boltではなく、「関数」をマッピング 24 Advanced Tech Night
  • 26. 10. Trident APIで出来るようになったこと • 【Before】これまでのStormを用いた場合(Topology定義部分) // 新規のTopologyを生成 TopologyBuilder builder = new TopologyBuilder(); // Spout を設定 builder.setSpout(“Sentence", new SentenceSpout(), 1); // Bolt を設定 builder.setBolt(“Split", new SplitBolt(), 1) .shuffleGrouping(“Sentence"); builder.setBolt(“Word", new WordCountBolt(), 3) .fieldsGrouping(“Split ",new Fields(“word")); // Topologyの設定を指定 Config conf = new Config(); conf.setNumWorkers(2); // TopologyをStormのクラスタへ登録 StormSubmitter.submitTopology(“WordCountTopology", conf, builder.createTopology()); 25 Advanced Tech Night
  • 27. 10. Trident APIで出来るようになったこと • 【After】Trident APIを用いた場合(Topology定義部分) TridentTopology topology = new TridentTopology(); TridentState wordCounts = topology .newStream("spout1", spout) .parallelismHint(1) .each(new Fields(“sentence”), new Split(), new Fields(“word”)) ★文章を単位に分割★ .groupBy(new Fields(“word”)) ★単語でグルーピング★ .persistentAggregate(new MemoryMapState.Factory(), new Count(), new Fields(“count”)). parallelismHint(3); ★単語ごとにカウントし保存★ TopologyはDSLのように 簡易に記述可能! 26 Advanced Tech Night
  • 28. 10. Trident APIで出来るようになったこと • 【Before】これまでのStormを用いた場合(Spout) ■ SentenceSpout Sentence public class RandomSentenceSpout extends BaseRichSpout { SpoutOutputCollector _collector; Spout Random _rand; @Override public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) { _collector = collector; _rand = new Random(); } @Override public void nextTuple() { Utils.sleep(100); String[] sentences = new String[] { "the cow jumped over the moon“, "an apple a day keeps the doctor away“, "four score and seven years ago", "snow white and the seven dwarfs“, "i am at two with nature"}; String sentence = sentences[_rand.nextInt(sentences.length)]; _collector.emit(new Values(sentence)); } @Override public void declareOutputFields(OutputFieldsDeclarer declarer) { declarer.declare(new Fields("word")); } } 27 Advanced Tech Night
  • 29. 10. Trident APIで出来るようになったこと • 【After】Trident APIを用いた場合(Spout) Sentence Spout FixedBatchSpout spout = new FixedBatchSpout(new Fields("sentence"), 3, new Values("the cow jumped over the moon"), new Values( "the man went to the store and bought some candy"), new Values("four score and seven years ago"), new Values( "how many apples can you eat"), new Values( "to be or not to be the person")); spout.setCycle(true); 28 Advanced Tech Night
  • 30. 10. Trident APIで出来るようになったこと • 【Before】これまでのStormを用いた場合(Bolt) Word ■ SplitBolt Split ■WordCountBolt Count Bolt Bolt public static class WordCount extends BaseBasicBolt { Map<String, Integer> counts = new HashMap<String, Integer>(); public class SplitBolt extends BaseBasicBolt { @Override @Override public void execute(Tuple tuple, BasicOutputCollector collector) { public void execute(Tuple tuple, BasicOutputCollector collector) { String word = tuple.getString(0); String sentence = tuple.getString(0); Integer count = counts.get(word); for(String word: sentence.split(" ")) { if(count==null) count = 0; collector.emit(new Values(word)); count++; } counts.put(word, count); } collector.emit(new Values(word, count)); } @Override public void declareOutputFields(OutputFieldsDeclarer declarer) { @Override declarer.declare(new Fields("word")); public void declareOutputFields(OutputFieldsDeclarer declarer) { } declarer.declare(new Fields("word", "count")); } } } 29 Advanced Tech Night
  • 31. 10. Trident APIで出来るようになったこと • 【After】Trident APIを用いた場合(関数) Split Count ■ Split ■ Count public class Count implements CombinerAggregator<Long> { public static class Split extends BaseFunction { @Override public Long init(TridentTuple tuple) { @Override return 1L; public void execute(TridentTuple tuple, } TridentCollector collector) { String sentence = tuple.getString(0); @Override for (String word : sentence.split(" ")) { public Long combine(Long val1, Long val2) { collector.emit(new Values(word)); return val1 + val2; } } } @Override } public Long zero() { return 0L; } } Boltより小さい「関数」で処理を記述可能! Boltを考える必要が無くなる! 30 Advanced Tech Night
  • 32. 11. Trident APIサンプル実行デモ • 下記の構成を持つTrident Topologyのデモを行います。 集計処理 “moon” “moon” "the cow jumped “moon” over the moon“ “cow” “cow” ・・・ “cow” 文章入力 単語分割 グルーピング カウント “moon”, 10 “cow”, 8 結果保存 結果取得処理 “cat” “cat”,5 “cat”,5 DRPC “dog” “dog”,10 “dog”,10 "cat dog jumped” 空データ 合計算出 単語分割 結果取得 フィルタリング 31 Advanced Tech Night
  • 34. まとめ 1. Stormは、 『分散し、フォールトトレラントなリアルタイム処理フレームワーク』 2. 6つの特長 ①幅広いユースケース ②スケーラブル ③メッセージの処理保証 ④環境構築の容易性 ⑤耐障害性 ⑥プログラミング言語非依存 3. Trident APIの特長 -これまでTuple単位だった処理をTopology全体で実施 -結果データの取得が容易になった 4. Trident APIのパーツ 分割、フィルタ、グルーピング、集計、カウント、変換etc 5. Trident APIを利用することで、統計処理が容易に実装可能 33
  • 35. Thank you Try Storm And Trident! 34 Advanced Tech Night