• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
一風変わったMapReduce解説
 

一風変わったMapReduce解説

on

  • 11,083 views

とりあえず不正確な場所は多々有りますがなんでMapReduceがこんなにフォーカスされたのかの説明になっていればと思います

とりあえず不正確な場所は多々有りますがなんでMapReduceがこんなにフォーカスされたのかの説明になっていればと思います

Statistics

Views

Total Views
11,083
Views on SlideShare
4,778
Embed Views
6,305

Actions

Likes
17
Downloads
0
Comments
0

4 Embeds 6,305

http://d.hatena.ne.jp 4607
http://nlpyutori.g.hatena.ne.jp 1682
http://webcache.googleusercontent.com 15
http://translate.googleusercontent.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • make ではマスターのノードでも対応したプロセスが走るので、同時に大量のプロセスを起動すると死ぬ ( 並列数に限界 )
  • 分散配置による負荷分散とデータロストに対する対策 分散ファイルシステム上ではブロックサイズは 64MB だが、ファイルの実体は通常のファイルシステム上に保存されるので、実際の使用容量は通常のファイルシステムのブロックサイズで決まる (HDFS 上ではどんな小さないファイルでも 64MB ととして認識される )
  • バイトレベルでの分割なので、行の途中で分かれていたりするかもしれない そのあたりの処理がどうなっているかは詳しくは知らない。
  • reduce 前に shuffle が入ることによって無駄なファイルコピーが存在しなくなる
  • なので計算の局所性は実はあんまり保たれていない。ファイル転送の無駄が大きい

