25
Amazon EC2 + Storm 三上 浩平(@mi_kami)

Amazon EC2 + Storm

Embed Size (px)

DESCRIPTION

数日Stormを触る機会があったので調査。 間違い等あればご指摘ください

Citation preview

Page 1: Amazon EC2 + Storm

Amazon EC2 + Storm三上 浩平(@mi_kami)

Page 2: Amazon EC2 + Storm

自己紹介的な

• 三上 浩平

• ギークハウス新丸子とかいうシェアハウスに住んでいます

Page 3: Amazon EC2 + Storm

1. Stormとは?

Page 4: Amazon EC2 + Storm

Stormとは• Twitterで使われているリアルタイムの分散処理システム

• 大規模分散処理を実現する

• データが有限ではなく、無限にあるようなケースで使う

Page 5: Amazon EC2 + Storm

利用例

• Twitterのトレンド

• リアルタイムで流れるツイートからトレンドを計算

Page 6: Amazon EC2 + Storm

2. Stormのクラスタ構成

Page 7: Amazon EC2 + Storm

全体像• 構成する要素は以下の4つ

• Nimbus

• ZooKeeper

• SuperVisor

• Worker

Nimbus

ZooKeeper

SuperVisor

ZooKeeper

SuperVisorSuperVisorWorker

WorkerWorker

WorkerWorker

WorkerWorker

WorkerWorker

Page 8: Amazon EC2 + Storm

Nimbus

• Stormのマスターノード

• Workerプロセスへのタスクの割り振り

Nimbus

ZooKeeper

SuperVisor

ZooKeeper

SuperVisorSuperVisorWorker

WorkerWorker

WorkerWorker

WorkerWorker

WorkerWorker

Page 9: Amazon EC2 + Storm

Zookeeper

• ノード間のデーモンの状態を管理

• Nimbus, SuperVisor, Workerは状態を持たない

Zookeeper

SuperVisor

Zookeeper

SuperVisorSuperVisorWorker

WorkerWorker

WorkerWorker

WorkerWorker

WorkerWorker

Nimbus

Page 10: Amazon EC2 + Storm

SuperVisor

• タスクのアサインの待ち受け

• Wokerプロセスの起動と停止

Nimbus

ZooKeeper

SuperVisor

ZooKeeper

SuperVisorSuperVisorWorker

WorkerWorker

WorkerWorker

WorkerWorker

WorkerWorker

Page 11: Amazon EC2 + Storm

Worker

• タスクを実行する

Nimbus

ZooKeeper

SuperVisor

ZooKeeper

SuperVisorSuperVisorWorker

WorkerWorker

WorkerWorker

WorkerWorker

WorkerWorker

Page 12: Amazon EC2 + Storm

3. 環境の構築

Page 13: Amazon EC2 + Storm

Amazon EC2

• Amazon EC2上で構築するのが一番簡単

• storm-deploy

• GitHub上で公開されているプロジェクト

• 設定ファイルを書くだけで簡単にAmazon EC2上に環境が作れる

Page 14: Amazon EC2 + Storm

storm-deploy

• GitHub

• https://github.com/nathanmarz/storm-deploy

• Wikiの説明通りに進めるだけ!

Page 15: Amazon EC2 + Storm

4. Topologyを作って問題を解く

Page 16: Amazon EC2 + Storm

Topologyの構築• Topologyはタスクを実行する単位

• Java, Clojure等でコードを書いてこれらを作る

• TopologyはSpout, Bolt, Streamをそれぞれ持つ

Spout

Topology

Bolt

Bolt

Bolt

Spout Bolt

Stream

Page 17: Amazon EC2 + Storm

Spout

• Spoutはデータの流れの源

• データは無限長のタプルで表される

Spout

Topology

Bolt

Bolt

Bolt

Spout Bolt

Stream

Page 18: Amazon EC2 + Storm

Stream

• StreamはBolt,

Spout間のデータの流れを表す

• Spout同様、データ形式はタプル

Spout

Topology

Bolt

Bolt

Bolt

Spout Bolt

Stream

Page 19: Amazon EC2 + Storm

Bolt

• BoltはStreamを加工して別のStream

を作成する

• Boltは複数のWorkerで動作する

Spout

Topology

Bolt

Bolt

Bolt

Spout Bolt

Stream

Page 20: Amazon EC2 + Storm

例: WordCount

Spout

WordCount Topology

CountBoltTotalBoltSplitBolt

CountBolt

The gameplay is centred upon a mobage-type card...

[“The”, “gameplay”, “is”, “centred”, “upon”, “a”, “mobage-type”, “card”]

[“The”, 2] [“gameplay”, 1] [“is”, 2] [“centred”, 2]

[“upon”,1] [“a”, 2] [“mobage-type”, 1] [“card”, 3]

[“The”, 2] [“gameplay”, 1] [“is”, 2] [“centred”, 2] [“upon”,1] [“a”, 2] [“mobage-type”, 1] [“card”, 3]

• Spoutから文字列を流す

• SplitBoltで文字列を単語に区切る

• CountBoltで単語の数をカウントする

• TotalBoltでそれぞれの単語を合計する

Page 21: Amazon EC2 + Storm

Topologyとクラスタの関係1

Spout

Topology

Bolt

Bolt

Bolt

Spout Bolt

Nimbus

ZooKeeper

SuperVisor

ZooKeeper

SuperVisorSuperVisorWorker

WorkerWorker

WorkerWorker

WorkerWorker

WorkerWorker

Page 22: Amazon EC2 + Storm

Topologyとクラスタの関係2

Spout

Topology

Bolt

Bolt

Bolt

Spout Bolt

Nimbus

ZooKeeper

SuperVisor

ZooKeeper

SuperVisorSuperVisorWorker

WorkerWorker

WorkerWorker

WorkerWorker

WorkerWorker

• TopologyはNimbusに登録される

Page 23: Amazon EC2 + Storm

Topologyとクラスタの関係3

Spout

Topology

Bolt

Bolt

Bolt

Spout Bolt

Nimbus

Zookeeper

SuperVisor

Zookeeper

SuperVisorSuperVisorWorker

WorkerWorker

WorkerWorker

WorkerWorker

WorkerWorker

• Bolt, SpoutはSuperVisorのWorkerに割り当てられる

• NimbusとZookeeperが適切に割り当てを実行

Page 24: Amazon EC2 + Storm

5. Stormのデモ

Topologyを送る, Gangliaで状態を見る...etc

Page 25: Amazon EC2 + Storm

次回予告

• コンピュータ将棋の本を今読んでる

• Clojure+Stormで実装してみる