[社内勉強会]春の嵐を巻き起こせ Storm補完計画

Preview:

Citation preview

1

春の嵐を巻き起こせ

Storm補完計画(概要編 )

2

第壱話 ストー

襲来、

3

Stormとは

ビックデータのリアルタイム分散並列処理を簡単に行うためのフレームワーク

もともと米 BackType社 (ソーシャルメディア解析企業 )がつぶやき解析システムとして開発

2011年 7月に Twitter社が買収しオープンソース化

Clojureで実装されており、連続的に発生するデータを、継続的に処理し続けるフレームワーク

4

Stormの背景

でも Hadoopって基本的にバッチ処理で、リアルタイムのニーズにはミスマッチングではないか

リアルタイム並列処理ならキューイング+非同期処理がセオリー

それだと信頼性とか拡張性の担保が大変でいかん

そもそもビックデータ処理は Hadoopが有名

そんな悩みを解決するフレームワーク

5

Storm

6

Stormの6つの特徴

1.シンプルStormの APIは非常にシンプル複雑な分散処理など特に意識することなく、システムを開発可能

2.拡張性Stromは膨大な数のメッセージに対しても低レイテンシを維持しつつ、スケール可能スケールするためには、マシンを増設して処理の並列数を増やすだけで OKプログラムを改修する必要はなし

7

Stormの6つの特徴

3.耐障害性データ処理中に障害が発生し、ノードがダウンした場合でも、 Stormは必要に応じてタスクの再割当てやノードの再起動を行うそのため、処理が完全に停止してしまうことがなく、データ処理をし続けることが保証される

4.データ欠損無しの保障何らかの理由により、データの処理に失敗したり、タイムアウトが発生した場合でも、 Stromはそれを検知し、再処理する仕組みがあるこれにより全てのメッセージが処理されることを担保する

8

Stormの6つの特徴

5.プログラム言語非依存Storm自体は内部で Clojureという言語で実装されているが、 Java、 Scala、 Ruby、 Python、 Perl、JavaScript、 PHP等の様々な言語で開発可能

6.簡単なデプロイと運用Stormは簡単にデプロイし、動作させることが可能システム構成もわずかな設定で変更でき、 Amazon EC2などのクラウド環境でも動作できる

9

以上6つが主な特徴

10

11

ぶっちゃけ何ができるの?

12

Stormができること

其の壱 継続的な並列処理• Stormの基本的な機能•通常はストリームデータであるメッセージを一時的メッセージキューに保存し、そのメッセージを継続的、かつ並列的に処理し続ける

13

Stormができること

其の弐 グルーピング•メッセージは特定のルールに従って、グルーピングして処理できる

最も頻繁に使われる方法が、ShuffleGrouping各Boltすべてが等しい数のTupleを受け取るように、TupleがランダムにBoltタスクへ送信される。

FieldsGrouping指定されたフィールドの値によってグルーピングされるTupleの1つ以上のフィールドを使って、同じ値を持つTupleは必ず同じBoltに送信されるようになる。

AllGrouping受信Boltのすべてに各tupleのコピーが複製され送信される。

使い方には注意が必要

     それ以外にも全6種類のグルーピングとカスタムグルーピングがある

14

Stormができること

其の参 トランザクション• Stormはメッセージが必ず処理されることを保証するが、障害が発生し、メッセージが再送された場合、重複して処理される可能性がある•たった 1 度だけの処理としたい場合は、 Transactional Topologies機能を使用する•すると、メッセージにはトランザクション IDが自動で付与され、 Spout/boltの処理を一つのトランザクションの処理として扱うことができる

15

以上Stormができる主な機能は3つだけ

継続的な並列処理

グルーピング

トランザクション

Stormができること

16

ここまで駆け足できましたが

17

知らない用語ばかりだ…

18

第弐話 

見知ら

ぬ用語、

19

用語の説明も踏まえStormの内部を簡単に見てみる

20

Stormの基本アーキテクチャと用語

ここからが本番

クラスタの要素

タスクを実行するプロセスTopologyのサブセットを実行

21

Stormの基本アーキテクチャと用語Stormのプロセス構成Stormは複数マシンにまたがって動作するそれら全体を「クラスタ」と呼ぶクラスタは基本的に Master-Slave構成となる

Nimbusクラスタ内における Masterノードであり、 SupervisorやWorkerプロセスの管理を行う

クラスタ内における Slaveノードであり、タスク (Spoutや Bolt)が該当アサイン待受や、 Workerプロセスの起動 /停止を行うZookeeperは ApacheFoundationのプロダクトの1つとして開発されたStormでは Nimbusと Supervisor 間の協調管理に用いられる

Worker

Supervisor

Zookeeper

22

Stormの基本アーキテクチャと用語クラスタを具体的に図にすると

Nimbus

Supervisor

Zookeeper

StormクラスタNimbus

StormクラスタのMasterノード・ Workerプレセスへのタスクの割り振り・ Workerプロセスのモニタリング

Stormクラスタの Slaveノード・タスクアサイン待ち受け・ Workerプロセスの起動 /停止

Supervisor

Zookeeper

Worker

Nimbusと Supervisoer 間の協調・各ノードで動作するデーモンの状態管理

タスクを実行するプロセス・ Topologyのサブセットの実行

Zookeeper

Zookeeper

WorkerWorkerWorker

