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

49
1 春春春春春春春春 Storm 春春春春 ( 春春春 )

Upload: hirooooo

Post on 15-Apr-2017

158 views

Category:

Engineering


0 download

TRANSCRIPT

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

1

春の嵐を巻き起こせ

Storm補完計画(概要編 )

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

2

第壱話 ストー

襲来、

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

3

Stormとは

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

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

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

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

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

4

Stormの背景

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

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

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

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

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

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

5

Storm

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

6

Stormの6つの特徴

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

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

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

7

Stormの6つの特徴

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

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

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

8

Stormの6つの特徴

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

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

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

9

以上6つが主な特徴

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

10

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

11

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

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

12

Stormができること

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

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

13

Stormができること

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

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

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

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

使い方には注意が必要

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

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

14

Stormができること

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

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

15

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

継続的な並列処理

グルーピング

トランザクション

Stormができること

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

16

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

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

17

知らない用語ばかりだ…

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

18

第弐話 

見知ら

ぬ用語、

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

19

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

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

20

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

ここからが本番

Page 21: [社内勉強会]春の嵐を巻き起こせ 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

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

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

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

23

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

続いてここからが本当の

本番

Page 24: [社内勉強会]春の嵐を巻き起こせ 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

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

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

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

26

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

イベント

メッセージキュー

(イベントの一時保存 )

RDBやKVS

ユーザへ通知

ユーザへ通知

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

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

27

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

つまるところ

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

28

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

Topologyが Storm処理の心臓

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

29

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

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

30

第参話 

Topologyと実行

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

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の構築は非常に簡単(分散処理を、これだけで実現)

とのこと ( 苦笑 )

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

32

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

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

33

Topologyの実行イメージ

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

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

34

実行イメージを元にTopologyを

おさらいしてみる

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

35

Topologyのおさらい

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

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

36

Topologyのおさらい

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

☚これが

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

37

Topologyのおさらい

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

スパウト

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

38

Topologyのおさらい

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

こいつらが

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

39

Topologyのおさらい

Boltボルト

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

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

40

Topologyのおさらい

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

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

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

41

Topologyのおさらい

Tupleタプル

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

連続した Tupleのことを Stream

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

42

Topologyのおさらい

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

この辺りの機能が

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

43

Topologyのおさらい

グルーピング機能

いろいろ種類がある

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

44

Topologyわかってきました?

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

45

第四話 Hadoop

vsStorm

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

46

Hadoopと Storm 比較

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

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

47

Hadoopと Storm 比較

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

Hadoop Storm

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

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

• 長い待ち時間

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

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

Topology → Spout + Bolt

ノード JobTrackerTaskTracker

NimbusSupervisor

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

48

まとめ

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

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

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

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

6つの特徴

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

49

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

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