More Related Content Similar to MapReduce解説 (20) MapReduce解説2. 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
3. Goal of this presentation
• MapReduceのどこがイケてたのか他と少
し違う視点から説明
• MapReduce型分散処理は使うだけなら
簡単だと言うことを理解していただく
• 基本の考えはとても単純
• 難しい部分は隠 されている
5. MapReduce as a Product
• googleの並列分散処理環境
• 分散ファイルシステムGFS
• 並列処理システムMapReduce
• Hadoop(+HDFS)はそのクローン
• ここからは, MapReduceとHadoopはほぼ
同じものとして扱う
6. MapReduce as a
Computational Model
• MapReduceは並列計算のパラダイムが元
• 並列化しやすい処理パターンを利用
• 並列化しやすい処理?
• list処理のmap関数とreduce関数
• 副作用の無い関数型プログラミング
並列プログラミングのデザインパターン
(スケルトン並列プログラミング)
7. map
• 関数を受け取ってそれをリストの各要
素に(独立に)適用する高階関数
map f [x1 , x2 , ..., xn ] = [f (x1 ), f (x2 ), ..., f (xn )]
• (例)リストの要素をそれぞれ二倍する
• map(lambda x: x*2 , [1,2,3,4,5])
関数 f(x) リスト
8. reduce
• リストと,その要素を結合する二項演算
子を受け取って一つの結果を返す関数
reduce [x1 , x2 , ..., xn ] = x1 x2 , ..., xn
• (例)リストの要素の値を足し合わせる
• reduce(lambda x,y: x+y),[2,4,6,8,10])
二項演算 リスト
分散処理の世界では処理によってここが二項演算とは限らない
9. map+reduce
• mapやreduceに渡すデータ・処理がそれ
ぞれ独立ならば並列化可能
• 処理の外部への副作用が無いことが条件
二項演算ならn/log2(n)倍
に高速化
n倍に高速化 map処理 reduce処理
10. Simple distributed
map+reduce
• 処理したい巨大な(多数の)ファイルに
map+reduceしたい
• 分散シェルで複数サーバにタスク分散
• MPIは難しい/大規模データに向かない
• 分散シェルはシェルコマンドを他の
サーバに投げる/負荷分散も自動化
11. GXP Grid and Cluster Shell
• 東京大学田浦研作成の分散シェル
• pythonによる実装
• クラスタサーバに対してssh接続を行
い接続先サーバ上でコマンドを実行
• GXP ep: 分散シェル+タスクスケジューラ
• GXP make: 分散Make(gnu Makeの分散オプ
ションを利用)
12. self-made distributed map
• クラスタサーバとNFSで構築
• 分散シェル(GXP ep)でタスクを分散
予め細切れに
したデータを格納
タスクリスト NFSサーバ infile1
map inflie1 > outfile1 infile2
map inflie2 > outfile2 infile3
map inflie3 > outfile3 ...
map inflie4 > outfile4
...
Disk I/Oが一点に集中
GXPが空いてるサーバに ファイルの配置・転送も必要
タスクを自動で振り分け 前処理(分割作業)が必要
13. 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処理を記述 大量の中間ファイル
14. Bottleneck of distributed
processing for massive data
• タスクスケジューラは優秀でも...
• ファイルの配置の問題
• ファイルの分割/分散配置を自動化したい
• Disk I/Oを分散化
• 計算の局所性の問題
• 配置場所と計算場所は自動的に同じ場所で
• ファイル転送を最小限に/タスクを自動生成
並列計算分野(GXP)と大規模データ解析分野(MapReduce)のフォーカスの違い
15. From map&reduce to
MapReduce
• MapReduceはmap+reduceを効率的に並列
分散化するフレームワーク
• 効率的な分散処理への工夫と制約
• 面倒な手続きの隠
• ただし、解きたい問題をMapReduceに合
わせて再設計する必要あり
16. MapReduce as a
Framework
• ファイルの分散配置の実現
• MapReduceではファイルを分散ファイ
ルシステムに配置(GFS,HDFS)
マスターノード
(ファイルシステムを管理
ファイルは64MBごとに
分割されて分散配置
各ブロックは自動で
多重化(負荷分散/高可用性)
17. MapReduce as a
Framework
• 計算の局所性の実現
• map処理は行レベルで独立
• データ実体のある場所でmapが起動
map
map
マスターノード map
map
実体のある場所に map
mapタスクをばら撒く map
18. MapReduce as a
Framework
• map処理の概要
• 一行ごと独立の処理
• 出力は keyとvalueの複数のペア
アクセスログ等
key1 val1
key2 val2
mapper key3 val3
key4 val4
.....
行ごとの単語と頻度の対
アクセス日とユーザの対 etc...
19. MapReduce as a
Framework
• 計算の局所性の実現/処理の自動化
• reduce処理の前にsortとshuffle処理
• 同じkeyのデータは全て同じreducerに
mapper
.
.
.
20. MapReduce as a
Framework
• 計算の局所性の実現/処理の自動化
• reduce処理の前にsortとshuffle処理
• 同じkeyのデータは全て同じreducerに
出力をkeyを元に
R個に分割
mapper
.
.
. .
.
.
21. MapReduce as a
Framework
• 計算の局所性の実現/処理の自動化
• reduce処理の前にsortとshuffle処理
• 同じkeyのデータは全て同じreducerに
出力をkeyを元に
R個に分割
mapper
.
.
. .
.
.
22. MapReduce as a
Framework
• 計算の局所性の実現/処理の自動化
• reduce処理の前にsortとshuffle処理
• 同じkeyのデータは全て同じreducerに
出力をkeyを元に 各分割毎にsortして
R個に分割 reducerに割り当て
mapper
.
.
. .
.
.
23. MapReduce as a
Framework
• 計算の局所性の実現/処理の自動化
• reduce処理の前にsortとshuffle処理
• 同じkeyのデータは全て同じreducerに
出力をkeyを元に 各分割毎にsortして
R個に分割 reducerに割り当て
mapper
.
reduceはkeyあたり1回のみの実行で可能
.
. .
. 他のmap処理と独立にreducerに投げることが可能
.
24. MapReduce as a
Framework
• MapReduceはkey-val pairが処理の中心
• 複雑な処理は一回のMapReduceでは難
• MapReduceで複雑な処理
• MapReduceを多段化して対応
• MapReduceは単純だが汎用的
25. MapReduce as a
Framework
• MapReduceの良さ
• 分散ファイルシステムとの組み合わせ
によるI/O分散とmap処理の局所化
• shuffle処理の導入によるreduceの簡易
化・局所化・効率的な並列化
• 多段化により複雑な処理にも対応
26. However...
• Disk I/Oが少ない or MapReduceに落とし
にくい場合はGXPが便利
• MapReduceを使おうとする前に...
• NFSも最近は早い(EMCやNetApp)
• 数十G程度ならメモリに乗る
• アルゴリズムを見直す
• C++やOCamlで書く, sed & awkで処理
28. simple experiment
using amazon EMR
• gumiでもログ解析を分散処理化
• 過去全てのデータに対し新しい処理
• 抽出するデータ
• 初回アクセス日からの継続数
• ユーザ間インタラクションレート
29. Basic structure of Socialgame
ユーザ継続率
招待された場合は インタラクションが
辞めづらい あればやめられない
招待後にも交流が出来れば ユーザ間
招待 インタラクションに繋がる インタラクション
全てのパラメータが依存している
全てに報酬とゲーム的必然性を設定することで最適化が行われる
33. Persistence rate
http://ec2-75-101-191-9.compute-1.amazonaws.com/admin/sweet/
• ユーザが初回アクセスのn日後にもアクセスし
ているかどうかをバブルチャートで可視化
• ゲームプレイがルーチン化しているかどうか
36. Calucurate persistence rate
• 後処理
• MapReduceの結果をダウンロードして処理
• amChart(bubble)用のデータに加工
文字列からdateオブジェクトへ
初回アクセス日の取り出し
初アクセス日とオフセットを
ペアにしてカウント
集計結果をファイル出力
37. Result: Persistence rate
http://ec2-75-101-191-9.compute-1.amazonaws.com/admin/sweet/
• 縦軸が初回アクセス日
• 横軸が初回アクセス日からのオフセット
• 縦軸横軸共に減衰が少ないことが望ましい
38. user2user interaction rate
Special Thanks!! Mr. Kamatani!!
• DAUに対して,他のユーザに対してアクション
を起こしたユーザの数を比較
• ソーシャル性を計る指標としてaiharaが定義
• 参考:顧客間インタラクション(国領二郎)
Editor's Notes make ではマスターのノードでも対応したプロセスが走るので、同時に大量のプロセスを起動すると死ぬ ( 並列数に限界 ) 分散配置による負荷分散とデータロストに対する対策 分散ファイルシステム上ではブロックサイズは 64MB だが、ファイルの実体は通常のファイルシステム上に保存されるので、実際の使用容量は通常のファイルシステムのブロックサイズで決まる (HDFS 上ではどんな小さないファイルでも 64MB ととして認識される ) バイトレベルでの分割なので、行の途中で分かれていたりするかもしれない そのあたりの処理がどうなっているかは詳しくは知らない。 reduce 前に shuffle が入ることによって無駄なファイルコピーが存在しなくなる なので計算の局所性は実はあんまり保たれていない。ファイル転送の無駄が大きい