Twitterのリアルタイム分散処理システム「Storm」入門

27
Advanced Tech Night No.04 Twitterリアルタイム分散処理システム Storm 入門 2012/03/01 Acroquest Technology 鈴木 貴典

description

鈴木 貴典+木村 宗太郎 TwitterのNathan Marz氏が開発している 「Storm」 。 2011年9月に、オープンソースとして公開されましたが、まだまだ日本で得られる情報は少なく、 詳細は不明なところも多いです。 そこで、日本初(たぶん)の「Storm」セッションを行います。 「Storm」は、CEP(Complex Event Processing=複合イベント処理)に属するプロダクトであり、 分散リアルタイム処理を行うための基本セットを提供しています。 今回のセッションでは、その概念や特性などについて解説してみます。

Transcript of Twitterのリアルタイム分散処理システム「Storm」入門

Page 1: Twitterのリアルタイム分散処理システム「Storm」入門

Advanced Tech Night No.04

Twitterの リアルタイム分散処理システム

Storm 入門

2012/03/01

Acroquest Technology

鈴木 貴典

Page 2: Twitterのリアルタイム分散処理システム「Storm」入門

自己紹介

氏名 : 鈴木 貴典

所属 : Acroquest Technology

Twitter : @takanorig

本職は SEPG (Software Engineering Process Group)

★ プロセスとか、品質とか、マネジメントとか・・・

★ その一方、OSSの開発・調査とか、フレームワークの開発

なんかもしています

(たぶん、めずらしい存在です)

Advanced Tech Night

1

Page 3: Twitterのリアルタイム分散処理システム「Storm」入門

目次

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

Page 4: Twitterのリアルタイム分散処理システム「Storm」入門

Storm とは?

分散し、フォールトトレラントな

リアルタイム処理フレームワーク

Page 5: Twitterのリアルタイム分散処理システム「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

Page 6: Twitterのリアルタイム分散処理システム「Storm」入門

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と組み合わせて使えば、さらに大きなサイズのクラスタへスケールすることもできます。

Page 7: Twitterのリアルタイム分散処理システム「Storm」入門

2. Stormの6つの特徴

Advanced Tech Night

6

3. Guarantees no data loss

データ欠損がないことの保証 リアルタイム処理システムは、データが正常に処理されることを強く保証

しなければなりません。データが欠損するシステムは、非常に限られた

ユースケースでしか使用できません。

Stormは、あらゆるメッセージが処理されることを保証します。そして、これが

S4などの他のシステムと大きく異なる点です。

4. Extremely robust

堅牢性 扱いが難しいHadoopのようなシステムと違って、Stormクラスタは、

簡単に動作します。 ユーザーができるだけ苦労せず、Stormクラスタを

動かせるようにする、というのは、 Stormプロジェクトの明確なゴールです。

Page 8: Twitterのリアルタイム分散処理システム「Storm」入門

2. Stormの6つの特徴

Advanced Tech Night

7

5. Fault-tolerant

耐障害性 データ処理中に障害が起きた場合、Stormは必要に応じてタスクの再割当を

します。Stormは、データ処理をし続けること(またはデータ処理を停止させるまで継続すること)を保証します。

6. Programming language agnostic

プログラミング言語非依存

堅牢で拡張性のあるリアルタイム処理は、一つのプラットホームに限定されるべきではありません。StormのTopologyと処理コンポーネントは、様々な言語で定義でき、どんな開発者にとっても利用しやすくなっています。

Page 9: Twitterのリアルタイム分散処理システム「Storm」入門

3. Stormが生まれた背景

Advanced Tech Night

8

大規模分散処理と言えば・・・

Hadoop

しかしながら、Hadoopで、

リアルタイムの処理を

実現するのは困難であった

Storm以前の

リアルタイム処理は・・・ ・キューとワーカーによる処理

→メッセージの取得

→DBの更新

→新たなメッセージをキューに登録

① 退屈な仕事

② 脆弱

③ 拡張が大変

Storm リアルタイム 分散 耐障害性 拡張性 データの保証

Page 10: Twitterのリアルタイム分散処理システム「Storm」入門

Advanced Tech Night

