Wikipedia はスルー。ちょっと疲れたのでスライドで。
概要:
- map(in_key, in_value) -> list(out_key, intermediate_value)
- 中間ファイルは (worker, out_key) 毎に別ファイルぽい。(out_key)毎の中間ファイルにしてatomic append なんてことをすると fault tolerance が崩れるかな?
- reduce(out_key, list(intermediate_value)) ->list(out_value)
- out_key のファイルを読んで、実行するだけ。
- Fault tolerance
- worker failure ... detect via heartbeat. re-execute
- まあ、map も reduce もやり直せばよし。
- master failure ... あまりない
- Slow workers のせいで遅くなったりする。
- Weird things: processor caches disabled (!!) だって ;-)
- バックアップタスクを起動する。(Near end of phase)
- GFS chunks の replica のあるマシン(または同じラック)上で処理するようにスケジュール
- 64MB にあうように map する。データ構造をあわせておく必要ありかな。
- BigTable ならその辺は考慮済みか。
- Bad recoreds
- SEGV signal handler から UDP で master に通知
- 3rd party libでもOK
- 1800 Machines
- 4GB mem, Dual 2GHz Xeons with Hyper-threading @ 2004
- Dual 160GB IDE
- GbE, Bisection bandwidth approx. 100Gbps
- Result
- start overhead
- 1800 machines read 1TB data at 31TB @ peak.
- Experience
- 故障とか遅いマシンの面倒を見てくれる!
- simple な code. MapReduce の組み合わせ。
- Fun to use!!
メモ:
- shuffle ... read する順をかえてるってだけかな。
- BigTable の論文を読むと、BigTable 用みたいなイメージがあったが、BigTableなしでもOK。chunk へのデータのアラインとか考えると、直接GFSをさわるのは面倒そうではある。
- GFS とセットでの運用で真価を発揮。まあこの辺は勉強するまでもないか。
- 結局肝は、故障とかトラブルを隠蔽できるところにあるのかな。
- Fun to use!!
- まあ、サーバーセンターが一つのマシンに見たてたくなる気分が少しわかる、、、かな。
0 件のコメント:
コメントを投稿