Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

S4

6,726 views

Published on

  • Be the first to comment

S4

  1. 1. S42011/1/27 第19回あしたの研塩谷沢生(インフォサイエンス株式会社)
  2. 2. S4とは• Simple・Scalable・Streaming・System• Yahoo!の検索広告最適化チームが開発した システムがベース• 数年間の開発期間を経て、2010年10月にオープンソースとし 公開• MapReduceに”インスパイアされた”、 しかし全く別の考え方によるデータ処理フレームワーク
  3. 3. おさらい・MapReduceの処理• 入力と出力が一つずつ• Map/Reduceの組で一つの処理を実現• 全体の処理はマスターノードがコーディネイトする Map1 key1= v1, v2... Reduce Output Input Map2 key2= v1, v2 ... Reduce Map3
  4. 4. MapReduceの制約• 入力と出力が一つずつでは不便 o バッチ処理にせざるを得ない o 複数のクライアントからのデータをまとめる仕組が必須• 投入スケジューリングが難しい o データをリアルタイムに処理したい o でも効率化のためにはまとめて投入したい• データを渡す時、いちいち(Hadoopの場合)HDFSに 書くのでは遅い• MapReduceは投入したデータを全部処理しようとする o 高負荷の時は、レスポンスが遅れてしまう
  5. 5. S4のしくみ• データが次々に「イベント」として飛んでくる• イベントは「PE」が処理する o Processing Elementの略• イベントを処理したPEは、またイベントを投げる o あるいはDBなどの外部のシステムに出力する• いわゆる「アクターモデル」
  6. 6. Event 値 date 2011-01-27 Name Taro Action Login 例: ユーザの行動を表すイベント• イベントは、属性-値の対のリスト o プログラム上では、ただのJavaBeanオブジェクト• イベントには、タイプがある o PEは自分の対応するタイプのイベントだけを処理する
  7. 7. PE: Processing Element• イベントを処理する基本単位• ストリームを介してイベントを受入・送出する o ストリームは複数本あっても良い• イベントを受け取る度に、何らかの処理をする o 処理結果は、新しいイベントとして送出 o または、ファイルやDBに出力する o 基本的な処理(集計や名寄せ等)は予め用意されている
  8. 8. PEとキー属性: 単語カウント• 例:単語の出現頻度をカウントするアプリを考える o アプリケーションは、単語を1つずつ抽出して イベントとして送る o S4は、WordCount PEというPEで単語イベントを受け取り 出現回数を算える
  9. 9. PEはキー属性ごと• S4では、属性の値ごとにPEを生成する o この例では、単語の種類ごとにPEが用意される• PEが注目する属性を、キー属性と呼ぶ o DBで言う主キーのようなもの• PEを実装する側も、複数の値が来る心配をしなくて良い o この例では、イベントの到着回数 = 単語の出現頻度
  10. 10. PEの生成と削除• 新しい単語が登場する度に、新しいPEが生成される o PEの生成はコピーによる o コピー元のことを、PEプロトタイプという• PEには有効期限(TTL)がある o 一定期間使われていないPEは不活状態に o 不活状態のPEは、リソース不足の時に削除される
  11. 11. キー属性によるJoin• 複数のタイプのイベントを受け取るPEでは、そのタイプご とにキー属性を指定する o 上の例でID matching PEは、以下をキーとしている  UserActionイベントのaccount属性  AuthResultのuserId属性• つまり、同じキーを持つイベント同士が同じPEに集まる
  12. 12. PN: ProcessNode• PEの生成削除、イベントの配信を一手に管理する o 処理可能なイベントの管理 o 外部との通信・ノード間通信 o フェイルオーバー• S4のランタイムの基本単位
  13. 13. ProcessNode間での処理分散• S4は非常に特徴的な分散ロジックを採用している o PEはキー属性値ごとに生成される o そのPEがどのProcessNodeに置かれるかは、 キー属性値のハッシュで決まる• つまり同じキーのイベントは必ず同じノードが処理する
  14. 14. S4アーキテクチャのメリット• 同じキーのイベントは必ず同じノードが処理する• メモリ上で処理を完結させられる o データを分散FSなどで共有しなくて良い• 次にどこにイベントを渡すかを、自律的に判断できる o タスク割り当てを集中管理しなくて良い
  15. 15. キーレスイベント: 外部からのデータ入力• 外部のシステムから最初に送るイベントは、キー属性がない o キーレスイベントと呼ぶ• 送り先のProcessNodeはラウンドロビンなどで適当に選ぶ o クライアントライブラリがやってくれる(ようです)
  16. 16. 外部システムへの出力• PEにはイベントを受けとった時以外に、出力処理を行 えるタイミングがある o N個のデータを処理する度に出力 o N秒経過したら出力
  17. 17. フェイルオーバー• PEが落ちた時 o ProcessNodeがイベントを再投入する o PEの処理状態は失われてしまう  しかたない• ProcessNodeが落ちた時 o 予備のProcessNodeをスタンドバイさせておく o スタンドバイノードは、負荷分散にも使用する(らしい)• S4全体はZooKeeperクラスタで管理 o 物理ノード数は固定
  18. 18. Yahoo!チームのS4利用例(1)• 広告システム o 検索時に埋め込んだURLと、あとで実際にクリックされたURL の突き合わせ  これを効率的にやるのは意外と難しい o スパムやボットの検出  広告の意味がないクリックを上手くフィルタリング o 検索結果に合わせて、システムを最適化• …といった機能をS4で実装→ クリックスルー率(CTR)を3%向上
  19. 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を起動• 実データを別環境で再投入して測定
  20. 20. Yahoo!チームのS4利用例(2)• システムパラメータのチューニングに活用 o パラメータを変えながらシステムを稼動 o 出力結果を分析して、より有効なパラメータにシステムを自動 調整 o 収益を0.25%、ユーザのクリック数を1.4%アップ
  21. 21. S4でのプログラミング• 開発者の仕事 = イベントとPEのプログラム + 構成• イベントのプログラミング o 単純なJavaBeansで良い o TutorialなどではScalaを使用• PEのプログラミング o 実装する処理は基本的に二つ  processEvent():イベント取得時の処理  output() : 出力の処理(N回ごと、またはN秒ごとの処理)• 全体の構成は設定ファイルで記述 o つまり、PEという部品を用意しておいて S4で全体を繋ぎ合わせるイメージ o 部品(PE)の使い回しが非常に柔軟にできる
  22. 22. MapReduceとの比較(1/3)• データにキー値があり、これで分散処理するのは同じ o MapReduce:  Mapがキーを付け、Reduceが同じキーのデータを処理する o S4:  イベントにはキーがあり、キーごとのPEが処理する• データの投入の仕方 o MapReduce  単一のファイルを、各ノードが参照  入力は一つ、出力も一つ o S4: キー値に基づいて、直接ノードに送る  入力も出力も各PEが任意に行う
  23. 23. MapReduceとの比較(2/3)• 処理の単位 o MapReduce  Map-Reduceの組で一つの処理  Map-Reduceが全部終わるまで結果は分からない o S4  処理ごとにPEがあり、PE同士がストリームで連携  PEは定期的に出力を出せる
  24. 24. MapReduceとの比較(3/3)• データの扱い o MapReduce  HDFSなどの分散ファイルシステム上に置く  障害時はそこから再投入 o S4  基本的にオンメモリ  障害時は諦める• 色々な意味で、MapReduceとは対照的な性質のフレームワーク• 他に似たモデルを採用しているフレームワークとして、 Microsoftの"Dryad"がある o 色々高機能(Simpleではない)
  25. 25. S4の用途• 大量のデータをリアルタイムに処理できるのが特徴 o 急激なデータ量の変化に追随 o ある程度の不正確さを許容する寛容さが必要• 向いている用途 o 傾向分析・ランキング o パラメータチューニング o 機械学習• 不向きな用途 o 厳密な集計 o 監視システムなど

×