Amazon EC2 + Storm
-
Upload
kouhei-mikami -
Category
Technology
-
view
1.191 -
download
4
description
Transcript of Amazon EC2 + Storm
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で実装してみる