SupervisorWorkerWorkerWorker

SupervisorWorkerWorkerWorker

SupervisorWorkerWorkerWorker

23

Stormの基本アーキテクチャと用語

続いてここからが本当の

本番

Topologyの要素

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

24

Stormの基本アーキテクチャと用語Stormのアプリケーション構成Storm上で動作するアプリケーションを Topology(トポロジー )Topologyは Spoutと Boltからなるネットワーク構成

Tuple Stormで処理されるメッセージinteger,long,byte,string等標準的な型をサポート

途切れずに連続する Tupleを意味するどのような Tupleが流れるかはグルーピング機能により決定

Streamのソースとなるもので、外部からデータを取得したり、受け付けたりして Tupleを生成 /送出を行うStormの起点となる要素Spout

Stream

Bolt

25

Stormの基本アーキテクチャと用語Topologyを具体的に図にすると

Topology(トポロジー )Spout & Boltからなるネットワーク構造

Spout StreamTuple

Bolt Bol

t

Stream

Stream

TupleTuple

Tuple

Tuple Tuple Tuple Tuple

Tuple Tuple Tuple Tuple

Stream

Stream

Stream

Tuple TupleTuple

TupleTuple

Tuple

Tuple Tuple Tuple

26

Stormの基本アーキテクチャと用語さらに Stormを利用したシステム全体像を図にすると

イベント

メッセージキュー

(イベントの一時保存 )

RDBやKVS

ユーザへ通知

ユーザへ通知

①イベント受付 ②イベント処理 ③ 結果の処理

27

Stormの基本アーキテクチャと用語

つまるところ

28

Stormの基本アーキテクチャと用語

Topologyが Storm処理の心臓

29

だから今日は Topologyだけ覚えていってね     

30

第参話 

Topologyと実行

31

Topologyの構築

// 新規の Topologyを生成 TopologyBuilder builder = new TopologyBuilder(); // Spout を設定 builder.setSpout(“spout1", new TestWordSpout(true), 5); builder.setSpout(“spout2", new TestWordSpout(true), 3); // Bolt を設定 builder.setBolt(“bolt1", new TestWordCounter(), 3) .fieldsGrouping("spout1", new Fields("word")) .fieldsGrouping(“spout2", new Fields("word")); // Topologyの設定を指定 Map conf = new HashMap(); conf.put(Config.TOPOLOGY_WORKERS, 4); // TopologyをStormのクラスタへ登録 StormSubmitter.submitTopology("mytopology", conf, builder.createTopology());

http://www.slideshare.net/AdvancedTechNight/twitterstorm

Spout、 Bolt 共に スレッド数を指

Worker数を“ 4”で指定 ( 1つの Supervisorで 起動する最大Work

Topologyの構築は非常に簡単(分散処理を、これだけで実現)

とのこと ( 苦笑 )

32

ということでワードカウントで実行イメージ例

33

Topologyの実行イメージ

http://www.slideshare.net/AdvancedTechNight/twitterstorm

34

実行イメージを元にTopologyを

おさらいしてみる

35

Topologyのおさらい

http://www.slideshare.net/AdvancedTechNight/twitterstorm

36

Topologyのおさらい

http://www.slideshare.net/AdvancedTechNight/twitterstorm

☚これが

37

Topologyのおさらい

Spoutデータを取得 →  Tuple生成 →  Tuple送信

スパウト

38

Topologyのおさらい

http://www.slideshare.net/AdvancedTechNight/twitterstorm

こいつらが

39

Topologyのおさらい

Boltボルト

Tuple受信 → 処理・加工 →  Tuple送信

40

Topologyのおさらい

http://www.slideshare.net/AdvancedTechNight/twitterstorm

やり取りされてるこいつらが

41

Topologyのおさらい

Tupleタプル

Stormでやり取りされるデータ

連続した Tupleのことを Stream

42

Topologyのおさらい

http://www.slideshare.net/AdvancedTechNight/twitterstorm

この辺りの機能が

43

Topologyのおさらい

グルーピング機能

いろいろ種類がある

44

Topologyわかってきました?

45

第四話 Hadoop

vsStorm

46

Hadoopと Storm 比較

Stormの構成は Hadoopと比較するとわかりやすい

47

Hadoopと Storm 比較

ただし、 Stormは Hadoopと競合するものではない導入するシステムの特性を見極め、使い分けることが重要

Hadoop Storm

対象 バッチ処理 リアルタイム処理実行 • 巨大で有限なジョブ

• たくさんのデータを一度だけ処理する

• 長い待ち時間

• 小さい無限のジョブ• 無限のストリームデータを連続して処理する

• 短い待ち時間処理構成 MapReduce → Mapper + Reducer

Topology → Spout + Bolt

ノード JobTrackerTaskTracker

NimbusSupervisor

48

まとめ

Stormはリアルタイム分散並列処理を継続的に行うフレームワーク

• シンプル• 拡張性• 耐障害性

• データ欠損なしの保障• プログラム言語非依存• 簡単なデプロイと運用

Stormを構成する要素クラスタ /Topology/Stream/Tuple/Spout/Bolt

6つの特徴

49

ご清聴、ありがとうございました

参考文献• SoftwareDesign(2013年 6月号 )• Twitterのリアルタイム分散処理システム「 Storm」入門 http://www.slideshare.net/AdvancedTechNight/twitterstorm

Recommended