9

Stormができること?

Page 11: Twitterのリアルタイム分散処理システム「Storm」入門

Advanced Tech Night

10

分散処理 のみ

Page 12: Twitterのリアルタイム分散処理システム「Storm」入門

4. Stormができること?

11

リアルタイムでの 分散処理の

実行のみに特化

シンプル かつ 強力

Page 13: Twitterのリアルタイム分散処理システム「Storm」入門

5. 3つの基本ユースケース

Advanced Tech Night

12

ストリーム処理 分散RPC 継続的な計算

•QueueとWorkerによる処理

•フォールト・トレラント

•スケーラブル

•継続的なクエリ実行

•処理結果のストリーミング

•on the fly でのクエリ実行

•並列化

•膨大なデータの処理

Stormの処理は以下の3つのユースケースが基本となる

Page 14: Twitterのリアルタイム分散処理システム「Storm」入門

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

Page 15: Twitterのリアルタイム分散処理システム「Storm」入門

7. Topology

Advanced Tech Night

14

Tuple Tuple Tuple

Spout

Bolt

Topology

Spout & Bolt からなるネットワーク構造

Bolt

Page 16: Twitterのリアルタイム分散処理システム「Storm」入門

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の構成要素

Page 17: Twitterのリアルタイム分散処理システム「Storm」入門

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数)

Page 18: Twitterのリアルタイム分散処理システム「Storm」入門

8. TaskとWoker

Advanced Tech Night

17

Task Spout、Boltの実行単位のこと

→スレッドとなる

各Taskは、クラスタ内の

ノードで動作している、

Workerプロセスで実行される

※Taskは、Worker全体で

できるだけ均等に

分散される

Task

Task

Task

Page 19: Twitterのリアルタイム分散処理システム「Storm」入門

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

Page 20: Twitterのリアルタイム分散処理システム「Storm」入門

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

Page 21: Twitterのリアルタイム分散処理システム「Storm」入門

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を受けとらせるか決める。

Page 22: Twitterのリアルタイム分散処理システム「Storm」入門

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へ送信)

Page 23: Twitterのリアルタイム分散処理システム「Storm」入門

11. 実行モード

Advanced Tech Night

22

Stormを実行する2つのモード

Local mode

(ローカルモード)

Distributed mode

(分散モード)

Stormクラスタをシミュレート可能な

モード。主に、Topologyの動作確認

として利用する。

Stormクラスタを、複数ノードに分散

して実行するモード。

実際の運用で利用する。

Page 24: Twitterのリアルタイム分散処理システム「Storm」入門

12. Hadoopとの比較

Advanced Tech Night

23

Hadoop Storm

対象 バッチ処理 リアルタイム処理

実行 • 巨大で有限のジョブ

• たくさんのデータを一度だけ

処理する

• 長い待ち時間

• 小さい無限のジョブ

• 無限のストリームデータを

連続して処理する

• 短い待ち時間

処理構成 MapReduce

→ Mapper + Reducer

Topology

→ Spout + Bolt

ノード JobTracker

TaskTracker

Nimbus

Supervisor

Stormの構成は、Hadoopと比較すると分かりやすい

ただし、Stormは、Hadoopと競合するものではない

導入するシステムの特性を見極め、使い分けることが重要

Page 25: Twitterのリアルタイム分散処理システム「Storm」入門

まとめ

1. Stormは、『分散し、フォールトトレラントなリアルタイム処理フレームワーク』である

2. 6つの特徴

①非常に幅広いユースケース ②拡張性

③データ欠損がないことの保証 ④堅牢性

⑤耐障害性 ⑥プログラミング言語非依存

3. 3つの基本ユースケース

①ストリーム処理 ②継続的な計算 ③分散RPC

4. Stormを構成する要素

• クラスタ/ Topology / Stream / Tuple / Spout / Bolt

5. 「ローカルモード」と「分散モード」で実行可能

Advanced Tech Night

24

Page 26: Twitterのリアルタイム分散処理システム「Storm」入門

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

Page 27: Twitterのリアルタイム分散処理システム「Storm」入門

Advanced Tech Night

26

Thank you

Try Storm!