Upload
advancedtechnight
View
4.718
Download
0
Embed Size (px)
DESCRIPTION
渡邉 卓也本セッションでは、分散ストリーム処理フレームワークである「Apache S4」の紹介を行い、「Storm」との比較によりそれぞれの特徴について説明します。
Citation preview
分散ストリーム処理フレームワーク
Apache S4
ヱヂリウム株式会社渡邉卓也
Advanced Tech Night No. 4 1
Apache S4
✜特徴❚ 汎用分散ストリーム処理フレームワーク❚ スケーラブル
ノード数に制限無し❚ それなりの耐障害性❚ 高い拡張性
JSON経由で様々な言語とやりとり可能✜記述言語
❚ Java
Advanced Tech Night No. 4 2
開発状況✜歴史
❚ 2008年10月:Yahoo! Labsで開発開始❚ 2009年9月:オープンソース化❚ 2011年10月:Apache Incubatorへ
✜現行バージョン❚ 0.3.0
http://incubator.apache.org/s4/
Advanced Tech Night No. 4 3
「リアルタイム」?✜素早い応答
❚ ミリ秒台から遅くても数秒を想定❚ ただし、(組み込み系のような)応答時間に絶対的な制約がある用途向きではない
✜開発者の想定している用途❚ 集計・フィルタ処理から
例:クリックスルーレートを算出❚ より高度な、適応的な処理までさまざま
例:ユーザの検索行動をリアルタイムに解析、個々人に最適化された広告を表示
実際にYahoo!でパーソナライズドサーチに利用されている、そうです
Advanced Tech Night No. 4 4
アーキテクチャ✜構成要素
❚ PE (Processing Elements)❚ App
ストリームで繋がったPEたち❚ イベント
PEにより生成、消費ストリーム上を流れる
PE1
PE2
App
ストリーム
イベント
Advanced Tech Night No. 4 5
イベント✜実体
❚ Javaのオブジェクト✜構成要素
❚ 属性(attribute)と値❚ MapReduceと類似❚ ただし
型付けされている複数存在できるPEはどの属性をキーにするかを選べる(key
attribute)
Advanced Tech Night No. 4 6
Processing Elements
✜特殊なPE❚ キー無しPE
入力ストリーム中の全てのイベントを消費最初のPEに使われる事が多い
❚ プロトタイプキー属性毎に一つ作られる
✜通常のPE❚ インスタンス
属性の値毎に作られるプロトタイプをコピーすることで生成される各ノードに分散して配置
Advanced Tech Night No. 4 7
public class SentenceReceiverPE extends AbstractPE {
public void processEvent(Sentence sentence) { System.out.printf("Sentence is '%s', location %s\n", sentence.getText(), sentence.getLocation()); }
@Override public void output() { // not called in this example }
@Override public String getId() { return this.getClass().getName(); }}
http://docs.s4.io/manual/getting_events_into_s4.html
簡単なPEの例必ずこのクラスを継承する
型毎に定義
Advanced Tech Night No. 4 8
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="eventCatcher" class="io.s4.example.speech01.SentenceReceiverPE"> <property name="keys"> <list> <value>RawSentence *</value> </list> </property> </bean></beans>
http://docs.s4.io/manual/getting_events_into_s4.html
定義ファイルの例
入力ストリームの名前
全てのキーを受け取る(キー無し)
PEプロトタイプの名前
Advanced Tech Night No. 4 9
ジョイン処理用定義ファイルの例
http://docs.s4.io/manual/joining_streams.html
<bean id="rerouteSentencePE" class="io.s4.processor.ReroutePE"> <property name="id" value="rerouteSentencePE"/> <property name="dispatcher" ref="dispatcher"/> <property name="keys"> <list> <value>RawSentence *</value> </list> </property> <property name="outputStreamName" value="Sentence"/></bean>
<bean id="sentenceJoinPE" class="io.s4.processor.JoinPE"> <property name="id" value="sentenceJoinPE"/> <property name="keys"> <list> <value>Sentence speechId</value> <value>Speech id</value> </list> </property> <property name="includeFields"> <list> <value>Sentence *</value> <value>Speech location</value> </list> </property> <property name="outputStreamName" value="SentenceJoined"/> <property name="outputClassName" value="io.s4.example.speech01.Sentence"/> <property name="dispatcher" ref="dispatcher"/> <property name="ttl" value="600"/></bean>
select Sentence.*, Speech.locationinto SentenceJoinedfrom Sentence, Speechwhere Sentence.speechId = Speech.id
出力のキーを指定する
インスタンスの生存期間
Advanced Tech Night No. 4 10
耐障害性✜高可用性
❚ 各ノードは対等❚ スタンバイしているノードを常時用意❚ 障害発生時に切り替え(ウォームフェイルオーバ)
❚ ZooKeeperを利用✜チェックポインティング
❚ ロシー
Advanced Tech Night No. 4 11
Stormとの比較
有り無し全数処理の保証
プログラム定義ファイル接続関係の定義
サーバ・クライアント対称ノードの役割分
担
タプルイベント(オブジェクト)入出力対象
StormS4
Advanced Tech Night No. 4 12
最近の動き✜Prototype app builder
❚ EDSLで接続関係を定義できるように
pe("Print").type(PrintPE.class).asSingleton().
pe("User Count").type(CounterPE.class).fireOn(Event.class). afterInterval(100, TimeUnit.MILLISECONDS). emit(CountEvent.class).withKeyFinder(new CountKeyFinder()).to("Print").
pe("Generate User Event").type(GenerateUserEventPE.class).timer(). withPeriod(1, TimeUnit.MILLISECONDS).asSingleton().
emit(UserEvent.class).withKeyFinder(new UserIDKeyFinder()). to("User Count").
build();
Advanced Tech Night No. 4 13
まとめ✜MapReduceと従来のストリーム処理モデルの融合❚ Stormと比べモデルは複雑❚ 込み入った処理はより簡潔に書けるかも