Amazon EC2 + Storm

Preview:

DESCRIPTION

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

Citation preview

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

自己紹介的な

• 三上 浩平

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

1. Stormとは?

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

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

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

利用例

• Twitterのトレンド

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

2. Stormのクラスタ構成

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

• Nimbus

• ZooKeeper

• SuperVisor

• Worker

Nimbus

ZooKeeper

SuperVisor

ZooKeeper

SuperVisorSuperVisorWorker

WorkerWorker

WorkerWorker

WorkerWorker

WorkerWorker

Nimbus

• Stormのマスターノード

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

Nimbus

ZooKeeper

SuperVisor

ZooKeeper

SuperVisorSuperVisorWorker

WorkerWorker

WorkerWorker

WorkerWorker

WorkerWorker

Zookeeper

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

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

Zookeeper

SuperVisor

Zookeeper

SuperVisorSuperVisorWorker

WorkerWorker

WorkerWorker

WorkerWorker

WorkerWorker

Nimbus

SuperVisor

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

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

Nimbus

ZooKeeper

SuperVisor

ZooKeeper

SuperVisorSuperVisorWorker

WorkerWorker

WorkerWorker

WorkerWorker

WorkerWorker

Worker

• タスクを実行する

Nimbus

ZooKeeper

SuperVisor

ZooKeeper

SuperVisorSuperVisorWorker

WorkerWorker

WorkerWorker

WorkerWorker

WorkerWorker

3. 環境の構築

Amazon EC2

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

• storm-deploy

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

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

storm-deploy

• GitHub

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

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

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

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

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

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

Spout

Topology

Bolt

Bolt

Bolt

Spout Bolt

Stream

Spout

• Spoutはデータの流れの源

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

Spout

Topology

Bolt

Bolt

Bolt

Spout Bolt

Stream

Stream

• StreamはBolt,

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

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

Spout

Topology

Bolt

Bolt

Bolt

Spout Bolt

Stream

Bolt

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

を作成する

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

Spout

Topology

Bolt

Bolt

Bolt

Spout Bolt

Stream

例: 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でそれぞれの単語を合計する

Topologyとクラスタの関係1

Spout

Topology

Bolt

Bolt

Bolt

Spout Bolt

Nimbus

ZooKeeper

SuperVisor

ZooKeeper

SuperVisorSuperVisorWorker

WorkerWorker

WorkerWorker

WorkerWorker

WorkerWorker

Topologyとクラスタの関係2

Spout

Topology

Bolt

Bolt

Bolt

Spout Bolt

Nimbus

ZooKeeper

SuperVisor

ZooKeeper

SuperVisorSuperVisorWorker

WorkerWorker

WorkerWorker

WorkerWorker

WorkerWorker

• TopologyはNimbusに登録される

Topologyとクラスタの関係3

Spout

Topology

Bolt

Bolt

Bolt

Spout Bolt

Nimbus

Zookeeper

SuperVisor

Zookeeper

SuperVisorSuperVisorWorker

WorkerWorker

WorkerWorker

WorkerWorker

WorkerWorker

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

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

5. Stormのデモ

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

次回予告

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

• Clojure+Stormで実装してみる

Recommended