4. MapReduceの制約
• 入力と出力が一つずつでは不便
o バッチ処理にせざるを得ない
o 複数のクライアントからのデータをまとめる仕組が必須
• 投入スケジューリングが難しい
o データをリアルタイムに処理したい
o でも効率化のためにはまとめて投入したい
• データを渡す時、いちいち(Hadoopの場合)HDFSに
書くのでは遅い
• MapReduceは投入したデータを全部処理しようとする
o 高負荷の時は、レスポンスが遅れてしまう
6. Event
値
date 2011-01-27
Name Taro
Action Login
例: ユーザの行動を表すイベント
• イベントは、属性-値の対のリスト
o プログラム上では、ただのJavaBeanオブジェクト
• イベントには、タイプがある
o PEは自分の対応するタイプのイベントだけを処理する
7. PE: Processing Element
• イベントを処理する基本単位
• ストリームを介してイベントを受入・送出する
o ストリームは複数本あっても良い
• イベントを受け取る度に、何らかの処理をする
o 処理結果は、新しいイベントとして送出
o または、ファイルやDBに出力する
o 基本的な処理(集計や名寄せ等)は予め用意されている
17. フェイルオーバー
• PEが落ちた時
o ProcessNodeがイベントを再投入する
o PEの処理状態は失われてしまう
しかたない
• ProcessNodeが落ちた時
o 予備のProcessNodeをスタンドバイさせておく
o スタンドバイノードは、負荷分散にも使用する(らしい)
• S4全体はZooKeeperクラスタで管理
o 物理ノード数は固定
18. Yahoo!チームのS4利用例(1)
• 広告システム
o 検索時に埋め込んだURLと、あとで実際にクリックされたURL
の突き合わせ
これを効率的にやるのは意外と難しい
o スパムやボットの検出
広告の意味がないクリックを上手くフィルタリング
o 検索結果に合わせて、システムを最適化
• …といった機能をS4で実装
→ クリックスルー率(CTR)を3%向上
19. 広告検知システムのパフォーマンス
Events per Second Relative Error in CTR Data Rate
2000 0.0% 2.6Mbps
3644 0.0% 4.9Mbps
7268 0.2% 9.7Mbps
10480 0.4% 14.0Mbps
12432 0.7% 16.6Mbps
14900 1.5% 19.9Mbps
16000 1.7% 21.4Mbps
20000 4.2% 26.7Mbps
• { 64bitCPU x 4, 16GBMemory } x 8台
• 1台で2個ずつ、計16個のProcessNodeを起動
• 実データを別環境で再投入して測定