久しぶりにPTTに参加した(#318th PTT (in Japanese))。東大に行くのもチョー久しぶりということもあって根津の坂をのぼるときには感慨めいたものを感じすらした。
今回はGoogleの林芳樹さんがMapReduceの話をしてくれるとあって異様に盛況だった。20人を切ることも稀でないPTTにあって60人以上の参加者。和田英一先生がイニシャルオーダーの話をしてくださった回には及ばないものの、Googleのネームバリューはすごいのね。話の内容はOSDI04のスライドとほぼ同じだったので参加できなかった方は以下を参照のこと。
MapReduce:Simplified Data Processing on Large Clusters
MapReduceフレームワークで気になる点は二つある。
一つはmap操作をiterativeに適用したい場合にはどうするのかということ。もちろん、Reduce関数をid関数にしてMapReduceを繰り返せば済むが非常に効率が悪い。本質的にはMapReduceに加え、単独のMapをフレームワークとして許せばよいと思うのだが。他に副作用のあるMap関数を定義しておいてReduceフェーズをほとんどomitするという方法も考えられるのだが、Mapフェーズが途中で異常終了した場合などにはプログラムが面倒を見る必要が出てくる。もっとも日常的に行うバッチ処理では、あらかじめMap関数を手で合成しておけば実用には堪える。
もう一つはReduceフェーズの負荷分散がrobustでないことだ。システムが処理の多寡を見積もって負荷分散してくれるわけではなく、分散を決定するハッシュを定義(partitioning function)できるだけである。つまりはハッシュ値ごとの負荷が平均的に分散しているという暗黙の前提がある。ハッシュのナイーブさ加減によっては、負荷分散として機能しないというケースも想定される。MapReduceというフレームワーク自体が処理の大半をMapフェーズにfoldingすることを前提にしているのだろうから、仮にReduceの効率が悪くなったとしても構わないと無理矢理納得できないこともないが…。
飲み会はいつもの面々で、いつもの大八。少し酒の入った某さんが割とのっぴきならないことをカミングアウトしてきた。言いたくてしょうがなかっただろうなーと思った(笑)。