関西のPerlユーザグループKansai.pmでの勉強会にて、はてなの伊藤直也氏が発表したセッション資料です。資料には、Googleの根幹技術であるMapReduceの解説やPerlでのMapReduce実装、さらにJavaオープンソースプロダクトのHadoopを使ってMapReduceを行う方法について書かれています。MapReduceは、関数型言語に由来するmap関数とreduce関数を定義して大規模なデータを多数のサーバで処理するシステムです。
伊藤氏は、MapReduceの計算モデルをPerlモジュール化した自作のMapReduce::Liteを使って、Apacheのログ解析を題材にコード例を示しています。しかし、ただ計算モデルだけを実装してもGoogleのように大規模なデータ処理は行えません。分散ファイルシステムを利用し複数マシンにデータを分割してそれぞれ処理することで、大きなデータを扱うことができます。
そこでMapReduceと分散ファイルシステムを備えたHadoopの登場です。HadoopはJavaで実装されているので通常MapperとReducerはJavaで書く必要がありますが、Hadoop Streamingを使えば標準入出力を扱えるものであれば何でもMapper、Reducerにすることができます。資料ではPerlスクリプトを使った例を挙げています。また、Hadoop StreamingをPerlで扱いやすくするための自作フレームワークも紹介しています。ちなみに、発表資料には書かれていませんがHadoop Pipesを使えばC++で高速に実装することもできます。
このように、Hadoopを使えば誰でもGoogleのようにMapReduce処理を行うことができます。実際FacebookやMySpace、Last.fmといったサービスは、Hadoopで数十台~数百台のマシンを使って、数十Tバイト~数Pバイトものデータを処理しています。
URL:http://d.hatena.ne.jp/naoya/20080531/1212245982