連載
» 2012年04月25日 00時00分 公開

ビッグデータ処理の常識をJavaで身につける(6):リアルタイム分散処理の常識をApache S4で身につける (1/2)

Hadoopをはじめ、Java言語を使って構築されることが多い「ビッグデータ」処理のためのフレームワーク/ライブラリを紹介しながら、大量データを活用するための技術の常識を身に付けていく連載

[木村幸敏,TIS株式会社]

Hadoopの弱点「リアルタイム分散処理」とは

 「ビッグデータ」処理のためにHadoopを用いると、「複数のマシンに大量データ処理を分散して飛躍的に性能を向上する」ことが容易にできます。

 ところがHadoopの弱点として、ビッグデータをいったん蓄積し、バッチで一括処理する形態で処理するので、処理データが発生してから、それに対する処理結果が得られるまで、必ずタイムラグが発生します。このため、クレジットカードの不正アクセス検知、センサデータなどでの異常値検出のようなリアルタイムなレスポンス(低レイテンシ)が要求されるビッグデータ分野へのHadoopの適用は向いておりません。

 このような随時発生する大量データ(ストリーミングデータ)を、蓄積せずにリアルタイムに処理する「リアルタイム分散処理」が求められています。

主なリアルタイム分散処理技術7選

 現在利用できる主なリアルタイム分散処理技術を挙げます。

Hadoopの代替ソリューションとして開発

機械学習

Complex Event Processing

その他(データの集配信など)

 今回は、Apache S4(以下、S4)に焦点を当て、リアルタイム分散処理を紹介します。

リアルタイム分散処理エンジン「Apache S4」とは

 「Apache S4(Simple Scalable Streaming System)」は米Yahoo! で開発された分散環境でのリアルタイムなストリーミングデータの処理エンジンで、現在はApache Foundationで開発されています。米Yahoo! がS4を開発した目的は、検索エンジンの検索結果に検索キーワードなどを基に広告を表示するためです。

 リアルタイム性が強く求められる検索エンジンには、Hadoopの使用も検討されましたが、ストリーミングデータを一定件数ずつHadoopで処理するには、そのレスポンス時間が問題となり、また件数を小さくしてもジョブの起動時間のオーバーヘッド、データに前後関係(依存関係)がある場合の取り扱いが問題となります。そこで、S4がストリーミングデータをリアルタイムに処理する専用の処理エンジンとして開発されました。

Apache S4のアーキテクチャ

 S4は、入力されるストリーミングデータの1件1件を「イベント」という形で取り扱い、「Processing Element(PE)」という計算ユニット(ユーザーアプリケーション)で処理します。

イベント

 S4が処理するデータ「イベント(EventWrapper)」は、クラス「org.apache.s4.collector.EventWrapper」に格納され、以下を要素として持ちます。

プロパティ名 内容
event ユーザーデータを保持するPOJO
streamName ストリーム名(データを処理するPEのクラスの特定に使用)
compoundKeys POJOのどのプロパティがキーで、その値が何か(PEのインスタンスの特定に使用)

 このEventWrapperはS4内部でのデータハンドリングに使われ、ユーザーアプリケーションであるPEにはユーザーデータのPOJOだけが引き渡されます。

 また、PEが別PEにイベントを送信する際は、送信したいPOJOとともにストリーム名を指定します。これをS4内部でEventWrapperに変換し、これを処理するPEに送信することで処理が進みます。

計算ユニット「Processing Element(PE)」

 イベントは、EventWrapperのストリーム名によって決められるクラスのPEで処理され、そのPEのインスタンスはキーの値単位に存在します。PEでは各イベント受信時に実行される「processEvent」メソッドを実装します。

 また、一定時間または一定件数ごとに実行される「output」メソッドもオプションで実装できます。1つのPE内で全処理を完結する必要はなく、必要に応じた機能分割を行い、処理結果を後続のPEに送信することを検討します。

アプリケーションの例

 S4とともに提供されるサンプルの「twittertopiccount」を基にS4のアプリケーションの構成イメージを示します。

 このtwittertopiccountは、「https://stream.twitter.com/1/statuses/sample.json」よりストリーミングのデータを受信し、データ中の「text」フィールドの「#」で始まった単語をカウントし、上位10をファイル出力するものです。PEの処理概要とイベントの流れを示します。特徴としまして、以下があります。

  • S4に対してデータを送信する外部システム「TwitterFeedListener」はイベントのキーを指定しないので、S4でこのイベントを受信するTopicExtractorPEのインスタンスは1つとなる
  • TopicCountAndReportPEのインスタンスは単語単位に存在
  • データを集計するTopNTopicPEが受け取るイベントのキーreportKeyは「1」で固定なので、TopNTopicPEのインスタンスは1つとなる

 次ページでは、S4のシステム構成、アプリケーションを解説し、4つの特徴を紹介します。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。