Upload
advancedtechnight
View
42.210
Download
2
Embed Size (px)
DESCRIPTION
鈴木 貴典+木村 宗太郎 TwitterのNathan Marz氏が開発している 「Storm」 。 2011年9月に、オープンソースとして公開されましたが、まだまだ日本で得られる情報は少なく、 詳細は不明なところも多いです。 そこで、日本初(たぶん)の「Storm」セッションを行います。 「Storm」は、CEP(Complex Event Processing=複合イベント処理)に属するプロダクトであり、 分散リアルタイム処理を行うための基本セットを提供しています。 今回のセッションでは、その概念や特性などについて解説してみます。
Citation preview
Advanced Tech Night No.04
Twitterの リアルタイム分散処理システム
Storm 入門
2012/03/01
Acroquest Technology
鈴木 貴典
自己紹介
氏名 : 鈴木 貴典
所属 : Acroquest Technology
Twitter : @takanorig
本職は SEPG (Software Engineering Process Group)
★ プロセスとか、品質とか、マネジメントとか・・・
★ その一方、OSSの開発・調査とか、フレームワークの開発
なんかもしています
(たぶん、めずらしい存在です)
Advanced Tech Night
1
目次
1. Stormとは?
2. Stormの6つの特徴
3. Stormが生まれた
背景
4. Stormができること?
5. 3つの基本
ユースケース
6. Stormクラスタ
7. Topology
8. TaskとWorker
9. Stream Groupings
10.実行イメージ
11.実行モード
12.Hadoopとの比較
Advanced Tech Night
2
Storm とは?
分散し、フォールトトレラントな
リアルタイム処理フレームワーク
1. Stormとは?
1. 元々は、米BackType社が開発
Twitter社がBackType社を買収し、オープンソースとして公開(2011/09/19)
Twitterでは、つぶやきのリアルタイム解析に利用
2. 一般的には、
「CEP(Complex Event Processing):複合イベント処理」 のシステムに分類される
同分類のOSSプロダクト
→Yahoo S4、 Esper、Streambase、HStreaming など
3. 連続的に発生するデータを、継続的に処理をし続ける
4. コアプロセスはClojure、コンポーネントはJavaで実装されている
ノード間の通信にThriftを利用しているので、他の言語でも開発可能
Advanced Tech Night
4
2. Stormの6つの特徴
Advanced Tech Night
5
1. Extremely broad set of use cases
非常に幅広いユースケース •「ストリーム処理」・・・ メッセージ処理や、データベースのリアルタイム更新
•「継続的な処理」・・・ 連続的なクエリの実行や、クライアントへ処理結果を
ストリーミングで表示する、などの継続的な計算
•「分散RPC」・・・ 即座に処理する検索クエリのような激しいクエリの並列処理
など、Stormの基本機能は、非常に多くのユースケースに対応します。
2. Scalable
拡張性 Stormは、膨大なメッセージの処理に対してもスケールします。
Topology拡張のためにしなければならないことは、マシンの増設、並列処理数を増やすだけです。
例として、Stormの最初のアプリケーションの1つにおいて、10ノードのクラスタ上で、毎秒、1,000,000メッセージと数百回のデータベース呼び出し処理を実現してます。
クラスタ調整のためにZookeeperと組み合わせて使えば、さらに大きなサイズのクラスタへスケールすることもできます。
2. Stormの6つの特徴
Advanced Tech Night
6
3. Guarantees no data loss
データ欠損がないことの保証 リアルタイム処理システムは、データが正常に処理されることを強く保証
しなければなりません。データが欠損するシステムは、非常に限られた
ユースケースでしか使用できません。
Stormは、あらゆるメッセージが処理されることを保証します。そして、これが
S4などの他のシステムと大きく異なる点です。
4. Extremely robust
堅牢性 扱いが難しいHadoopのようなシステムと違って、Stormクラスタは、
簡単に動作します。 ユーザーができるだけ苦労せず、Stormクラスタを
動かせるようにする、というのは、 Stormプロジェクトの明確なゴールです。
2. Stormの6つの特徴
Advanced Tech Night
7
5. Fault-tolerant
耐障害性 データ処理中に障害が起きた場合、Stormは必要に応じてタスクの再割当を
します。Stormは、データ処理をし続けること(またはデータ処理を停止させるまで継続すること)を保証します。
6. Programming language agnostic
プログラミング言語非依存
堅牢で拡張性のあるリアルタイム処理は、一つのプラットホームに限定されるべきではありません。StormのTopologyと処理コンポーネントは、様々な言語で定義でき、どんな開発者にとっても利用しやすくなっています。
3. Stormが生まれた背景
Advanced Tech Night
8
大規模分散処理と言えば・・・
Hadoop
しかしながら、Hadoopで、
リアルタイムの処理を
実現するのは困難であった
Storm以前の
リアルタイム処理は・・・ ・キューとワーカーによる処理
→メッセージの取得
→DBの更新
→新たなメッセージをキューに登録
① 退屈な仕事
② 脆弱
③ 拡張が大変
Storm リアルタイム 分散 耐障害性 拡張性 データの保証
Advanced Tech Night
9
Stormができること?
Advanced Tech Night
10
分散処理 のみ
4. Stormができること?
11
リアルタイムでの 分散処理の
実行のみに特化
シンプル かつ 強力
5. 3つの基本ユースケース
Advanced Tech Night
12
ストリーム処理 分散RPC 継続的な計算
•QueueとWorkerによる処理
•フォールト・トレラント
•スケーラブル
•継続的なクエリ実行
•処理結果のストリーミング
•on the fly でのクエリ実行
•並列化
•膨大なデータの処理
Stormの処理は以下の3つのユースケースが基本となる
Stormクラスタ
6. Stormクラスタ
Advanced Tech Night
13
Nimbus
Zookeeper
Supervisor
StormクラスタにおけるMasterノード •Workerプロセスへのタスクの割り振り
•Workerプロセスのモニタリング
NimbusとSupervisoer間の協調 •各ノードで動作するデーモンの
状態を管理
StormクラスタにおけるSlaveノード •タスクのアサイン待ち受け
•Workerプロセスの起動/停止 Nimbus
Zookeeper
Zookeeper
Zookeeper
Supervisor
Worker
タスクを実行するプロセス •Topologyのサブセットの実行
Worker
Supervisor
Worker
Supervisor
Worker
Supervisor
Worker
7. Topology
Advanced Tech Night
14
Tuple Tuple Tuple
Spout
Bolt
Topology
Spout & Bolt からなるネットワーク構造
Bolt
7. Topology
Advanced Tech Night
15
Tuple
Stream
Spout
Bolt
Topology
Stormで処理されるメッセージを保持するデータのこと。
デフォルトでは、integer, long, short, byte, string, double,
float, boolean, byte配列などをサポート。
途切れずに連続するTupleを意味する。
Streamのソースとなるもので、Tupleを送り出す。
Stormのストリーム処理の起点となる。
Streamの変換処理を行う。
単一、または、複数のStreamからTupleを受信し、
加工した上で、新たなStreamにメッセージを送信する。
Spout、Boltからなるネットワーク構造のこと。
Stormで処理を実行する場合は、このTopologyの単位でStromクラスタに渡す。
Topologyの構成要素
7. Topology
Advanced Tech Night
16
// 新規の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());
Topologyの構築は非常に簡単!(分散処理を、これだけで実現)
Spout、Bolt共に
スレッド数を指定
Worker数を“4”で指定
(1つのSupervisorで
起動する最大Worker数)
8. TaskとWoker
Advanced Tech Night
17
Task Spout、Boltの実行単位のこと
→スレッドとなる
各Taskは、クラスタ内の
ノードで動作している、
Workerプロセスで実行される
※Taskは、Worker全体で
できるだけ均等に
分散される
Task
Task
Task
8. TaskとWoker
Advanced Tech Night
18
Worker Worker Worker
Worker Worker
Worker
Woker 3つ
(2スレッドずつ)
Woker 2つ
(3スレッドずつ)
Woker 1つ
(6スレッドまとめて)
:Spout(2スレッド) + :Bolt(4スレッド)の分散イメージ
⇒Worker(プロセス)数とTask(スレッド)数を
考慮して、チューニングを行う
Spout Spout
Spout Spout
Bolt Bolt Bolt Bolt
Bolt
Spout Bolt Bolt Bolt Bolt Spout
※プロセス数・スレッド数は指定できるが、どのように分散するかは、
あくまでStormが自動で決めます。
Bolt Bolt Bolt
9. Stream Groupings
Advanced Tech Night
19
Stream
Groupings
Boltが、インプットとして
どのようなStreamを
読み込むかを
指定する定義
builder.setBolt(“bolt1", new TestWordCounter(), 3)
.fieldsGrouping("spout1", new Fields("word"))
.fieldsGrouping(“spout2", new Fields("word"));
この部分の指定
Stream
Stream
Stream Groupings
Stream Groupings
9. Stream Groupings
Advanced Tech Night
20
6種類の Stream Groupings を知る
Shuffle grouping
Fields grouping
All grouping
Global grouping
None grouping
Direct grouping
各Boltが等しい数のTupleを受けとるように、Tupleがランダムに
Boltタスクへ配信される。
Streamは、グループで指定されたフィールドによって分割される。
同じ値を持つTupleは、必ず同じタスクへ送信され、異なる値を持つTupleは、他のタスクへ送信される。
Streamは複製され、すべてのBoltタスクへ送信される。
このグループは十分に注意して使用すること。
Stream全体が、ただ一つのBoltタスクへ送信される。
具体的には、Streamは最も小さいIDのタスクへ送信される。
どのようにStreamがグループ化されるか気にしない。
現状このグループは Shuffle grouping と同じである。
だが、Stormは、このグループのBoltを(可能な場合)送信元のBolt
またはSpoutと同じスレッドで実行させる。
これは、ある種特別なグループである。
このグループのStreamは、Tuple生成者がコンシューマの
どのタスクに、Tupleを受けとらせるか決める。
10. 実行イメージ
Advanced Tech Night
21
"the cow jumped
over the moon“
・・・
Sentence
Spout
Split
Bolt
Word
Count
Bolt
Word
Count
Bolt
Word
Count
Bolt
["the”]
[“cow”]
・ ・ ・
[“moon”]
1文を
Tupleとして
送出
ワードカウントの例 ["the”,2]
[“cow”,1]
[“moon”,1]
単語に
分割
単語の
発現回数を
カウント
Shuffle
grouping
Fields
grouping
(同じ単語は同じBoltへ送信)
11. 実行モード
Advanced Tech Night
22
Stormを実行する2つのモード
Local mode
(ローカルモード)
Distributed mode
(分散モード)
Stormクラスタをシミュレート可能な
モード。主に、Topologyの動作確認
として利用する。
Stormクラスタを、複数ノードに分散
して実行するモード。
実際の運用で利用する。
12. Hadoopとの比較
Advanced Tech Night
23
Hadoop Storm
対象 バッチ処理 リアルタイム処理
実行 • 巨大で有限のジョブ
• たくさんのデータを一度だけ
処理する
• 長い待ち時間
• 小さい無限のジョブ
• 無限のストリームデータを
連続して処理する
• 短い待ち時間
処理構成 MapReduce
→ Mapper + Reducer
Topology
→ Spout + Bolt
ノード JobTracker
TaskTracker
Nimbus
Supervisor
Stormの構成は、Hadoopと比較すると分かりやすい
ただし、Stormは、Hadoopと競合するものではない
導入するシステムの特性を見極め、使い分けることが重要
まとめ
1. Stormは、『分散し、フォールトトレラントなリアルタイム処理フレームワーク』である
2. 6つの特徴
①非常に幅広いユースケース ②拡張性
③データ欠損がないことの保証 ④堅牢性
⑤耐障害性 ⑥プログラミング言語非依存
3. 3つの基本ユースケース
①ストリーム処理 ②継続的な計算 ③分散RPC
4. Stormを構成する要素
• クラスタ/ Topology / Stream / Tuple / Spout / Bolt
5. 「ローカルモード」と「分散モード」で実行可能
Advanced Tech Night
24
Storm 0.7.0 released at 2012/02/28
以下の機能が追加されました
1. Transactional Topology
Spout/Bolt全体の処理をひとつのトランザクションとして扱うことができる
2. Component-specific configuration
個々のSpout/Boltに対して、設定をカスタマイズ可能
となる(これまでは、Topology単位での指定であった)。
Advanced Tech Night
25
Advanced Tech Night
26
Thank you
Try Storm!