[社内勉強会]春の嵐を巻き起こせ storm補完計画
TRANSCRIPT
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