一風変わったMapReduce解説 一風変わったMapReduce解説 Presentation Transcript

  • Introduction to MapReduce and all that jazz in Gumi Shunsuke AIHARA
  • Overview• What is MapReduce? • Product point of view • Computational Model point of view • Framework point of view• Example tasks • Simple experiments in Gumi using amazon elastic mapreduce• Future work
  • Goal of this presentation• MapReduceのどこがイケてたのか他と少 し違う視点から説明• MapReduce型分散処理は使うだけなら 簡単だと言うことを理解していただく • 基本の考えはとても単純 • 難しい部分は隠 されている
  • What is MapReduce?
  • MapReduce as a Product• googleの並列分散処理環境 • 分散ファイルシステムGFS • 並列処理システムMapReduce• Hadoop(+HDFS)はそのクローン• ここからは, MapReduceとHadoopはほぼ 同じものとして扱う
  • MapReduce as aComputational Model• MapReduceは並列計算のパラダイムが元 • 並列化しやすい処理パターンを利用• 並列化しやすい処理? • list処理のmap関数とreduce関数 • 副作用の無い関数型プログラミング 並列プログラミングのデザインパターン (スケルトン並列プログラミング)
  • map• 関数を受け取ってそれをリストの各要 素に(独立に)適用する高階関数 map f [x1 , x2 , ..., xn ] = [f (x1 ), f (x2 ), ..., f (xn )]• (例)リストの要素をそれぞれ二倍する • map(lambda x: x*2 , [1,2,3,4,5]) 関数 f(x) リスト
  • reduce• リストと,その要素を結合する二項演算 子を受け取って一つの結果を返す関数 reduce [x1 , x2 , ..., xn ] = x1 x2 , ..., xn• (例)リストの要素の値を足し合わせる • reduce(lambda x,y: x+y),[2,4,6,8,10]) 二項演算  リスト 分散処理の世界では処理によってここが二項演算とは限らない
  • map+reduce • mapやreduceに渡すデータ・処理がそれ ぞれ独立ならば並列化可能 • 処理の外部への副作用が無いことが条件 二項演算ならn/log2(n)倍 に高速化n倍に高速化 map処理 reduce処理
  • Simple distributed map+reduce• 処理したい巨大な(多数の)ファイルに map+reduceしたい• 分散シェルで複数サーバにタスク分散 • MPIは難しい/大規模データに向かない • 分散シェルはシェルコマンドを他の サーバに投げる/負荷分散も自動化
  • GXP Grid and Cluster Shell • 東京大学田浦研作成の分散シェル • pythonによる実装 • クラスタサーバに対してssh接続を行 い接続先サーバ上でコマンドを実行 • GXP ep: 分散シェル+タスクスケジューラ • GXP make: 分散Make(gnu Makeの分散オプ ションを利用)
  • self-made distributed map • クラスタサーバとNFSで構築 • 分散シェル(GXP ep)でタスクを分散 予め細切れに したデータを格納 タスクリスト NFSサーバ infile1map inflie1 > outfile1 infile2map inflie2 > outfile2 infile3map inflie3 > outfile3 ...map inflie4 > outfile4 ... Disk I/Oが一点に集中 GXPが空いてるサーバに ファイルの配置・転送も必要 タスクを自動で振り分け 前処理(分割作業)が必要
  • self-made distributed reduce • map時と構成はほぼ同じ • reduce処理も自分で記述(GXPで分散) タスクに依存があればGXP makeで 中間ファイル タスクリスト(make) を全て保存tmp1: map1 map2 ... reduce1 map1 map2... ....out1: tmp1 tmp2 ... reduce2 tmp1 tmp2... ...result: out1 out2 ... Disk I/Oが一点に集中 reduce3 out1 out2 ... ファイル転送が必要 複雑なreduce処理を記述 大量の中間ファイル
  • Bottleneck of distributed processing for massive data • タスクスケジューラは優秀でも... • ファイルの配置の問題 • ファイルの分割/分散配置を自動化したい • Disk I/Oを分散化 • 計算の局所性の問題 • 配置場所と計算場所は自動的に同じ場所で • ファイル転送を最小限に/タスクを自動生成並列計算分野(GXP)と大規模データ解析分野(MapReduce)のフォーカスの違い
  • From map&reduce to MapReduce• MapReduceはmap+reduceを効率的に並列 分散化するフレームワーク • 効率的な分散処理への工夫と制約 • 面倒な手続きの隠• ただし、解きたい問題をMapReduceに合 わせて再設計する必要あり
  • MapReduce as a Framework • ファイルの分散配置の実現 • MapReduceではファイルを分散ファイ ルシステムに配置(GFS,HDFS) マスターノード(ファイルシステムを管理 ファイルは64MBごとに 分割されて分散配置 各ブロックは自動で 多重化(負荷分散/高可用性)
  • MapReduce as a Framework• 計算の局所性の実現 • map処理は行レベルで独立 • データ実体のある場所でmapが起動 map map マスターノード map map 実体のある場所に mapmapタスクをばら撒く map
  • MapReduce as a Framework • map処理の概要 • 一行ごと独立の処理 • 出力は keyとvalueの複数のペアアクセスログ等 key1 val1 key2 val2 mapper key3 val3 key4 val4 ..... 行ごとの単語と頻度の対 アクセス日とユーザの対 etc...
  • MapReduce as a Framework• 計算の局所性の実現/処理の自動化 • reduce処理の前にsortとshuffle処理 • 同じkeyのデータは全て同じreducerにmapper . . .
  • MapReduce as a Framework • 計算の局所性の実現/処理の自動化 • reduce処理の前にsortとshuffle処理 • 同じkeyのデータは全て同じreducerに出力をkeyを元に R個に分割 mapper . . . . . .
  • MapReduce as a Framework • 計算の局所性の実現/処理の自動化 • reduce処理の前にsortとshuffle処理 • 同じkeyのデータは全て同じreducerに出力をkeyを元に R個に分割 mapper . . . . . .
  • MapReduce as a Framework • 計算の局所性の実現/処理の自動化 • reduce処理の前にsortとshuffle処理 • 同じkeyのデータは全て同じreducerに出力をkeyを元に 各分割毎にsortして R個に分割 reducerに割り当て mapper . . . . . .
  • MapReduce as a Framework • 計算の局所性の実現/処理の自動化 • reduce処理の前にsortとshuffle処理 • 同じkeyのデータは全て同じreducerに出力をkeyを元に 各分割毎にsortして R個に分割 reducerに割り当て mapper . reduceはkeyあたり1回のみの実行で可能 . . . . 他のmap処理と独立にreducerに投げることが可能 .
  • MapReduce as a Framework• MapReduceはkey-val pairが処理の中心 • 複雑な処理は一回のMapReduceでは難• MapReduceで複雑な処理 • MapReduceを多段化して対応 • MapReduceは単純だが汎用的
  • MapReduce as a Framework• MapReduceの良さ • 分散ファイルシステムとの組み合わせ によるI/O分散とmap処理の局所化• shuffle処理の導入によるreduceの簡易 化・局所化・効率的な並列化• 多段化により複雑な処理にも対応
  • However...• Disk I/Oが少ない or MapReduceに落とし にくい場合はGXPが便利• MapReduceを使おうとする前に... • NFSも最近は早い(EMCやNetApp) • 数十G程度ならメモリに乗る • アルゴリズムを見直す • C++やOCamlで書く, sed & awkで処理
  • Example tasks
  • simple experiment using amazon EMR• gumiでもログ解析を分散処理化 • 過去全てのデータに対し新しい処理• 抽出するデータ • 初回アクセス日からの継続数 • ユーザ間インタラクションレート
  • Basic structure of Socialgame ユーザ継続率招待された場合は インタラクションが 辞めづらい あればやめられない 招待後にも交流が出来れば ユーザ間 招待 インタラクションに繋がる インタラクション 全てのパラメータが依存している 全てに報酬とゲーム的必然性を設定することで最適化が行われる
  • Experiment environment• 全ゲームサーバのapacheログをamazon S3ストレージに保存 • HadoopのHDFS相当 • ログにはアクセスユーザ識別子を付与• amazon elastic mapreduceを用いて分散処 理を行う • EC2インスタンス+Hadoopの構成
  • Experiment environment• 全ゲームサーバのapacheログをamazon S3ストレージに保存 但しMapReduceが動く場所と • HadoopのHDFS相当 ファイルを保存している場所は別 • ログにはアクセスユーザ識別子を付与• amazon elastic mapreduceを用いて分散処 理を行う • EC2インスタンス+Hadoopの構成
  • Experiment environment• mapperやreducerもS3上に配置 • hadoop streaming apiを利用しpythonで作成• AWS Management Consoleでタスク実行 ※コマンドラインツールも有り コンソールの使い方はググれ
  • Persistence rate http://ec2-75-101-191-9.compute-1.amazonaws.com/admin/sweet/• ユーザが初回アクセスのn日後にもアクセスし ているかどうかをバブルチャートで可視化• ゲームプレイがルーチン化しているかどうか
  • Calucurate persistence rate• map処理の内容 独自apachログパーサー csvモジュール+αを利用してパース 一行ごとに処理 ユーザidをkey,日付のiso表記をvalとしてtab区切りで出
  • Calucurate persistence rate • reduce処理の内容ユーザと日付セットを記憶 一ペアごとに処理 日付をsetの形で記録 ユーザごとにアクセス日を昇順で記録
  • Calucurate persistence rate • 後処理 • MapReduceの結果をダウンロードして処理 • amChart(bubble)用のデータに加工文字列からdateオブジェクトへ 初回アクセス日の取り出し初アクセス日とオフセットを ペアにしてカウント 集計結果をファイル出力
  • Result: Persistence rate http://ec2-75-101-191-9.compute-1.amazonaws.com/admin/sweet/• 縦軸が初回アクセス日• 横軸が初回アクセス日からのオフセット• 縦軸横軸共に減衰が少ないことが望ましい
  • user2user interaction rate Special Thanks!! Mr. Kamatani!!• DAUに対して,他のユーザに対してアクション を起こしたユーザの数を比較• ソーシャル性を計る指標としてaiharaが定義 • 参考:顧客間インタラクション(国領二郎)
  • user2user interaction rate• コードは少し長いので割愛• コメント等のURLパターンを分類集計• DAUは既存の解析済みデータを利用• mapタスク: • 日付がkey • ユーザーidとアクションのペアがvalue
  • user2user interaction rate• reduceタスク: • 日付ごとに処理 • keyをアクション,valueをユーザーidの setとしたdictionaryを作成 • ユーザidのセットを元に, 日-アクショ ン-人数の3つ組を作成
  • Result:user2user interaction rate Special Thanks!! Mr. Kamatani!!• インタラクションが多くなるとコミュニケー ションの場となり易くユーザのアクティブ率 が上がる(コミュニティとして成立)• インタラクション人口が多ければ交流が活発
  • Conclusion• この程度(ログ1ヶ月*6台分)なら • 設計: 5分 • コーディング: 5分 • 実行: 10分(EC2 small instance 10台)• 過去にさかのぼって新しい解析がした い時でも簡単にテストが可能
  • Future work• MapReduceは小さな処理には向かない • バッチ処理と上手く組み合わせ • 現在作成中• インタラクション率はアクションを 行った人だけではなく, 行われた人(コメ ントしてもらった人)も取得 • 鎌谷さんが作成済み!!
  • Thank you for your attention!
  • Thank you for your attention!